抱歉标题令人困惑,我试图在标题中尽可能多地解决问题。
场景:
我有一个模块(比如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 Bindingsof 的对象中,ModuleA我添加了所需的函数(比如foo),它将处理所需的数组操作,并定义ModuleB为它必须处理Array2of ModuleB。但这给了我一个错误global name 'foo' is not defined
ModuleA所以在我添加的类定义中global foo,这也没有解决它。
最后我尝试插入ModuleA
from ModuleB import foo
这提出了一个ImportError说法,它不能导入 foo(我猜这是因为ModuleB它本身正在导入ModuleA因此循环引用)
一个解法
一种清晰可见的解决方案是将整个ModuleA(包含类定义)复制到ModuleB. 但这并不总是实用的,也不是太 Pythonic。
请帮忙。