2014-10-28 120 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