2016-08-30 14 views
0

Qt Designerを使用して生成されたGUIがありますが、pyuic5を使用して.pyファイルを生成しました。別のpy(program.py)ファイルで私は自分のUIをインポートします。PyQT5でQDialog()を表示して非表示にする方法はありますか?

program.py

import sys, os, time 
from subprocess import call 
from PyQt5 import QtCore, QtGui, QtWidgets 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 
from PyCred_GUI import Ui_Dialog 


class MyGUI(Ui_Dialog): 
    def __init__(self, dialog): 
     Ui_Dialog.__init__(self) 
     self.setupUi(dialog) 


     self.pushButton_2.clicked.connect(self.cancelbutton) 

    def cancelbutton(self): 
     exit() 


if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    dialog = QtWidgets.QDialog() 
    dialog.setWindowFlags(QtCore.Qt.WindowSystemMenuHint) 
    prog = MyGUI(dialog) 

    dialog.show() 
    sys.exit(app.exec_()) 

私はここでの問題に焦点を当てて多くのことを引き抜きます。キャンセルボタンをクリックすると、ウィンドウを非表示にしてタイマーを設定してから、数秒後に再び表示されます。 self.close()self.hide()self.destroy()のすべての組み合わせを試してみましたが、どれも自分のウィンドウを隠していません。

MyGUIが非表示()関数を持っていないので、理にかなって:私は

「『MyGUI』オブジェクトが属性 『非表示』を持っていないはAttributeErrorを」というエラーを取得します。私はこのウィンドウを隠す方法を完全に失っています。

編集 Hi Im Frogattoで提案されているように、dialog.hide()が働いています。

+0

'dialog.hide()'についてはどうですか? (btw、 'QDialog'はあなたの主なアプリケーションのUIを表示するはずです、代わりに' QMainWindow'を使用してください) –

+0

@ HiI'mFrogatto btwは悪いアドバイスです。 'QMainWindow'は*特定の*機能が必要なときにのみ使用するべきです:ドッキング可能なサブウィンドウなどの機能が必要です* QDialogやQWidgetから直接得られるメインUIを持つことは完全に有効です*。 Qt Creatorがデフォルトで 'QMainWindow'から派生した「メインUI」であなたを始めるのは残念です**。多くの場合、それは間違ったことです。 –

+0

@KubaOber私は 'QDialog'を使うのは無効なアプローチだとは言いませんでした。しかし、UXでは、アプリケーションのメインUIに、メニューバーやステータスバーなどがあり、QWidgetやQDialogではなく、QMainWindowによって提供される必要があります。さらに、 'QDialog'は、隠されて表示されないように受け入れられるか拒否されることになっています。 –

答えて

1

コードスニペットでdialogはタイプQDialogであり、hideメソッドを持っています。しかし、MyGUIクラスのインスタンスは、そのようなメソッドを持っていないようです。だから、__init__()の機能にdialog.hide()と書いても、それを隠すことができます。

+0

もう一度おねがいします... –

関連する問題