微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从另一个类调用 QMainWindow 组件?

如何解决如何从另一个类调用 QMainWindow 组件?

我需要从另一个调用 QMainWindow 的对象,但我找不到让它工作的方法。这是问题的最小示例:

import sys
from PyQt5.QtWidgets import QApplication,QMainWindow,QLabel

class Starter:
    def __init__(self):
        super(Starter,self).__init__()
        print("starter")
        MainWindow().show_label()

class MainWindow(QMainWindow):
    def __init__(self,parent=None):
        super(MainWindow,self).__init__(parent)
        self.setwindowTitle("Start")
        self.show()

    def show_label(self):
        print("show")
        label = QLabel("Hallo")
        self.setCentralWidget(label)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    Starter()
    sys.exit(app.exec_())

窗口正确打开,调用 Starter class,打印“starter”,也调用 show_label,打印“show”,但标签没有出现在窗口中。这种方法有什么问题?

解决方法

首先,我建议您对 classes and instances 是什么以及它们是如何工作的进行一些研究和研究。

另一个不容忽视的重要方面是垃圾收集,这就是 Python 确保在不再需要对象时不浪费内存的方式。
这对于您在 Starter 中创建的 MainWindow 实例以及代码末尾的 Starter() 本身都会发生。

最后,在您的 Starter 类中,您没有使用您正在考虑的 MainWindow 实例(在脚本末尾创建的实例),而是另一个完全没有参考的实例Starter 的 __init__() 之外的任何内容:只要执行该行,该实例就会被删除。

综合以上方面,尝试以下修改,了解不同之处。

class Starter:
    def __init__(self):
        super(Starter,self).__init__()
        self.mainWindow = MainWindow()
        self.mainWindow.show_label()

# ...
if __name__ == '__main__':
    app = QApplication(sys.argv)
    starter = Starter()
    sys.exit(app.exec_())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。