实例化时将小部件从一个类传递到另一个类

2024-10-03 00:27:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用pythontkinter设计一个gui程序。我在类结构中开发它,每个类包含一个包含小部件的框架。问题是,一个类需要另一个类的小部件作为参数,另一个类也是。我不知道如何实例化这个类。这是我迄今为止尝试过的代码。你知道吗

frame1 = infoframe(lambda : frame2.listbox1)
frame2 = scriptframe(frame1.entry1)

每次调用frame1中需要frame2.listbox1作为参数的函数时,该函数都不会将frame2.listbox1识别为listbox。我还尝试了以下代码:

frame1 = infoframe(None)
frame2 = scriptframe(frame1.entry1)
frame1['object'] = frame2.listbox1

但还是没有运气。我把课程安排在课堂结构上,这样课程组织得很好,但似乎没有我想象的那么简单。你知道吗


Tags: 函数代码程序参数部件gui结构课程
1条回答
网友
1楼 · 发布于 2024-10-03 00:27:39

您必须将代码分解为多个单元,以便单元之间的依赖关系图是非循环的。这可能需要你做一些通常被认为是不好的风格。你知道吗

让我们考虑一下Python如何允许两个模块(如“a”和“b”)相互导入。假设主模块以import a开头。如果导入代码在检查是否存在sys.modules['a']之后要执行“明显的”sys.modules['a'] = module('a', code_of_a),则不会向其添加任何内容系统模块直到模块调用返回。在返回之前,当a导入b并且b尝试导入a时,sys.modules['a']将不存在,并且sys.modules['a'] = module('a', code_of_a)将重复,依此类推,直到达到递归限制为止。你知道吗

为了防止出现这种情况,import将模块初始化分为两个阶段。它首先将一个几乎为空的模块放入系统模块有点像sys.modules['a'] = module('a')。然后它调用sys.modules['a'].populate(code_of_a)之类的函数。公开未初始化的对象通常被认为是不好的样式,但在这里它是必不可少的。这和你的想法是一样的。你知道吗

现在,当a导入b时,模块a将拥有前面语句定义的任何对象。当b导入a时,它将获得部分初始化的模块a。用户只需安排b所需要的任何东西在import b之前已经初始化,这样将a拆分为'a\u before'和'a\u after'就可以打破依赖循环。将import b放在文件的中间位置违反了PEP8的警告,即将导入放在顶部,但在其中一个文件中,要使相互导入工作,这是必需的。你知道吗

另一种解决方案是将代码从a和b移到一个新的模块c中,该模块首先初始化。你知道吗

我希望这能为你的处境提供一些想法。你知道吗

相关问题 更多 >