PyQt5, как уничтожить последний виджет при нажатии кнопки "ОК" на QMessageBox, созданном кнопкой на этом виджете
У меня есть QMainWindow, в котором есть кнопка, при нажатии на которую появляется другой виджет. У этого виджета есть кнопка, при нажатии на которую появляется всплывающее сообщение. Когда я нажимаю "ОК" на этой кнопке сообщения, закрывается только QMessageBox, маленький виджет все еще открыт. Я хочу закрыть этот виджет, когда я нажимаю "ОК" на этой кнопке сообщения. Я не мог понять, как я могу это сделать. Вот мой код;
from PyQt5.QtWidgets import (QMessageBox,QApplication, QWidget, QToolTip, QPushButton,
QDesktopWidget, QMainWindow, QAction, qApp, QToolBar, QVBoxLayout,
QComboBox,QLabel,QLineEdit,QGridLayout,QMenuBar,QMenu,QStatusBar,
QTextEdit,QDialog,QFrame,QProgressBar,QHBoxLayout
)
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtGui import QIcon,QFont,QPixmap,QPalette,QWindow
from PyQt5.QtCore import QCoreApplication, Qt,QBasicTimer, QTimer,QPoint
import PyQt5.QtWidgets,PyQt5.QtCore
import time,random,subprocess,sys,json
class cssden(QMainWindow):
def __init__(self):
super().__init__()
self.mwidget = QMainWindow(self)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setFixedSize(600,500)
#Other widget button
self.owidget = QPushButton(self)
self.owidget.clicked.connect(self.second_widget)
self.show()
#other widget
#I want to destroy this widget when I press 'OK' on the QMessageBox
def second_widget(self):
self.w_window = QWidget()
self.w_window.setGeometry(650,300,600,300)
self.w_window.setStyleSheet("background-color: lightblue")
self.w_button = QPushButton(self.w_window)
self.w_button.setText("Alert")
self.w_button.clicked.connect(self.alert)
self.w_window.show()
#alert from second widget
def alert(self):
QMessageBox.about(self.w_window,"Alert","Alert message")
app = QApplication(sys.argv)
app.setStyleSheet("QMainWindow{background-color: rgb(30,30,30);border: 1px solid black}")
ex = cssden()
sys.exit(app.exec_())
Я пытался соединить их (кнопка "ОК" QMessageBox и последний виджет), но я не смог сделать это очень хорошо, и я действительно запутался.
1 ответ
Я сам нашел решение, просто сделаю QMessageBox(без наследования), затем найду результат и проверим, если результат - то, что вы хотите, close()
виджет.
self.result1 = QMessageBox(QMessageBox.Information,"Alert","Alert message",QMessageBox.Ok)
self.result1.setGeometry(500,500,500,500)
self.result1.show()
result = self.result1.exec_()
if result == 1024:
self.w_window.close()
Я использовал кнопку "ОК", чтобы при печати result
значение было 1024
, поэтому, прежде чем проверять, какая кнопка нажата (если вы используете кнопки "да | нет"), сначала напечатайте результат, затем найдите значение, а затем выполните свою работу.