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

时间:2019-06-19 23:19:23

标签: python user-interface 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上实际显示时钟,这是没有用的,或者至少我不知道如何使用它来提供滴答功能。

2 个答案:

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