私はメニュー項目をクリックするとダイアログが表示されるpyqtアプリケーションを持っています。ダイアログがフォーカスを失ってメニュー項目が再びクリックされると、ダイアログが前面に表示されます。今のところうまくいきます。pyqtダイアログにもう一度表示されません
問題は、ダイアログを開いた後閉じたときに、メニュー項目をクリックしても新しいダイアログが作成または表示されないということです。私はなぜ知っていると思いますが、解決策
を把握することはできませんHERESにコード:
問題は、ダイアログが最初に作成されたとき、self.about
はもはや
None
であるという事実にある
from ui import mainWindow, aboutDialog
class ReadingList(QtGui.QMainWindow, mainWindow.Ui_MainWindow):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self)
self.about = None
self.actionAbout.triggered.connect(self.showAbout)
def showAbout(self):
# If the about dialog does not exist, create one
if self.about is None:
self.about = AboutDialog(self)
self.about.show()
# If about dialog exists, bring it to the front
else:
self.about.activateWindow()
self.about.raise_()
class AboutDialog(QtGui.QDialog, aboutDialog.Ui_Dialog):
def __init__(self, parent=None):
super(self.__class__, self).__init__()
self.setupUi(self)
def main():
app = QtGui.QApplication(sys.argv)
readingList = ReadingList()
readingList.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
。 の条件は、ダイアログが閉じている(他の条件)しかし
、新しいものを作成するのではなく、前にダイアログを持って来るために私をことができますので、これは良いですが、self.about
が原因前のダイアログにはもはやNone
ではありません新しいものを作成せず、else条件にジャンプします。
最初のダイアログの後にダイアログを作成するにはどうしたらよいですか?
AboutDialog
クラスのcloseEvent
メソッドをオーバーライドすることを考えましたが、ダイアログが閉じられたというメッセージを返すためにreadingList
への参照を取得する方法がわかりません。または、おそらく私はそれをoverthinking、おそらくself.about.show()
からの戻り値は何とか使用することができますか?
'AboutDialog'の' super(...).__ init __() 'は、' super(...).__ init __(parent) 'のように' parent'引数を渡します。これでダイアログを前面に表示することを心配する必要がなくなりました。 – xyres