试图更新tkinter类中的标签

时间:2013-05-16 21:57:12

标签: python class tkinter scope

我是python和这个论坛的新手。我尝试在我的代码中搜索我遇到的错误的解决方案,但这只是让我尝试了很多不同的东西,但我仍然无法更新我的标签。

现在我认为这与我无法正确定义类级别的变量有关。但说实话,我很难掌握阶级,自我,全球,本地等概念。所以这可能会增加我的困惑。

我剪切了代码,这些代码从我的大型程序中发现错误,在此处发布。我希望你们中的一些人能够告诉我我做错了什么。提前抱歉打破python代码礼仪,我还在学习。

我试过的一些事情我在发布的代码中注释掉...我在这里发布的代码给出了以下错误:

Traceback (most recent call last):
  File "C:/Users/User/Desktop/smaller example.py", line 35, in <module>
    app = cbgui(root)
  File "C:/Users/User/Desktop/smaller example.py", line 8, in __init__
    self.initUI()
  File "C:/Users/User/Desktop/smaller example.py", line 23, in initUI
    labelupdate = Tkinter.Label(frame,  width = 50, textvariable = self.var)
AttributeError: cbgui instance has no attribute 'var'

我的代码:

import sys, Tkinter, tkFileDialog


class cbgui(Tkinter.Frame):
    def __init__(self, master):
        Tkinter.Frame.__init__(self,master)
        self.master = master
        self.initUI()
        self.var = Tkinter.StringVar()
        #self.var = Tkinter.StringVar()
        self.var.set = "hello"

    def UpdateLabel(self):
        #var.set = "bye"
        self.var.set = "bye"

    def initUI(self):
        self.master.title("a small update test")
        frame = Tkinter.Frame(self, relief=Tkinter.RAISED, borderwidth = 1)
        frame.pack(fill = Tkinter.BOTH, expand = 1)
        self.pack(fill = Tkinter.BOTH, expan = 1)

        #labelupdate = Tkinter.Label(frame,  width = 50, textvariable = var)
        labelupdate = Tkinter.Label(frame,  width = 50, textvariable = self.var)
        #labelupdate = Tkinter.Label(frame,  width = 50, text = "hello")
        labelupdate.grid(row=3, column=2)

        labelspace = Tkinter.Label(frame, width = 1)
        labelspace.grid(row=3, column=3)

        UpdateButton = Tkinter.Button(frame, text="Update label",  command = self.UpdateLabel)
        UpdateButton.grid(row=3, column=4)

root = Tkinter.Tk()
root.geometry("700x300+10+10")
app = cbgui(root)
Tkinter.mainloop()

1 个答案:

答案 0 :(得分:2)

您需要在之前创建self.var ,因为self.initUI使用initUI

,您需要致电self.var
def __init__(self, master):
    Tkinter.Frame.__init__(self,master)
    self.master = master
    self.var = Tkinter.StringVar()
    #self.var = Tkinter.StringVar()
    self.var.set("hello")
    self.initUI()