知识点

tkinter模块的使用

此模块是python界面开发模块,实例中是最基本用法以及消息框的基本用法

实例

from tkinter import *
from tkinter.messagebox import *
import time
import random


# 10秒挑战
def ten():
    global start
    global count
    global fight_count
    num = random.choice(rans)
    # 按钮点击后显示停止
    fight['text'] = '停止'
    if not start:
        start = True
        while start:
            time.sleep(num)
            count += 0.2
            show['text'] = format(count, '.1f')
            show.update()
        # 游戏次数计数器
        fight_count += 1
        fight_num = Label(root, text='第%d次挑战成绩:' % fight_count + show['text'])
        fight_num.pack()
        if show['text'] == str(10.0):
            warn = showwarning(title='挑战10秒', message='挑战成功!')
        else:
            warn = showwarning(title='挑战10秒', message='挑战失败!')
    else:
        start = False
        fight['text'] = '继续挑战'
        count = 0

# 计时器,60秒提醒一次
def conunts_60():
    pass


if __name__ == '__main__':

    rans = [0.1, 0.08, 0.06, 0.04]
    count = 0
    fight_count = 0
    start = False

    root=Tk()
    # 窗体标题
    root.title('挑战10秒')
    # 窗体置顶
    root.wm_attributes('-topmost', 1)
    # 窗体大小,注意这里‘x’是小写字母,不是‘*’
    root.geometry('400x200')
    # 固定窗体尺寸不可改变
    root.resizable(width=False, height=False)
    # 设置窗体中游戏标题
    topic = Label(root, text='点击开始挑战')
    topic.pack()
    show = Label(root, text=str(count))
    show.pack()
    # 绑定按钮功能,ten函数绑定时不能带括号
    fight = Button(root, text='开始挑战', command=ten)
    fight.pack()
    fight_title = Label(root, text='挑战次数↓')
    fight_title.pack()

    mainloop()

挑战10秒游戏.png

问题总结

游戏次数的计数问题

起初设想是在main函数定义一个计数器,在ten方法里面进行累加,发现该想法不实现,主要原因是每次点击开始挑战都会调用ten函数,而在main里面定义的变量是无法在ten函数中检测到的(这里还是不太明白,太晚了也没有深究)
最后想到的办法就是在ten函数中定义一个全局变量,在main中对他进行初始化,进而做到计数的功能,但是具体该方法是不是最优解还待日后学习深入才能给出结论

button如何绑定功能函数

在例子中使用的是ten直接绑定,但是使用ten()就不可以,设想如果功能函数需要入参的话,该如何实现?
这个也是此次学习中的疑问,这两天查找下资料给出结论!