抱歉标题令人困惑,我试图在标题中尽可能多地解决问题。
场景:
我有一个模块(比如ModuleA
),其中包含一些 Tkinter GUI 元素的类定义。这些元素还具有与其绑定/绑定的某些事件/功能(例如'<Button-1>','<Button-2>'...
.
现在有另一个模块(比如说ModuleB
)。这是程序的主要(核心)。在这个模块中,我导入ModuleA
以使用它的对象。的对象ModuleA
在数组中占有一席之地(例如Array1
);还有另一个数组(比如Array2
),它只存储 的每个对象的一个数据成员的值Array1
,这些是由Event Bindings
.
所以问题是,当一个Event
发生时,对象(存储在 中Array1
)会ModuleA
根据需要进行视觉响应,但在后端它们相应的数据成员值也必须相应地更新Array2
。
简而言之:
#ModuleA.py
from ModuleB import foo
class bar
data = 1
# some tkinter code
# bind mouse click to function foo of ModuleB
-------------------------------------------------------
#ModuleB.py
from ModuleA import bar
Array1 = [objects of class bar]
Array2 = [value of data of objects in Array1]
def foo(#obj of class bar)
# find index of bar object which called this function in Array1
# accordingly change Array2
我尝试了什么:
在Event Bindings
of 的对象中,ModuleA
我添加了所需的函数(比如foo
),它将处理所需的数组操作,并定义ModuleB
为它必须处理Array2
of ModuleB
。但这给了我一个错误global name 'foo' is not defined
ModuleA
所以在我添加的类定义中global foo
,这也没有解决它。
最后我尝试插入ModuleA
from ModuleB import foo
这提出了一个ImportError
说法,它不能导入 foo(我猜这是因为ModuleB
它本身正在导入ModuleA
因此循环引用)
一个解法
一种清晰可见的解决方案是将整个ModuleA
(包含类定义)复制到ModuleB
. 但这并不总是实用的,也不是太 Pythonic。
请帮忙。