2

我是 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()
4

1 回答 1

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()
于 2013-05-16T22:05:20.573 回答