2014-10-28 121 views
0

所以我最近开始学习Python和工具包PySide但我已经遇到了,我无法找到一个解决问题的办法,这里是错误代码:的Python/PySide导入错误

Traceback (most recent call last): 
    File "C:\Users\Callum\workspace\Application\main.py", line 1, in <module> 
    from ui.window import Window 
    File "C:\Users\Callum\workspace\Application\ui\window.py", line 4, in <module> 
    from ui.menubar import MenuBar 
    File "C:\Users\Callum\workspace\Application\ui\menubar.py", line 3, in <module> 
    from ui.window import Window 
ImportError: cannot import name 'Window' 

和下面是代码:

main.py:

from ui.window import Window 

wind = Window() 
wind.Create() 

window.py:

import sys 
from PySide.QtCore import * 
from PySide.QtGui import * 
from ui.menubar import MenuBar 

class Window: 

    title = "Callum" 
    minWidth = 980 
    minHeight = 640 
    app = None 
    win = None 

    def Create(self): 

     self.app = QApplication(sys.argv) 
     self.win = QMainWindow() 

     self.win.setWindowTitle(self.title) 
     self.win.setMinimumSize(self.minWidth, self.minHeight) 

     mB = MenuBar() 
     mB.Create() 

     self.win.show() 

     sys.exit(self.app.exec_()) 

menubar.py:

from PySide.QtCore import * 
from PySide.QtGui import * 
from ui.window import Window 

class MenuBar: 

    def Create(self): 

     wind = Window() 
     menu = wind.menuBar() 

     fileMenu = menu.addMenu("File") 
     fileMenu.addAction("Exit", exit) 
+0

您已经有循环进口 - 你需要洗牌你的菜单栏和窗口代码,所以他们不试图导入对方。 – Ben 2014-10-28 10:32:03

+0

你能举个例子说明你的意思吗? – Callum 2014-10-28 15:18:31

回答

0

如果在回溯仔细看,你会发现:

  1. main.py进口ui.window

则:

  1. window.py进口ui.menubar

然后:

  • menubar.py进口ui.window
  • 现在我们进入了一个无限使用window导入menubar导入window导入menubar ...等等,除了那当然蟒蛇防止这种情况反而会发生错误。

    但是,应用程序的结构还存在其他问题。特别是,Menubar.Create方法创建一个新实例Window,向其添加一些菜单项,然后立即将结果抛出。你应该做的,而不是,是Window现有的实例传递给Menubar.Create作为参数,就像这样:

    from PySide.QtCore import * 
    from PySide.QtGui import * 
    # remove the follwing import, which is not needed 
    # from ui.window import Window 
    
    class MenuBar: 
    
        def Create(self, wind): 
         # don't create a new instance 
         # wind = Window() 
         menu = wind.menuBar() 
    
         fileMenu = menu.addMenu("File") 
         fileMenu.addAction("Exit", exit) 
    

    ,然后在window.py,这样做:

    self.win = QMainWindow() 
        ... 
        mB = MenuBar() 
        mB.Create(self.win) 
    
    +0

    啊我明白了,谢谢你的帮助。 – Callum 2014-10-28 19:12:21