tkinter标签,或“在循环中更新变量”

时间:2015-12-13 02:54:30

标签: python python-2.7 tkinter

相关内容:Python 2.7tkinter

好吧,所以我正在运行一个基本上生成随机数的简单程序,并返回一个语句作为结果。我决定给它按钮和显示器学习使用GUI很有趣。由于我没有很好地使用类的经验,我也把它作为一个类,我知道它没有必要,但它帮助我熟悉了类。

现在问题正确!我不能让dang标签更新,更糟糕的是,追溯似乎表明发生了一些不稳定的事情。

我已阅读tkinter label以及StringVarSet上的相关文档,但我无法弄清楚出了什么问题。每次程序运行时我的追溯也会变长,也就是说,第一次,我得到一个“变量!”,第二次,我得到两个“变量变化!”,每次增加。

它的要点是,我不知道为什么我的标签没有更新,并且不知道在哪里看,我确信它显而易见。

无论如何,这是代码:

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

1 个答案:

答案 0 :(得分:1)

  

我无法让dang标签更新,

创建text小部件时指定Label,而不是self.display = Label(master, textvariable=self.displaytext)

self.displaytext.trace("w", self.callback)
  

每次程序运行时,我的回溯也会变长,也就是说   第一次,我得到一个“变量变化!”,第二次,我得到两个   “变量变了!”,每次都在增加。

因为allrooms是多次(每次点击按钮时调用roomselect - &gt;反过来调用trace - &gt;调用__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}}