2013-11-25 7 views
2

저는 여러 개의 .py 스크립트를 사용하는 Python으로 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_() 

나는 다양한 조합을 시도했습니다,하지만 난 하나가 초기화 오류가 발생하거나 제기 형식 오류입니다. user_barcode 그 클래스의 인스턴스 의 특성 인 반면 MainWindow를하기, 클래스 때문에

답변

4

예시적인 코드가 작동하지 않는 이유이다.

user_barcode 속성에 액세스하기위한 영수증의 경우, 어떤 식 으로든 MainWindow 인스턴스를 사용할 수 있어야합니다. 그리고이를 수행하는 한 가지 방법은 MainWindow를 영수증의 부모로 설정하는 것입니다.

그러면 Receipt가 parent method을 사용하여 MainWindow 인스턴스와 해당 속성에 액세스 할 수 있습니다. 실제로 더 의미가 ekhumoro에 대한

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

감사 : 물론,이 생성자는 아마 다음과 같아야합니다 그래서,의 부모로서 항상 MainWindow를이 는 반드시 영수증을 의미한다. 위에서 작성한 내용을 포함하도록 코드를 수정했으며, 이제는 다음을 얻습니다. TypeError : __init() __ 필수 1 개의 위치 인수 : 'parent'. 이 문제는 if __name__ == '__main__': declaration 및 app.exec_() 설정에서 Receipt 모듈을 처음 참조 할 때 발생합니다. 어떤 아이디어? – jars121

+1

음, '부모'를 전달해야한다고 말하고 있습니다. 즉, window = MainWindow(); receipt = receipt (window) – ekhumoro

+0

부모님이 제안한대로 전달하려고 시도했지만 (위의 편집 참조), 제기 된 TypeError를 반환합니다. 도와 주셔서 다시 한 번 감사드립니다. – jars121

관련 문제