如何使用 GUI Tkinter 按钮递增数字并显示它



我是尝试python GUI的新手,并尝试了tkinter和pyglet,但只能通过教程,以便了解基本的类和函数。但是我目前正在尝试做的是获得一个按钮来增加一个数字,同时显示该数字。不知何故,即使变量号被全局声明为 0,增加它的函数也没有任何作用,它实际上会产生一个错误:"UnboundLocalError:赋值前引用的局部变量'number'"。我不知道如何纠正这一点。

我在YouTube和一篇文章中看到的教程并没有确切地谈论如何做到这一点。文章确实提到了如何更改某个文本,但没有提到以前创建的变量(在我的例子中是"数字")。

from tkinter import *
number = 0
window = Tk()
window.title("Programme")
window.geometry('350x250')
label = Label(window, text=number)
label.grid(column=0,row=0)
def clicked():
number += 1
button = Button(window, text="Push Me", command=clicked)
button.grid(column=1, row=2)
window.mainloop()

有什么办法可以做到这一点吗? 我也一直在寻找如何通过刻度来增加时间、处理事件等。但是我在互联网上找到的所有内容都是关于在 GUI 上显示时钟,这是无用的,或者至少我不知道如何使用它来具有滴答功能。

您需要像您一样递增数字,但也要更新标签以显示新数字:

from tkinter import *
number = 0
window = Tk()
window.title("Programme")
window.geometry('350x250')
label = Label(window, text=number)
label.grid(column=0,row=0)
def clicked():
global number
number += 1
label.config(text=number)
button = Button(window, text="Push Me", command=clicked)
button.grid(column=1, row=2)
window.mainloop()

一个更简单的方法是使用 tkinter 版本的整数:IntVar。它负责标签自动更新,但它需要您使用get()set()来处理它。

from tkinter import *
def clicked():
number.set(number.get()+1)
window = Tk()
window.title("Programme")
window.geometry('350x250')
number = IntVar()
label = Label(window, textvariable=number)
label.grid(column=0,row=0)
button = Button(window, text="Push Me", command=clicked)
button.grid(column=1, row=2)
window.mainloop()

这是我的整个代码:

from tkinter import *
def up():
number.set(number.get()+1)
def down():
number.set(number.get()-1)
window = Tk()
window.title("Programme")
window.geometry('350x250')
number = IntVar()
frame = Frame(window)
frame.pack()
entry = Entry(frame, textvariable=number, justify='center')
entry.pack(side=LEFT, ipadx=15)
buttonframe = Frame(entry)
buttonframe.pack(side=RIGHT)
buttonup = Button(buttonframe, text="▲", font="none 5", command=up)
buttonup.pack(side=TOP)
buttondown = Button(buttonframe, text="▼", font="none 5", command=down)
buttondown.pack(side=BOTTOM)
window.mainloop()

当按钮直接位于条目小部件内部时,对我来说看起来更好。

最新更新