2017-11-17 20 views
0

によって開かれている場合、私は、メインフレームを持っているし、新しいダイアログを開くには、押しボタンをクリックし、どうダイアログ私は、適切にダイアログを閉じ、ダイアログがメインフレーム

んが、タイマーを持って、タイマーは3秒でメッセージを表示するようにしましょう間隔、

が、私は、ダイアログを閉じるには、右上の[閉じる]ボタンをクリックすると、メッセージボックスがまだ実行

どのようにそれを避けるために?

ありがとうございます!

from PySide2.QtWidgets import QApplication,QMainWindow,QTabWidget,QWidget 
from PySide2.QtWidgets import QMessageBox,QFileDialog,QErrorMessage 
from PySide2 import QtCore, QtGui, QtWidgets 
class UI_Test20(object): 
    def setupUi(self, Test202): 
     Test202.setObjectName("Test202") 
     Test202.resize(100,100) 
     self.centralwidget = QtWidgets.QWidget(Test202) 
     self.centralwidget.setObjectName("centralwidget") 
     self.pb = QtWidgets.QPushButton(self.centralwidget) 
     self.pb.setText('push button!') 
     Test202.setCentralWidget(self.centralwidget) 
     self.pb.clicked.connect(self.btnClicked) 
     self.retranslateUi(Test202) 
     QtCore.QMetaObject.connectSlotsByName(Test202) 

    def retranslateUi(self, Test202): 
     Test202.setWindowTitle(QtWidgets.QApplication.translate("Test202", "MainWindow", None, -1)) 

    def btnClicked(self): 
     self.ui = Ui_Dialog1(self) 
     self.ui.show() 

class Test20(QMainWindow, UI_Test20) : 

    def __init__(self, parent): 
     super(Test20, self).__init__(parent) 
     self.setupUi(self) 

とダイアログコード

class Ui_Dialog1(QtWidgets.QDialog): 

    def __init__(self, parent=None): 
     super(Ui_Dialog1, self).__init__(parent) 
     self.p = parent 
     self.setupUi(self) 

     self.timer = QtCore.QTimer() 
     self.timer.timeout.connect(self.update) 
     self.timer.start(3000) 
    def update(self): 
     QMessageBox.information(self,'123','123') 

    def setupUi(self, Dialog1): 
     Dialog1.setObjectName("Dialog1") 
     Dialog1.resize(333, 173) 

メイン

if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    ui = Test20(None) 
    ui.show() 
    sys.exit(app.exec_()) 
+0

このイベントが発生すると、QMessageBoxを閉じます。 –

+0

どうすればダイアログを実際に破棄できますか? –

+0

私は以下の答えを変更しました。PyQt4ではうまくいきました。このヘルプを期待しています:) –

答えて

0

あなたはQDialogとshow()メソッドを呼び出すと、あなたのダイアログがモードレスになり、それが近いだ時に削除されていない非表示になります。あなたのダイアログが削除されていることを確認するには、ダイアログのinitメソッドでもう1行追加してください:

def __init__(self, parent=None): 
    super(Ui_Dialog1, self).__init__(parent) 
    self.p = parent 
    self.setupUi(self) 

    self.timer = QtCore.QTimer() 
    self.timer.timeout.connect(self.update) 
    self.timer.start(3000) 
    #Make sure that your dialog will be deleted not hidden 
    self.setAttribute(QtGui.Qt.WA_DeleteOnClose) 
+0

'QMessageBox.information()'は静的メソッドであり、 'QMessageBox'を返しませんでした。これはボタンが関連する' QMessageBox :: StandardButtons'を返します – eyllanesc

+0

正直なので、@eyllanescに感謝しました。投稿し、慎重にテストした:)。 –

+0

ありがとうございます@ You'reawesome! –

関連する問題