Python之tkinter外卖点什么

模块

Tkinter – 标准 GUI(Graphical User Interface,图形用户接口)库,Python 使用 Tkinter 可以快速地创建 GUI 应用程序,在 Python2 和 Python3 中,Tkinter 都在标准库中,无需安装即可使用。在 Python2 中,这个库叫 Tkinter ,在 Python3 中,这个库叫 tkinter ,首字母大小写不相同,在导包时需要注意。

思路

1、创建一个大小适合的窗口,使用 Tkinter.Tk() 方法即可创建并返回一个窗口对象 window(自定义的对象名)
使用 window 对象的 geometry(widthxheight+x+y) 方法来设置窗口的大小,geometry() 方法中的参数必须按照格式传入才行,参数格式为 widthxheight+x+y,如 ‘405×320+250+15’,width 是窗口的宽度,height 是窗口的高度,中间使用乘号连接,如果敲不出这个符号,可以去源码中复制,x 和 y 用于设置窗口离电脑屏幕左上角的距离。

2、设置文字显示框
抽取时,要在界面上快速地滚动显示当前的内容,所以要设置一个文字显示框。
使用 Tkinter 中的 Label 类(不一定用 Label ,实现方法有很多),实例化 Label 的对象来显示文字,充当显示框。Label 标签默认不可点击不可选中也不可编辑,用来显示比较少的内容(人名)是比较适合的。
要设置 Label 显示的文字,需要实例化一个 StringVar 类的对象,使用 StringVar 中的 value 传入初始显示的内容。在 Label 中 将 StringVar 对象传给 textvariable ,这样 Label 和 StringVar 就一一对应起来了。
实例化 Label 时,第一个参数必须是 Tkinter 窗口对象 window,然后使用关键字参数的方式,根据需要设置显示框大小,背景颜色,显示字体等,再通过 Label 对象的 place() 方法设置它相对于窗口左上角的位置。
需要多个 Label 时,如法炮制。

3、设置按钮
在界面中,需要两个按钮,一个“开始”按钮,一个“结束”按钮,用来控制抽取的开始和停止。(当然也可以设置成同一个按钮,实现方法也差不多)
使用 Tkinter 中的 Button 类,实例化 Button 的对象来创建按钮。
实例化 Button 时,第一个参数也必须是 Tkinter 窗口对象 window,然后根据需要设置按钮大小,背景颜色,显示字体等,最后还是使用 place() 方法设置它相对于的窗口左上角的位置。
当点击按钮时,要开始或结束,也就是说点击按钮时,要触发某件事。触发的事件可以使用函数来实现,然后用匿名函数的方式传给 Button 中的 command ,将点击按钮和事件处理关联到一起。

代码实现

# -*- coding: utf-8 -*-
"""
 * @Date : 2020-10-14 10:54
 * @Auth : xiaoshuai.zhu
 * @File :外卖点什么.py
 * @IDE :PyCharm
 * @Version 1.0
"""

# coding=utf-8
import sys

if sys.version_info[0] == 2:
    import tkinter
    from tkinter import *
else:
    import tkinter as tkinter
    from tkinter import *
import random

data = ['黄焖鸡米饭', 'KFC', '冒菜', '便当', '粥', '馄饨', '香锅', '海南鸡饭', '米线', '烤肉拌饭', '披萨', '酸菜鱼', '鸡公煲', '小杨生煎', '汉堡王', '烧烤']
going = True
is_run = False

def lottery_roll(var1, var2):
    global going
    show_member = random.choice(data)
    var1.set(show_member)
    if going:
        window.after(50, lottery_roll, var1, var2)
    else:
        var2.set('好咧哥,就点 {} 了!!!'.format(show_member))
        going = True
        return

def lottery_start(var1, var2):
    global is_run
    if is_run:
        return
    is_run = True
    var2.set('待会吃什么呀?')
    lottery_roll(var1, var2)

def lottery_end():
    global going, is_run
    if is_run:
        going = False
        is_run = False

if __name__ == '__main__':
    window = tkinter.Tk()
    window.geometry('405x320+250+15')
    window.title('      外卖点什么?')

    bg_label = Label(window, width=70, height=24, bg='#ECf5FF')
    bg_label.place(anchor=NW, x=0, y=0)

    var1 = StringVar(value='准备')
    show_label1 = Label(window, textvariable=var1, justify='left', anchor=CENTER, width=17, height=3, bg='#BFEFFF',
                    font='楷体 -40 bold', foreground='black')
    show_label1.place(anchor=NW, x=21, y=20)
    var2 = StringVar(value='待会吃什么呀?')
    show_label2 = Label(window, textvariable=var2, justify='left', anchor=CENTER, width=38, height=3, bg='#ECf5FF',
                    font='楷体 -18 bold', foreground='red')
    show_label2.place(anchor=NW, x=21, y=240)

    button1 = Button(window, text='开始', command=lambda: lottery_start(var1, var2), width=14, height=2,  bg='#A8A8A8',
                 font='宋体 -18 bold')
    button1.place(anchor=NW, x=20, y=175)
    button2 = Button(window, text='结束', command=lambda: lottery_end(), width=14, height=2, bg='#A8A8A8',
                 font='宋体 -18 bold')
    button2.place(anchor=NW, x=232, y=175)

    window.mainloop()

上一篇
下一篇