PyQt类继承 [英] PyQt class inheritance
问题描述
我很难理解Python/PyQt的类继承.我有一个MainWindow
和一个弹出QWidget
.在弹出窗口中打开QWidget
后,我想与MainWindow
的self.label1
进行交互,但是我不知道该怎么做.我只知道相反的一种方法,可以从MainWindow
内的弹出窗口访问所有小部件,反之亦然.
I am having troubles to understand class inheritance with Python/PyQt. I have a MainWindow
and a Popup QWidget
. I want to interact with the self.label1
of the MainWindow
after the QWidget
was opened in a pop up window but I don't know how to do it. I know only the other way around, to reach all widgets from the popup Window inside MainWindow
but not vice versa.
这里是一个示例,在新窗口中打开MyPopup
后,MainWindow
的self.label1
应该会得到另一个文本:
Here is an example, self.label1
of MainWindow
should get another text after MyPopup
opens in a new window:
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_())
推荐答案
您需要将主窗口作为参数传递给MyPopup
的构造函数,请尝试以下操作:
You need to pass the main window as a parameter to the constructor of MyPopup
, try this:
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_())
这篇关于PyQt类继承的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!