我正在用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
但还是没有运气。我把课程安排在课堂结构上,这样课程组织得很好,但似乎没有我想象的那么简单。你知道吗
您必须将代码分解为多个单元,以便单元之间的依赖关系图是非循环的。这可能需要你做一些通常被认为是不好的风格。你知道吗
让我们考虑一下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中,该模块首先初始化。你知道吗
我希望这能为你的处境提供一些想法。你知道吗
相关问题 更多 >
编程相关推荐