相关内容:Python 2.7
,tkinter
。
好吧,所以我正在运行一个基本上生成随机数的简单程序,并返回一个语句作为结果。我决定给它按钮和显示器学习使用GUI很有趣。由于我没有很好地使用类的经验,我也把它作为一个类,我知道它没有必要,但它帮助我熟悉了类。
现在问题正确!我不能让dang标签更新,更糟糕的是,追溯似乎表明发生了一些不稳定的事情。
我已阅读tkinter
label
以及StringVar
和Set
上的相关文档,但我无法弄清楚出了什么问题。每次程序运行时我的追溯也会变长,也就是说,第一次,我得到一个“变量!”,第二次,我得到两个“变量变化!”,每次增加。
它的要点是,我不知道为什么我的标签没有更新,并且不知道在哪里看,我确信它显而易见。
无论如何,这是代码:
from random import randint
from Tkinter import *
from sys import exit
class GUI:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.rooms = Button(frame, text = "All Rooms", fg = "blue", command=self.allrooms)
self.rooms.pack(side=LEFT)
self.alsoquit = Button(frame, text = "Quit", fg = "green", command=frame.quit)
self.alsoquit.pack(side=LEFT)
self.displaytext = StringVar()
self.displaytext.set("hello")
self.display = Label(master, text=self.displaytext)
self.display.pack(side=LEFT)
def callback(*args):
print "variable changed!"
def roomselect(self, random):
if random == 1:
self.displaytext.set("The Chest!")
self.displaytext.trace("w", self.callback)
elif random == 2:
self.displaytext.set("Dark Chest")
self.displaytext.trace("w", self.callback)
elif random == 3:
self.displaytext.set("Hush")
self.displaytext.trace("w", self.callback)
else:
quit()
def allrooms(self):
random = randint(1,3)
self.roomselect(random)
root = Tk()
app = GUI(root)
root.mainloop()
root.destroy()
答案 0 :(得分:1)
我无法让dang标签更新,
创建text
小部件时指定Label
,而不是self.display = Label(master, textvariable=self.displaytext)
:
self.displaytext.trace("w", self.callback)
每次程序运行时,我的回溯也会变长,也就是说 第一次,我得到一个“变量变化!”,第二次,我得到两个 “变量变了!”,每次都在增加。
因为allrooms
是多次(每次点击按钮时调用roomselect
- >反过来调用trace
- >调用__init__
)。只调用一次(例如,仅在from random import randint
from Tkinter import *
class GUI:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.rooms = Button(frame, text = "All Rooms", fg = "blue",
command=self.allrooms)
self.rooms.pack(side=LEFT)
self.alsoquit = Button(frame, text = "Quit", fg = "green",
command=frame.quit)
self.alsoquit.pack(side=LEFT)
self.displaytext = StringVar()
self.displaytext.set("hello")
self.displaytext.trace("w", self.callback) # <---
self.display = Label(master, textvariable=self.displaytext) # <---
self.display.pack(side=LEFT)
def callback(*args):
print "variable changed!"
def roomselect(self, random):
if random == 1:
self.displaytext.set("The Chest!")
elif random == 2:
self.displaytext.set("Dark Chest")
elif random == 3:
self.displaytext.set("Hush")
else:
quit()
def allrooms(self):
random = randint(1,3)
self.roomselect(random)
root = Tk()
app = GUI(root)
root.mainloop()
中):
{{(100*score/questionCounter) || 0 | number:0}}