我知道对这类问题有各种各样的回答,但由于其他回答在他们的问题中有变化,因为我没有能够解决问题。对不起,如果它看起来很傲慢或讨厌。
我为我的预订系统创建了一个登录窗口,此处未显示与此问题无关。现在我调用一个函数,当登录成功时创建一个新窗口(QWidget)但得到错误QWidget:必须在QWidget之前构造QApplication。尝试寻找答案,但找不到任何相关和基于python的答案。
任何帮助都会非常感激。提前谢谢。
def Login_Window():
app = QApplication(sys.argv)
tabwidget = QTabWidget()
widget = QWidget()
layout = QGridLayout(widget)
username = QLabel(widget)
username.setText("me")
tabwidget.addTab(widget,"Adding A Booking")
tabwidget.show()
app.exec_()
class Login_Setup(QWidget):
def __init__(self):
super().__init__()
self.init_UI()
def init_UI(self):
self.username = QLabel("Username -->")
self.password = QLabel("Password -->")
self.username_entry = QLineEdit()
usernames = self.usernames_read()
autocomplete = QCompleter(usernames)
self.username_entry.setCompleter(autocomplete)
self.username_entry.setPlaceholderText("Enter username...")
self.password_entry = QLineEdit()
self.password_entry.setPlaceholderText("Enter password...")
self.password_entry.setEchoMode(QLineEdit.Password)
self.login_button = QPushButton('Login')
self.space1 = QLabel()
self.space2 = QLabel()
self.progress = QProgressBar(self)
self.check = QCheckBox("Show Password?",self)
self.check.stateChanged.connect(self.password_view)
y = QVBoxLayout() # Adding veritcal layout.
x1 = QHBoxLayout()# First H layout
x1.addWidget(self.username)
x1.addWidget(self.username_entry)
y.addLayout(x1)# Adding H layout
x2 = QHBoxLayout()# Second H layout
x2.addWidget(self.password)
x2.addWidget(self.password_entry)
x2.addWidget(self.check)
y.addLayout(x2)# Adding 2nd H Layout
x3 = QHBoxLayout()
x3.addWidget(self.space1)
x3.addWidget(self.space2)
x3.addWidget(self.progress)
x3.addWidget(self.login_button)
y.addLayout(x3)
self.login_button.clicked.connect(self.login_trigger)
self.setLayout(y)
self.show()
def usernames_read(self):
usernames = []
with open('usernames.txt','r') as fo:
for line in fo:
usernames.append(line.strip().replace("\n",""))
return usernames
def password_view(self,state):
if state == QtCore.Qt.Checked:
self.password_entry.setEchoMode(QLineEdit.Normal)
else:
self.password_entry.setEchoMode(QLineEdit.Password)
def login_trigger(self):
self.completed = 0
while self.completed<100:
self.completed+=0.001
self.progress.setValue(self.completed)
username = self.username_entry.text()
password = self.password_entry.text()
self.username_entry.clear()
self.password_entry.clear()
verify, hashed = Security.check_login(username,password)
if (verify == True) and (Security.check_admin(hashed) == True):
Login_Page.hide()
**Load_Window()**
elif (verify == True):
Login_Page.hide()
**Load_Window()**
else:
self.progress.setValue(0)
decision = QMessageBox.warning(self,"Invalid Attempt", "Invalid username and/or password!",QMessageBox.Ok | QMessageBox.Help)
if decision == QMessageBox.Help:
QMessageBox.information(self,"Invalid Attempt", "The username or/and password you entered where not found on the database or hasn't been approved by the admin!",QMessageBox.Ok)
else:
pass
class Login(QMainWindow):
def __init__(self):
super().__init__()
self.GUI = Login_Setup()
print("set")
self.setCentralWidget(self.GUI)
self.setWindowIcon(QtGui.QIcon('mot.png'))
self.init_UI()
def init_UI(self):
"----Making the main menu bars and editing--------"
bar = self.menuBar()
file = bar.addMenu('File')
exit_action = QAction(QIcon('exit.png'),'Exit',self)
exit_action.setShortcut('Ctrl+Q')
exit_action.triggered.connect(self.quit_trigger)
file.addAction(exit_action)
"------------------------------------------------"
self.setWindowTitle('MOT LOGIN')
self.show()
def quit_trigger(self):
"""
quit_trigger() function desciption!
Inputs: none
Outputs: none
Description: none
"""
choice = QMessageBox.question(self,'Exit Prorgam',"Are you sure you want to quit?",QMessageBox.Yes|QMessageBox.No)
if choice == QMessageBox.Yes:
sys.exit()
else:
pass
class Options_Setup(QWidget):
def __init__(self):
super().__init__()
self.make_booking = QPushButton()
self.remove_booking = QPushButton()
self.edit_booking = QPushButton()
self.search_booking = QPushButton()
self.add_users = QPushButton()
self.make_booking.setText("Make Booking!")
self.remove_booking.setText("Remove Booking!")
self.edit_booking.setText("Edit Booking!")
self.search_booking.setText("Search For Booking!")
self.add_users.setText("Add Repeat Customer")
self.init_UI()
def init_UI(self):
y = QVBoxLayout()
self.make_booking.clicked.connect(self.make_appointment)
self.remove_booking.clicked.connect(self.remove_appointment)
self.search_booking.clicked.connect(self.find_booking)
self.add_users.clicked.connect(self.add_repeat)
x1 = QHBoxLayout()
x1.addWidget(self.make_booking)
x1.addWidget(self.remove_booking)
y.addLayout(x1)
x2 = QHBoxLayout()
x2.addWidget(self.edit_booking)
x2.addWidget(self.search_booking)
y.addLayout(x2)
x3 = QHBoxLayout()
x3.addWidget(self.add_users)
y.addLayout(x3)
self.setLayout(y)
self.show()
def find_booking(self):
Options_Page.hide()
Finding_Booking.show()
def make_appointment(self):
Options_Page.hide()
Making_Booking.show()
def remove_appointment(self):
Options_Page.hide()
Removing_Booking.show()
def add_repeat(self):
Options_Page.hide()
Add_User.show()
class Options(QMainWindow):
def __init__(self):
super().__init__()
self.GUI = Options_Setup()
self.setCentralWidget(self.GUI)
self.setWindowIcon(QtGui.QIcon('mot.png'))
self.setWindowTitle("Options Page")
self.init_UI()
def init_UI(self):
"----Making the main menu bars and editing--------"
bar = self.menuBar()
file = bar.addMenu('File')
exit_action = QAction(QIcon('exit.png'),'Exit',self)
exit_action.setShortcut('Ctrl+Q')
exit_action.triggered.connect(self.quit_trigger)
file.addAction(exit_action)
"------------------------------------------------"
self.show()
def quit_trigger(self):
choice = QMessageBox.question(self,'Exit Prorgam',"Are you sure you want to quit?",QMessageBox.Yes|QMessageBox.No)
if choice == QMessageBox.Yes:
sys.exit()
else:
pass
Login_Page = Login()