man*_*urt 2 tkinter python-2.7
AttributeError:MyGUI实例没有属性'tk'
另外,如何使创建的窗口具有固定的大小,并且无法使用鼠标调整大小?或者通过单击按钮更改标签值.
我的代码:
from Tkinter import*
class MyGUI(Frame):
def __init__(self):
self.__mainWindow = Tk()
#lbl
self.labelText = 'label message'
self.depositLabel = Label(self.__mainWindow, text = self.labelText)
#buttons
self.hi_there = Button(self.__mainWindow)
self.hi_there["text"] = "Hello",
self.hi_there["command"] = self.testeo
self.QUIT = Button(self.__mainWindow)
self.QUIT["text"] = "QUIT"
self.QUIT["fg"] = "red"
self.QUIT["command"] = self.quit
#place on view
self.depositLabel.pack()
self.hi_there.pack() #placed in order!
self.QUIT.pack()
#What does it do?
mainloop()
def testeo(self):
self.depositLabel['text'] = 'c2value'
print "testeo"
def depositCallBack(self,event):
self.labelText = 'change the value'
print(self.labelText)
self.depositLabel['text'] = 'change the value'
myGUI = MyGUI()
Run Code Online (Sandbox Code Playgroud)
怎么了?谢谢
你应该调用超级构造函数Frame.不确定,但我猜这会设置命令依赖的tk属性quit.之后,无需创建自己的Tk()实例.
def __init__(self):
Frame.__init__(self)
# self.__mainWindow = Tk()
Run Code Online (Sandbox Code Playgroud)
当然,您还必须相应地更改小部件的构造函数调用,例如,
self.hi_there = Button(self) # self, not self.__mainWindow
Run Code Online (Sandbox Code Playgroud)
或更好(或至少更短):直接在构造函数中设置所有属性:
self.hi_there = Button(self, text="Hello", command=self.testeo)
Run Code Online (Sandbox Code Playgroud)
还要添加self.pack()到构造函数中.
(或者,您可以将quit命令更改为self.__mainWindow.quit,但我认为以上是创建框架的更好样式,请参阅此处.)