2016-08-30 33 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()的每個組合,並且它們都沒有隱藏我的窗口。我得到那個說

錯誤「AttributeError的:‘MyGUI’對象有沒有屬性‘隱藏’

這是有道理的,因爲MyGUI沒有隱藏()函數。我完全喪失瞭如何隱藏這個窗口。

編輯(解決) 對於未來的人,通過Hi Im Frogatto dialog.hide的建議()工作。

+0

'dialog.hide()'怎麼樣? (順便說一句,'QDialog'不應該顯示你的主應用程序的UI,而是使用'QMainWindow') –

+0

@ HiI'mFrogatto順便提一下是不好的建議。只有當你需要它的特殊功能時纔可以使用'QMainWindow':可停靠的子窗口等。*它是完全有效的*,它的主UI直接來自'QDialog'或'QWidget'。這是**不幸**,Qt Creator默認使用從「QMainWindow」派生的「主UI」來啓動您。在很多情況下,這是正確的做法。 –

+0

@KubaOber我沒有說使用'QDialog'是一種無效的方法。但是UX需要應用程序的主UI具有菜單欄,狀態欄等,這些菜單欄由'QMainWindow'提供,而不是''QWidget''或'QDialog'。此外,'QDialog'應該被接受或拒絕,不會隱藏和顯示。 –

回答

1

在您的代碼片段中,dialog的類型爲QDialog,因此具有hide方法。然而MyGUI類的實例似乎沒有這樣的方法。因此,如果您在該__init__()函數中編寫dialog.hide(),則可以隱藏它。

+0

再次感謝... –