2016-06-09 1 views
-1

J'ai un QMainWindow qui a un bouton, quand on clique sur ce bouton, un autre widget apparaît. Ce widget possède un bouton, lorsque vous cliquez sur ce bouton, un message d'alerte apparaît. Lorsque j'appuie sur 'OK' sur ce bouton, seul QMessageBox se ferme, un petit widget est toujours ouvert. Je veux fermer ce widget quand j'appuie sur 'OK' sur ce bouton de message. Je ne pouvais pas comprendre comment je peux faire ça. Voici mon code;PyQt5 comment détruire le dernier widget en cliquant sur le bouton 'OK' sur QMessageBox créé par un bouton sur ce widget

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_()) 

J'ai essayé de les relier (bouton « OK » de QMessageBox et dernier un widget) mais je ne pouvais pas le faire très bien et je suis vraiment confus.

Répondre

0

J'ai trouvé la solution par moi-même, juste faire un QMessageBox (pas d'héritage), puis trouver le résultat et vérifier si le résultat est quelque chose que vous voulez, close() le widget.

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() 

J'utilise le bouton « OK » quand j'imprimé result la valeur était 1024, donc avant de vérifier que le bouton cliqué (si vous utilisez yes | no boutons) imprimer le résultat d'abord trouver la valeur, puis faire votre travail.