2014-02-11 80 views
2

我有麻煩理解與Python/PyQt的類繼承。我有一個MainWindow和一個Popup QWidget。在QWidget在彈出式窗口中打開後,我想與MainWindowself.label1進行交互,但我不知道該怎麼做。我只知道另一種方式,從MainWindow裏面的彈出窗口到達所有窗口小部件,反之亦然。PyQt類的繼承

下面是一個例子,的MainWindowself.label1應該得到另一個文本MyPopup在新窗口打開後:

import sys 
from PyQt4.Qt import * 

class MyPopup(QWidget): 
    def __init__(self): 
     QWidget.__init__(self) 

     # I want to change the lable1 of MainWindow 
     self.cw.label1.setText('hello') 


class MainWindow(QMainWindow): 
    def __init__(self, *args): 
     QMainWindow.__init__(self, *args) 
     self.cw = QWidget(self) 
     self.setCentralWidget(self.cw) 
     self.btn1 = QPushButton("Click me", self.cw) 
     self.btn1.setGeometry(QRect(50, 50, 100, 30)) 
     self.label1 = QLabel("No Commands running", self.cw) 
     self.connect(self.btn1, SIGNAL("clicked()"), self.doit) 
     self.w = None 

    def doit(self): 
     self.w = MyPopup() 
     self.w.setGeometry(QRect(100, 100, 400, 200)) 
     self.w.show() 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    myapp = MainWindow() 
    myapp.show() 
    sys.exit(app.exec_()) 

回答

3

您需要將主窗口作爲參數的MyPopup構造,試試這個:

import sys 
from PyQt4.Qt import * 

class MyPopup(QWidget): 
    def __init__(self, mainWindow): 
     QWidget.__init__(self) 

     # use the mainWindow passed as parameter 
     mainWindow.label1.setText('hello') 


class MainWindow(QMainWindow): 
    def __init__(self, *args): 
     QMainWindow.__init__(self, *args) 
     self.cw = QWidget(self) 
     self.setCentralWidget(self.cw) 
     self.btn1 = QPushButton("Click me", self.cw) 
     self.btn1.setGeometry(QRect(50, 50, 100, 30)) 
     self.label1 = QLabel("No Commands running", self.cw) 
     self.connect(self.btn1, SIGNAL("clicked()"), self.doit) 
     self.w = None 

    def doit(self): 
     self.w = MyPopup(self) #when creating the popup pass in the main window 
     self.w.setGeometry(QRect(100, 100, 400, 200)) 
     self.w.show() 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    myapp = MainWindow() 
    myapp.show() 
    sys.exit(app.exec_()) 
+0

非常感謝你,對於這個愚蠢的問題感到抱歉。我慢慢習慣上課... – snowflake