2016-08-30 5 views
0

Ich habe eine GUI, die mit Qt Designer generiert wurde, ich habe pyuic5 verwendet, um eine .py-Datei zu generieren. In einer separaten py (program.py) Datei importiere ich meine UI und erledige all meine Arbeit dort.Wie kann ich QDialog() in PyQT5 selbst verstecken und anzeigen?

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

ich hier auf die Frage zu konzentrieren, nur eine Menge herausgezogen. Wenn ich auf die Schaltfläche Abbrechen klicke, möchte ich, dass das Fenster ausgeblendet wird, einen Timer setzt und nach so vielen Sekunden wieder erscheint. Ich habe jede Kombination von self.close() self.hide() self.destroy() ausprobiert und keines von ihnen versteckt mein Fenster. Ich erhalte eine Fehlermeldung, die

sagt „Attribute:‚MyGUI‘Objekt hat kein Attribut‚verstecken‘

was Sinn macht, weil MyGUI kein Fell hat() Funktion. Ich bin völlig dabei, dieses Fenster zu verstecken.

EDIT (Gelöst) Für zukünftige Menschen, wie von Hi Im Frogatto dialog.hide vorgeschlagen() gearbeitet.

+0

Wie wäre es mit 'dialog.hide()'? (übrigens, 'QDialog' sollte nicht die Benutzeroberfläche Ihrer Hauptanwendung zeigen, verwenden Sie' QMainWindow' stattdessen) –

+0

@ HiI'mFrogatto Das BTW ist schlechter Rat. Ein 'QMainWindow' sollte * nur * verwendet werden, wenn Sie seine * spezifische * Funktionalität benötigen: die von andockbaren Unterfenstern, etc. Es ist * vollständig gültig *, eine Hauptbenutzeroberfläche direkt von' QDialog' oder 'QWidget' abzuleiten. Es ist unglücklich, dass Qt Creator Sie mit einem "Haupt-UI" startet, das standardmäßig von "QMainWindow" abgeleitet ist. In vielen Fällen ist es genau das Falsche. –

+0

@KubaOber Ich habe nicht gesagt, mit 'QDialog' ist ein ungültiger Ansatz. Aber UX benötigt die Hauptbenutzeroberfläche der Anwendungen, um eine Menüleiste, eine Statusleiste usw. zu haben, die von 'QMainWindow' bereitgestellt werden, nicht von' QWidget' oder 'QDialog'. Zusätzlich soll ein 'QDialog' akzeptiert oder abgelehnt werden, um ihn nicht zu verstecken und zu zeigen. –

Antwort

1

In Ihrem Code-Snippet ist dialog vom Typ QDialog und damit hide Methode. Instanzen der MyGUI Klasse scheinen jedoch keine solche Methode zu haben. Also, wenn Sie dialog.hide() in dieser __init__() Funktion schreiben, können Sie es ausblenden.

+0

Danke nochmal ... –

Verwandte Themen