如何解决在被调用的类中引用调用类?
我有两个 .py 文件:一个 tkinter UI 文件和一个后端文件。我希望从 UI 文件中的按钮事件调用函数,由后端处理,然后作为响应反映在 UI 中。例如:
主窗口文件:
class Application(tk.Frame):
def __init__(self,master=None):
super().__init__(master)
self.master = master
self.loadDirectory = tk.Button(leftConsole,text = 'Load sort folder',command = lambda: backend.loadDirectory())
Aaaa 和后端:
class Backend(object):
def __init__(self,master=None):
super().__init__()
self.master = master
def loadDirectory(self):
sort_folder_path = askdirectory(title='Select Folder to Sort')
self.fileNameLabel.config(text = sort_folder_path)
它一直有效,直到我去尝试在调用类的小部件中配置文本。我弄乱了 super() 和 init() 函数,颠倒哪个类调用哪个,等等,但我不能把这件事变成一条两条路。
解决方法
通常,您要么有一个控制器类,它充当可以返回类实例的中介,要么一个对象将自身传递给需要它的任何其他对象。
您没有在示例中显示类的构造位置或方式,但一个简单的方法就是将 app
的实例传递给任何需要它的函数:
class Application(tk.Frame):
def __init__(self,master=None):
...
self.loadDirectory = tk.Button(...,command = lambda: backend.loadDirectory(app=self))
class Backend(object):
def loadDirectory(self,app):
sort_folder_path = askdirectory(title='Select Folder to Sort')
app.fileNameLabel.config(text = sort_folder_path)
使用控制器,它可能看起来像这样:
class Controller:
def __init__(self,root):
self.app = App(root,controller=self)
self.backend = Backend(root,controller=self)
class Application(tk.Frame):
def __init__(self,master=None,controller=None):
...
self.controller = controller
...
self.loadDirectory = tk.Button(...,command = self.controller.backend.loadDirectory)
class Backend(object):
def __init__(self,root,controller):
...
self.controller = controller
...
def loadDirectory(self):
sort_folder_path = askdirectory(title='Select Folder to Sort')
self.controller.app.fileNameLabel.config(text = sort_folder_path)
root = tk.Tk()
controller = Controller(root)
,
您正在按钮上使用 lambda。 lambda 函数用于从它通常不提供的按钮传递信息。传递的信息被冻结。 所以更改信息不会有任何影响。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。