我运行python 3.4,我知道一些关于编程的东西,但是我不能让我的程序计算用户点击按钮的次数。这是我试过的。
import tkinter as tk
counter = 0
def counter_label(label):
counter = 0
def mbutton():
def count():
global counter
counter +=1
label.config(text=str(counter))
label.after(1000, count)
count()
root = tk.Tk()
root.title("Counting Seconds")
label = tk.Label(root, fg="green")
label.pack()
counter_label(label)
button = tk.Button(root, text='button', command=mbutton).pack()
root.mainloop
我按下了按钮然后它继续计数,所以尝试了等号和加号的不同组合。
示例1:
counter =+1
示例2:
counter +1
我能想到的所有内容和研究对我放置代码有所帮助,但谢谢你的帮助。对不起,如果有任何语法错误。
答案 0 :(得分:4)
问题不在于你的想法。目前,您在假设您未在代码中正确添加数字的情况下进行操作。实际上,您的代码根本就没有运行。
具体来说,在最后一行代码中,您执行root.mainloop
。但是,mainloop
是一个函数,因此为了调用它,您需要执行root.mainloop()
。做root.mainloop
是一个声明 - 你告诉Python"这是一个函数" - Python不会做任何事情。它 构建GUI,并将所有内容连接在一起,但实际上从未开始运行并显示GUI。当你执行root.mainloop()
时,你实际上调用函数并执行它,利用你刚写的所有内容。
因此,您现在拥有以下代码:
import tkinter as tk
counter = 0
def counter_label(label):
counter = 0
def mbutton():
def count():
global counter
counter +=1
label.config(text=str(counter))
label.after(1000, count)
count()
root = tk.Tk()
root.title("Counting Seconds")
label = tk.Label(root, fg="green")
label.pack()
counter_label(label)
button = tk.Button(root, text='button', command=mbutton).pack()
root.mainloop()
然而,当你尝试运行它时,你会遇到另一个问题 - 点击按钮不会只增加一次计数器,但会导致迅速开始增加。
问题在于行label.after(1000, count)
。这样做是告诉你的标签"嘿,在1000毫秒后,再次自动运行count
功能。当你再次运行count
函数时,它将进入该行并尝试在另一个1000毫秒之后再次运行count
函数等...
它永远循环。
相反,摆脱那一行(并摆脱不必要的count
函数):
import tkinter as tk
counter = 0
def counter_label(label):
counter = 0
def mbutton():
global counter
counter +=1
label.config(text=str(counter))
root = tk.Tk()
root.title("Counting Seconds")
label = tk.Label(root, fg="green")
label.pack()
counter_label(label)
button = tk.Button(root, text='button', command=mbutton).pack()
root.mainloop()
最后一个问题是counter_label
实际上并没有做任何事情。它接受标签作为参数,但实际上并没有对它做任何事情。它还将计数器设置为零,但由于您从未将counter
声明为全局,因此它实际上从未修改全局计数器。在任何情况下,您的计数器已经为零,因此再次将其设置为零是没有意义的。
我们可以完全省略它。此外,mbutton
不是函数的非常具有描述性的名称 - 最好将其重命名为更具描述性的函数:
import tkinter as tk
counter = 0
def increment_counter():
global counter
counter += 1
label.config(text=str(counter))
root = tk.Tk()
root.title("Counting Seconds")
label = tk.Label(root, fg="green")
label.pack()
button = tk.Button(root, text='button', command=increment_counter).pack()
root.mainloop()