2016-06-09 20 views
-1

Ich habe ein QMainWindow, die eine Schaltfläche haben, wenn Sie auf diese Schaltfläche klicken, erscheint ein anderes Widget. Dieses Widget hat eine Schaltfläche, wenn Sie auf diese Schaltfläche klicken, erscheint eine Warnmeldung. Wenn ich 'OK' auf dieser Nachrichtenschaltfläche drücke, wird nur QMessageBox geschlossen, kleines Widget ist noch offen. Ich möchte das Widget schließen, wenn ich auf dieser Nachrichtenschaltfläche "OK" drücke. Ich konnte nicht herausfinden, wie ich das machen kann. Hier ist mein Code;PyQt5 wie das letzte Widget zu zerstören, wenn geklickt 'OK' Button auf QMessageBox mit einer Schaltfläche auf dem 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_()) 

Ich habe versucht, sie (Schaltfläche ‚OK‘ von QMessageBox und letzter widget) zu verbinden, aber ich konnte es nicht sehr gut tun und ich bin wirklich verwirrt.

Antwort

0

Ich habe die Lösung von mir selbst herausgefunden, nur eine QMessageBox (keine Vererbung), dann finden Sie das Ergebnis und prüfen, ob das Ergebnis, was Sie wollen, close() das Widget ist.

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

habe ich ‚OK‘ so, wenn ich result der Wert war 1024 gedruckt, also, bevor Sie überprüfen, welche Schaltfläche geklickt (wenn Sie ja verwenden | keine Tasten), um den Wert das Ergebnis zuerst drucken dann finden, dann tun deine Arbeit.