我的python 3.4按钮不会计算它被点击的次数

时间:2014-07-16 02:20:23

标签: python button tkinter

我运行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

我能想到的所有内容和研究对我放置代码有所帮助,但谢谢你的帮助。对不起,如果有任何语法错误。

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()