Ich habe auf einem PyQt4 Anwendung arbeiten, und das ist, was ich habe, so weit:PyQt4 Fenster schließt sich automatisch
import sys
from PyQt4 import QtGui, QtCore
class PasswordPrompt(QtGui.QWidget):
def __init__(self):
super(PasswordPrompt, self).__init__()
self.initUi()
def initUi(self):
self.setFixedSize(500, 75)
self.setWindowTitle('Please enter the password...')
self.prompt = QtGui.QLineEdit(self)
self.btn = QtGui.QPushButton('Enter', self)
self.btn.clicked.connect(self.btnClicked)
self.hbox = QtGui.QHBoxLayout()
self.hbox.addWidget(self.prompt)
self.hbox.addWidget(self.btn)
self.vbox = QtGui.QVBoxLayout()
self.vbox.addLayout(self.hbox)
self.vbox2 = QtGui.QVBoxLayout()
self.vbox2.addSpacing(300)
self.hbox2 = QtGui.QHBoxLayout()
self.hbox2.addSpacing(150)
self.vbox2.addLayout(self.hbox2)
self.vbox.addLayout(self.vbox2)
self.setLayout(self.vbox)
self.center()
self.show()
def btnClicked(self):
pw = self.prompt.text()
if pw == "password":
print("Permission granted!")
self.close()
mw = MainWindow()
else:
print("Permissed denied!")
self.prompt.clear()
self.warningText = QtGui.QLabel('That is the wrong password!', self)
self.hbox2.addWidget(self.warningText)
def center(self):
qr = self.frameGeometry()
cp = QtGui.QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
class MainWindow(QtGui.QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.initUi()
def initUi(self):
self.setWindowTitle('Main Menu')
self.setFixedSize(1000, 800)
self.show()
def main():
application = QtGui.QApplication(sys.argv)
p = PasswordPrompt()
sys.exit(application.exec())
if __name__=='__main__':
main()
Mein Problem kommt, wenn ich versuche, mw der Klasse Hauptfenster zu erstellen. Aus irgendeinem Grund wird MainWindow.initui() ausgeführt und dann sofort geschlossen. Ich nehme an, dass es etwas mit der main() - Funktion und dem QApplication-Objekt zu tun hat. Was ist der beste Weg, mehrere Fenster zu programmieren und dies zu umgehen? Ich wollte ursprünglich eine Klasse pro Fenster erstellen: passwordPrompt, MainMenu etc und dann eine Instanz jeder Klasse instanziieren, um ein neues Fenster zu laden, aber wie Sie sehen können, funktioniert es nicht.
Hallo @WewLad, haben Sie eine der Antworten hilfreich gefunden? Hoffe, dein Problem ist gelöst :-) –