2013-11-25 27 views
2

我正在用Python編寫一個使用多個.py腳本的GUI應用程序。我在QMainWindow中有一個變量,我需要在其他類中引用/訪問。我沒有將各種.py模塊導入Ui_MainWindow.py模塊的問題,但我似乎無法訪問QMainWindow類變量。訪問QMainWindow類變量 - Pyside/PyQt

這是我想要一個快速的僞代碼:

class MainWindow(QMainWindow, Ui_MainWindow): 
    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 
     self.setupUi(self) 

     self.lineEditScanBarcode.returnPressed.connect(self.LoginAttempt) 

    def LoginAttempt(self): 
     self.user_barcode = self.lineEditScanBarcode.text() 

從閱讀中,我已經在這指的是類變量做,我得出的結論是,上述設置,我應該能夠借鑑「user_barcode」變量在其他類別如下:

class Receipt(QWidget, Ui_Receipt): 
    def __init__(self, parent=None): 
     QWidget.__init__(self, parent) 
     self.setupUi(self) 

     print(MainWindow.user_barcode) 
我一直在使用「打印」命令,只是爲了測試是否它的工作

,但我收到以下錯誤:

Attribute Error: type object 'MainWindow' has no attribute 'user_barcode' 

任何人都可以看到我明顯犯的錯誤嗎?我搜索了類似的查詢,但沒有發現任何相關的。

謝謝!

編輯:

這裏的app.exec_()的設置,我不知道如果我正確地傳遞父。

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    showMainWindow = MainWindow() 
    showReceipt = Receipt(MainWindow) 
    showMainWindow.show() 
    app.exec_() 

我已經試過各種組合,但我要麼接受初始化錯誤,或引發類型錯誤。

回答

4

的示例代碼不工作的原因,是因爲主窗口是一個類,而user_barcode是那個類的一個實例的屬性。

對於Receipt來訪問user_barcode屬性,它必須以某種方式讓MainWindow實例可用。一種方法是將MainWindow設置爲Receipt的父項。

然後,這將允許收據使用parent method訪問MainWindow實例及其屬性。當然,這意味着收據必須始終有一個主窗口,因爲它的父,所以它的構造應該看起來可能是這樣的:

class Receipt(QWidget, Ui_Receipt): 
    def __init__(self, parent): 
     if not isinstance(parent, MainWindow): 
      raise TypeError('parent must be a MainWindow') 
     super(Receipt, self).__init__(parent) 
     self.setupUi(self) 
     ... 
     print(self.parent().user_barcode) 
+0

謝謝你提供的ekhumoro,實際上更有意義。我已經修改了我的代碼以包含上面發佈的內容,現在我得到:TypeError:__init()__缺少1個必需的位置參數:'parent'。我在第一次引用if __name__ =='__main__':聲明和app.exec_()設置下的Receipt模塊時發生這種情況。有任何想法嗎? – jars121

+1

嗯,它告訴你,你需要傳入一個'父':即窗口= MainWindow();收據=收據(窗口) – ekhumoro

+0

我試過按照你的建議傳遞父(見上面的編輯),但它現在返回引發的TypeError。再次感謝您的幫助,非常感謝! – jars121