我的代码存在一个小问题。
有两个班级。第一个创建一个带有选项按钮的窗口。单击该按钮后,将调用第二个类并使用“确定”按钮创建另一个窗口。让我们说还有一个复选框,它将背景颜色更改为黑色或类似的东西。单击按钮后,选项中所做的任何更改都将存储到文件中,第二个窗口将关闭。
所有这一切都很好。我的问题是,现在我需要调用第一个类中的方法update_init,它将把这些更改应用到MainWindow。下面的代码显示了我对这个问题的第一个解决方案,但从我的理解,通过使用第二个主循环,我创建了第二个线程,应该避免。
class MainWindow:
def __init__(self, master):
self.master = master
self.options_btn = tk.Button(self.master, text="Options", command=self.open_options)
self.options_btn.pack()
self.options_window = None
def open_options(self):
options_master = tk.Toplevel()
self.options_window = OptionsWindow(options_master)
options_master.mainloop()
lst = meta_load() # loads changes from a file
self.update_init(lst)
def update_init(self, lst):
#code
class OptionsWindow:
def __init__(self, master):
self.master = master
self.ok_btn = tk.Button(self.master, text="OK", command=self.update_meta)
self.ok_btn.pack()
def update_meta(self):
meta_save(12) # saves changes into a file
self.master.destroy()
main_master = tk.Tk()
main_master.minsize(width=1280, height=720)
b = MainWindow(main_master)
main_master.mainloop()
我的第二个解决方案是将两个类合并为一个,但如果我这样做,代码就会非常混乱。 我可以在不初始化新的MainWindow类窗口的情况下以某种方式从OptionsWindow类调用方法update_init(在MainWindow类中)吗?或者还有其他方法可以解决这个问题吗?我将不胜感激任何帮助。
我很抱歉,如果这个太具体了,我已尽力使其尽可能一般,但这是一个非常具体的问题,我无法在任何地方找到有关它的信息。互联网。
答案 0 :(得分:0)
一般情况下,你可以从任何你想要的地方调用一个类方法,并在不初始化该类的实例的情况下将任何内容传递给它,这要归功于python的客观特性,但要注意self
依赖项!虽然,我认为这不是一个好习惯。
class A:
def __init__(self):
self.foo = 'foo'
def return_foo(self):
return self.foo
class B:
def __init__(self):
self.bar = 'bar'
print('Ha-ha Im inited!')
def return_bar(self):
try:
return self.bar
except AttributeError:
return 'bar'
def test():
a = A()
# b = B()
return_bar = getattr(B, 'return_bar', None)
if callable(return_bar):
print('%s%s' % (a.return_foo(), return_bar(None)))
test()
链接: