我是尝试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上实际显示时钟,这是没有用的,或者至少我不知道如何使用它来提供滴答功能。
答案 0 :(得分:1)
您需要像增加数字一样,还要更新标签以显示新数字:
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
。它会自动处理Label更新,但是需要您使用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()
答案 1 :(得分:0)
这是我的完整代码:
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()
buttonframe = Frame(frame)
buttonframe.grid(column=1, row=0)
label = Entry(frame, textvariable=number)
label.grid(column=0,row=0, ipady=15, padx=5)
buttonup = Button(buttonframe, text="Up", command=up)
buttonup.grid(column=0, row=0, ipadx=8)
buttondown = Button(buttonframe, text="Down", command=down)
buttondown.grid(column=0, row=1)
window.mainloop()