[英]AttributeError: type object 'class' has no attribute 'stringVar'
[英]AttributeError: type object 'class' has no attribute 'method'
不断收到错误AttributeError: type object 'SampleApp' has no attribute 'draw'
。 我查看了这个问题的其他资源,但没有看到该方法试图从另一个类调用的地方。 我也在_init_
内部和外部尝试过def draw()
。 这样做的目的是在 B 类上将为用户提供输入,当点击按钮时,小部件将被绘制到示例应用程序的框架上,但到目前为止我还不能这样做。
import tkinter as tk
class SampleApp(tk.Tk):
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.left_frame = tk.Frame(self, width=426, height=600)
self.left_frame.grid(column=0, row=3, columnspan=3, rowspan=10)
self.right_frame = tk.Frame(self, width=855, borderwidth=2,
relief="solid")
self.right_frame.grid(column=4, row=0, rowspan=9, sticky="nsew")
self.frames = {}
for F in (A, B):
page_name = F.__name__
frame = F(parent=self.left_frame, controller=self)
frame.configure(width=426, height=511, borderwidth=2,
relief="solid")
self.frames[page_name] = frame
frame.grid(row=0, column=0, columnspan=3,
rowspan=2,sticky="nsew")
self.show_frame("A")
def draw():
print("We")
label = tk.Label(self.left_frame_bottom, text="Hello")
label.pack()
class A(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
button = tk.Button(self, text="Go to the start page",
command=lambda: controller.show_frame("B"))
button.pack()
class B(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
submit_button = tk.Button(self, text="Submit",
command=lambda:SampleApp.draw())
submit_button.place(x=180, y=320)
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
首先,您需要修复draw
的缩进 - 它缩进了太多级别。 def draw
需要与def show_frame
缩进相同。
其次,由于draw
是控制器上的一个方法,您需要通过控制器实例调用它:
self.controller.draw()
缩进draw()
函数,使其与__init__()
处于同一级别。 确保传递 self def draw(self):
并且如果您在创建实例时需要它运行,则只需在__init__()
定义中调用self.draw()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.