update_id
它称之为:' MainApplication'对象没有属性' button1'。为什么呢?
答案 0 :(得分:1)
在command属性中,您必须传递函数的名称,不应该调用该函数。在你的情况下self.ev
除了获取变量的名称外,您还必须使用{your button}['text']
或{your button}.cget('text')
同样def ev(event, self):
不正确,命令不传递任何参数,因此您只需传递实例:self。
注意:您必须始终先传递实例:def some_function(self, other params ...)
class MainApplication(ttk.Frame):
texty = "text"
def __init__(self, parent, *args, **kwargs):
tkinter.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
self.button1 = ttk.Button(text=MainApplication.texty, command=self.ev)
self.button1.pack()
def ev(self):
print(self.button1['text']) # or self.button1.cget('text')
root = tkinter.Tk()
w = MainApplication(root)
root.mainloop()
答案 1 :(得分:0)
您的代码存在许多问题,而不仅仅是您的MainApplication对象错误。
使用texty
初始化实例以创建根或主顶层窗口。
不要通过尝试调用类名来调用类中的类属性。
将__init__
变量放在班级的self
部分内,并将self.button1.text
放在其前面,使其成为属性。
保持良好的缩进以使代码正常工作,因此请确保您的方法在课堂上有4个空格缩进。
不要打印self.texty
而是通过打印self.button1['text']
来打印属性值。如果您确实要在按钮上打印文字,可以使用self.button1.cget("text")
或command = slef.ev(self)
来完成此操作。
将您的类分配给变量,以便在需要时可以从类外部与其属性进行交互。
self.ev
传递2个自我参数,只需要一个。请改为from tkinter import ttk
import tkinter
root = tkinter.Tk()
class MainApplication(ttk.Frame):
def __init__(self, parent, *args, **kwargs):
tkinter.Frame.__init__(self, parent, *args, **kwargs)
self.texty = "text"
self.parent = parent
self.button1 = ttk.Button(text = self.texty, command= self.ev)
self.button1.pack()
def ev(self):
print(self.texty) # for printing the value of the attribute
print(self.button1['text']) # for printing the current text of the button
app = MainApplication(root)
root.mainloop()
。
def print_something():
print(app.texty) # this is why we assign the class to a variable
print(app.button1['text']) # it allows us to interact with class atributes from outside the class
只是因为你试图从课堂外打印属性
您可以将其放在课外以查看其结果。
{{1}}