PyQT CloseEvent 函数:主窗口消失

我是 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:

        pass


app.aboutToQuit.connect(closeEvent)

window.setLayout(v_box)

window.show()

sys.exit(app.exec())


qq_遁去的一_1
浏览 349回答 3
3回答

红颜莎娜

您可以选择是否接受该事件。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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python