python - PyQt类继承

标签 python class inheritance pyqt

我很难理解 Python/PyQt 的类继承。我有一个 MainWindow 和一个 Popup QWidget。在弹出窗口中打开 QWidget 后,我想与 MainWindowself.label1 进行交互,但我不知道如何去做吧。我只知道反过来,从 MainWindow 内的弹出窗口访问所有小部件,反之亦然。

这是一个例子,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_())

最佳答案

您需要将主窗口作为参数传递给 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_())

关于python - PyQt类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21702897/

相关文章:

python - 连续计算列中某个值的出现次数

python - Django 虽然已安装但找不到 Pillow

c# - 为什么要将 2 类的引用放入 1 类的对象中?

javascript - Angular 允许在构造函数中继承服务声明

python - Django 通用 View 中 get_context_data 和 queryset 之间的区别?

python - 记录处理程序为空 - 为什么记录 TimeRoatingFileHandler 不起作用

r - 为什么 lapply 不适用于具有 as.list.default 方法的 S4 对象?

Java - 具有多级类的列表集合 - 仅循环最后一个成员 - .stream() .forEach() .for()

c++ - 继承的 protected 默认构造函数不可访问

python - 解决模板 block 结构与第三方 django 应用程序的冲突