gpt4 book ai didi

python - 使用 QUiLoader() 加载时如何接受 MainWindow 的关闭事件?

转载 作者:太空宇宙 更新时间:2023-11-04 10:28:50 26 4
gpt4 key购买 nike

如何在以下代码中接收关闭事件?

class Main(QMainWindow):
def __init__(self, parent=None):
super(Main, self).__init__(parent)
self.view = QUiLoader().load("sample.ui", self)
self.view.show()

def closeEvent(self, e):
print "close event recieved"

def main():
app = QApplication(sys.argv)
a=Main()
sys.exit(app.exec_())

if __name__ == "__main__":
main()

如果我使用 pyside-uic 将 sample.ui 转换为 sample.py 并将其导入 main.py,那么我就能够接收到关闭事件。

from sample import Ui_MainWindow

class Main(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(Main, self).__init__(parent)
self.setupUi(self)

def closeEvent(self, e):
print "close event recieved"

app = QApplication(sys.argv)
a=Main()
a.show()
sys.exit(app.exec_())

最佳答案

第二个示例之所以有效,是因为它有效地成为了 Qt Designer 中顶级类的子类。相比之下,第一个示例使用组合而不是子类化,它将所有 gui 元素放在一个内部 namespace 中。 Main 类只是一个容器,充当 view 小部件的父级,并且从未实际显示(这反过来意味着它不会接收任何关闭事件) .

在 PyQt 中,uic 模块有几个功能可以让您解决这些问题,但目前 PySide 中没有类似的功能。相反,您必须推出自己的功能。参见 this answer有关如何执行此操作的说明。

或者,您可以将 Qt Designer 中的顶级类更改为 QWidget,然后使 view 成为您的 Main 类。不过,这比上述方法灵活得多。

关于python - 使用 QUiLoader() 加载时如何接受 MainWindow 的关闭事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28127712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com