为了账号安全,请及时绑定邮箱和手机立即绑定

PyQT CloseEvent 函数:主窗口消失

PyQT CloseEvent 函数:主窗口消失

qq_遁去的一_1 2021-10-26 18:55:24
我是 PyQT 的新手。我正在将我的一个应用程序从 tkinter 转移到 PyQT。我想要的是以下场景:当用户单击 X 按钮时,会出现询问用户是否确定关闭的消息框,而主屏幕仍处于打开状态。但是,在我的代码中,当单击 X 按钮时,主屏幕首先消失并出现消息框。我怎样才能解决这个“订单问题”——正如我所说的?我的代码如下:(在root.protocol("WM_DELETE_WINDOW", on_closing)tkinter 中,使用代码和包含messagebox.askokcancel("Quit", "Do you want to quit Chit-Chat?")命令的 on_closure 函数很容易。但是,我无法在 PyQT 中弄清楚。)app = QApplication(sys.argv)v_box = QVBoxLayout()window = QWidget()label = QLabel("Hello World")v_box.addWidget(label)def closeEvent():    msg_box = QMessageBox()choice = QMessageBox.question(msg_box, "Quit", "Do you want to quit chit chat?", QMessageBox.Yes | QMessageBox.No)    if choice == QMessageBox.Yes:        print("The program was shut down.")        sys.exit()    else:        passapp.aboutToQuit.connect(closeEvent)window.setLayout(v_box)window.show()sys.exit(app.exec())
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

您可以选择是否接受该事件。


def closeEvent(self, event):

    if self.popup_question():

        print("The program was shut down.")

        event.accept()

    else:

        print("not exiting")

        event.ignore()


def popup_question(self):

    """Generate a popup that requests if you want to do something or not."""

    msgbox = QtWidgets.QMessageBox()

    msgbox.setWindowTitle("Whatever title you want to add.")

    msgbox.setIcon(QtWidgets.QMessageBox.Warning)

    msgbox.setText("Do you want to quit chit chat?")

    botonyes = QtWidgets.QPushButton("Yes")

    msgbox.addButton(botonyes, QtWidgets.QMessageBox.YesRole)

    botonno = QtWidgets.QPushButton("No")

    msgbox.addButton(botonno, QtWidgets.QMessageBox.NoRole)

    msgbox.exec_()

    if msgbox.clickedButton() == botonno:

        return False

    else:

        return True


查看完整回答
反对 回复 2021-10-26
  • 3 回答
  • 0 关注
  • 384 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信