2013-12-17 42 views
0

我有以下问题:在我的主窗口中,我有一个打开新Toplevel窗口的按钮。点击Toplevel窗口上的按钮后,应该添加一个到列表框的新元素。Python:导入错误。从其他类访问方法

我不断收到此错误信息:

Traceback (most recent call last): 
    File "MainWindow.py", line 4, in <module> 
    from TopWindow import TopWindow 
    File "TopWindow.py", line 4, in <module> 
    import MainWindow 
    File "MainWindow.py", line 4, in <module> 
    from TopWindow import TopWindow 
ImportError: cannot import name TopWindow 

我相信问题是,这两个类导入对方。但我不确定如何解决这个问题。有任何想法吗?

Mainwindow.py:

from TopWindow import TopWindow 

class MainWindow: 
    def __init__(self, mainWindow): 
     self.value = '' 
     self.gui(mainWindow) 
    def gui(self, mainWindow): 
     top = TopWindow() 
     button = tk.Button(optionFrame, text="Open TopWindow", command=top.import) 
     ... 

    def addtolistbox(self): 
     .... 


mainWindow = tk.Tk() 
run = MainWindow(mainWindow) 
mainWindow.mainloop() 

TopWindow.py

import MainWindow 
class TopWindow: 
    def import(self): 
     .... 
     MainWindow.MainWindow().addtolistbox() 
+0

'高清输入(个体经营):'我认为这是你的问题。它应该是__init __() –

+0

命名选择是否有趣? – 6502

回答

1

您创建了一个圆形的进口;当从TopWindow导入MainWindow时,TopWindow类尚未定义,因此如MainWindow所示的TopWindow模块不具有该属性。

推迟进口的TopWindow类:

class TopWindow: 
    def import(self): 
     .... 
     import MainWindow 
     MainWindow.MainWindow().addtolistbox() 

接下来,您要创建每次MainWindow对象的新副本;你可能想访问MainWindow.run而不是创建单独的对象:

class TopWindow: 
    def import(self): 
     .... 
     import MainWindow 
     MainWindow.run.addtolistbox() 
+0

谢谢!这确实修复了导入错误。但是,现在我有一个不同的问题。通过调用MainWindow.MainWindow()。addtolistbox(),我创建了一个新的主窗口,而不是只更新现有窗口上的列表。我不想创建一个新的MainWindow,而是在MainWindow中调用的一个函数来更新现有的。我会怎么做? – user3111516

+0

另外,新的MainWindow不在主循环中了。我得到一个TypeError:__init __()只需要2个参数(给出1) – user3111516

+0

@ user3111516:也许你想使用'MainWindow.run.addtolistbox()'而不是?您已经在该模块中创建了主窗口对象。 –