Python PyQt类继承
我很难理解Python/PyQt的类继承。我有一个Python PyQt类继承,python,class,inheritance,pyqt,Python,Class,Inheritance,Pyqt,我很难理解Python/PyQt的类继承。我有一个main窗口和一个弹出的QWidget。在弹出窗口中打开QWidget后,我想与main窗口的self.label1交互,但我不知道如何操作。我只知道另一种方法,从main窗口中的弹出窗口访问所有小部件,但反之亦然 以下是一个示例,main窗口的self.label1在新窗口中打开MyPopup后应获得另一个文本: import sys from PyQt4.Qt import * class MyPopup(QWidget): def
main窗口
和一个弹出的QWidget
。在弹出窗口中打开QWidget
后,我想与main窗口的self.label1
交互,但我不知道如何操作。我只知道另一种方法,从main窗口中的弹出窗口访问所有小部件,但反之亦然
以下是一个示例,main窗口的self.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_())
您需要将主窗口作为参数传递给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_())
这是Alvaro Fuentes之前的回答,PyQt5需要进行一些小的更新
import sys
from PyQt5.Qt import *
class MyPopup(QWidget):
def __init__(self, mainwin):
QWidget.__init__(self)
# I want to change the lable1 of MainWindow
mainwin.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.btn1.clicked.connect(self.doit)
self.w = None
def doit(self):
self.w = MyPopup(self)
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_())
非常感谢你,很抱歉这个愚蠢的问题。我正在慢慢习惯上课……你也能帮我吗