gpt4 book ai didi

python - PyQt:点击 X 不会触发 closeEvent

转载 作者:太空狗 更新时间:2023-10-29 19:32:27 25 4
gpt4 key购买 nike

我是 PyQt 的新手,正在尝试开发简单的应用程序。我用 Qt-designer 设计了简单的用户界面。如果用户真的想在单击 X 或 ,,Exit'' 按钮或从菜单中选择 Exit 时退出应用程序,我需要额外确认。

代码如下:

import sys
from PyQt4 import QtGui, QtCore, uic

class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)

self.ui = uic.loadUi('main_window.ui')
self.ui.show()

self.ui.btnExit.clicked.connect(self.close)
self.ui.actionExit.triggered.connect(self.close)

def closeEvent(self, event):
print("event")
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)

if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()


def main():
app = QtGui.QApplication(sys.argv)
win = MainWindow()
sys.exit(app.exec_())


if __name__ == "__main__":
main()

问题在于:

  • 当我在主窗口上单击 X 时,closeEvent 函数不会触发
  • 当我单击“退出”按钮或从菜单中选择“,,退出”时,函数
    被调用,但单击"is"不会关闭应用程序。

我在 SO 上发现了一些问题并搜索了教程,但没有涵盖此类问题。我做错了什么?

最佳答案

注意你在做:

self.ui = uic.loadUi('main_window.ui')
self.ui.show()

您的实际 窗口是一个实例属性(ui) win 中。不是 win 本身。而且它没有实现 closeEvent

loadUi可以在实例中加载 .ui 文件。

PyQt4.uic.loadUi(uifile[, baseinstance=None[, package='']])

你应该使用它。这样,您的代码将是:

import sys
from PyQt4 import QtGui, QtCore, uic

class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)

uic.loadUi('main_window.ui', self)

self.btnExit.clicked.connect(self.close)
self.actionExit.triggered.connect(self.close)

def closeEvent(self, event):
print("event")
reply = QtGui.QMessageBox.question(self, 'Message',
"Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)

if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()


def main():
app = QtGui.QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())


if __name__ == "__main__":
main()

注意:我不喜欢在 __init__显示窗口。明确的更好。所以,我将其移至 main。请随意修改它。

关于python - PyQt:点击 X 不会触发 closeEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14834494/

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