我正在做一个更大的tkinter应用程序,因为应用程序的大小很大,所以我试图将应用程序划分为不同的类和方法,以使其更加清晰。
问题在于,因为我制作的子类是从主类继承的,所以它们的初始化函数会导致无限循环。
这是示例代码:
import tkinter as tk
import random
class main_window(object):
def __init__(self):
self.root = tk.Tk()
self.cv = tk.Canvas(self.root, height = 400, width = 400)
self.cv.pack()
self.button1 = tk.Button(text="draw line", command=method().draw_line)
self.Solve_button_window = self.cv.create_window(5, 5, anchor=tk.NW, window=self.button1)
self.root.mainloop()
class method(main_window):
def __init__(self):
super().__init__() #Sublclassing from main_window class causes an infinite loop
self.point1 = 0
self.point2 = 0
def draw_line(self):
self.point1 = random.randrange(10, 400)
self.point2 = random.randrange(10, 400)
self.cv.create_line(self.point1, self.point2)
main_window()
如何更改该代码以使子类不会导致无限循环?
谢谢您的帮助
最佳答案
您的method
类不应继承自main_window
类。只需创建main_window
的实例并将其传递到__init__
的method
中。
顺便说一句,method
是类的令人困惑的名称。同样,Python中的类名通常是用CamelCase编写的。
这是您代码的修改版本,可以说明我的意思。
import tkinter as tk
import random
class MainWindow(object):
def __init__(self):
self.root = tk.Tk()
self.cv = tk.Canvas(self.root, height = 400, width = 400)
self.cv.pack()
draw_stuff = DrawStuff(self)
self.button1 = tk.Button(text="draw line", command=draw_stuff.draw_line)
self.Solve_button_window = self.cv.create_window(5, 5, anchor=tk.NW, window=self.button1)
self.root.mainloop()
class DrawStuff(object):
def __init__(self, mainwin):
self.mainwin = mainwin
self.cv = mainwin.cv
def draw_line(self):
self.point1 = (random.randrange(10, 400), random.randrange(10, 400))
self.point2 = (random.randrange(10, 400), random.randrange(10, 400))
self.cv.create_line(self.point1, self.point2)
MainWindow()