如何解决如何从另一个类调用 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 举报,一经查实,本站将立刻删除。