设置在主类的子类中创建的 PyQt5 小部件的属性

Posted

技术标签:

【中文标题】设置在主类的子类中创建的 PyQt5 小部件的属性【英文标题】:Setting attribute of a PyQt5 widget created in a subclass within the main class 【发布时间】:2021-12-07 17:40:01 【问题描述】:

我做了一个程序,想用类重写它。 我不知道如何更改在它的子类 outside 中创建的 Qlabel 的文本。 代码如下:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel

class MainWindow(QWidget):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.setMinimumSize(300,200)
        self.layout  = QVBoxLayout()
        self.layout.addWidget(MyClass(self))
        self.setLayout(self.layout)
        # i want to change the text label from here
        # with label.setText()

class MyClass(QWidget):

    def __init__(self, parent):
        super(MyClass, self).__init__()
        self.parent = parent
        self.label = QLabel("My text",self)
        self.label.setStyleSheet("color: black;")
        self.label.setGeometry(5, 0, 65, 15) 

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

谢谢

【问题讨论】:

你的问题不清楚。您在哪里尝试更改在其外部子类中创建的Qlabel 的文本?发生了什么,有错误信息吗? 【参考方案1】:

不需要传递父级,使用对象引用即可:

class MainWindow(QWidget):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setMinimumSize(300,200)
        self.layout  = QVBoxLayout()
        self.myclass = MyClass()
        self.layout.addWidget(self.myclass)
        self.setLayout(self.layout)
        # i want to change the text label from here
        self.myclass.label.setText("Foo")

class MyClass(QWidget):
    def __init__(self, parent=None):
        super(MyClass, self).__init__(parent)
        self.label = QLabel("My text",self)
        self.label.setStyleSheet("color: black;")
        self.label.setGeometry(5, 0, 65, 15) 

【讨论】:

谢谢你,我已经找到了解决方案,但我发布时出错了。将 parent=none 放在声明中重要吗?

以上是关于设置在主类的子类中创建的 PyQt5 小部件的属性的主要内容,如果未能解决你的问题,请参考以下文章

子类如何访问父类

在 aux 方法中创建的 QWidget 不显示/绘制

如何在颤动的另一个有状态小部件中访问在一个有状态小部件中创建的对象

PyQt5 - 无法在子类中捕获 mousePressEvent

QFormLayout的PyQt5顶行没有响应鼠标点击

PyQt5 - 在表格小部件的列中创建一个检查项,即使行数与旋转框不同