Python login form with PyQt - User authentication
Write a Python program to create a login form that accepts username and password and validates them. Use the PyQt5 module.
From doc.qt.io:
QApplication Class: The QApplication class manages the GUI application's control flow and main settings.
QMainWindow Class: The QMainWindow class provides a main application window.
QWidget Class: The QWidget class is the base class of all user interface objects
QFormLayout Class: The QFormLayout class manages forms of input widgets and their associated labels
QLabel Class: The QLabel widget provides a text or image display.
QLineEdit Class: The QLineEdit widget is a one-line text editor.
QPushButton Class: The QPushButton widget provides a command button.
QMessageBox Class: The QMessageBox class provides a modal dialog for informing the user or for asking the user a question and receiving an answer.
Sample Solution:
Python Code:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QFormLayout, QLabel, QLineEdit, QPushButton, QMessageBox
class LoginFormApp(QMainWindow):
def __init__(self):
super().__init__()
# Set the window properties (title and initial size)
self.setWindowTitle("Login Form")
self.setGeometry(100, 100, 300, 150) # (x, y, width, height)
# Create a central widget for the main window
central_widget = QWidget()
self.setCentralWidget(central_widget)
# Create a QFormLayout to arrange the widgets
form_layout = QFormLayout()
# Create QLabel and QLineEdit widgets for username
username_label = QLabel("Username:")
self.username_field = QLineEdit()
# Create QLabel and QLineEdit widgets for password
password_label = QLabel("Password:")
self.password_field = QLineEdit()
self.password_field.setEchoMode(QLineEdit.Password)
# Create a QPushButton for login
login_button = QPushButton("Login")
login_button.clicked.connect(self.login)
# Add widgets to the form layout
form_layout.addRow(username_label, self.username_field)
form_layout.addRow(password_label, self.password_field)
form_layout.addRow(login_button)
# Set the layout for the central widget
central_widget.setLayout(form_layout)
def login(self):
# Retrieve the username and password entered by the user
username = self.username_field.text()
password = self.password_field.text()
# Check if the username and password are valid (for demonstration purposes)
if username == "admin" and password == "pass123$":
QMessageBox.information(self, "Login Successful", "Welcome, " + username + "!")
else:
QMessageBox.warning(self, "Login Failed", "Invalid username or password. Please try again.")
def main():
app = QApplication(sys.argv)
window = LoginFormApp()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Explanation:
In the exercise above -
- Import the necessary modules.
- Create a "QMainWindow" named "LoginFormApp" with a central widget.
- Set the window's title and initial size.
- Create a "QFormLayout" named form_layout to arrange the widgets neatly.
- Create a 'QLabel' and 'QLineEdit' widgets for username and password input fields. We also created a "QPushButton" for login.
- The password field is set to echo mode QLineEdit.Password to hide a password.
- Connect the login method to the "Login" button's click event, which handles the login process.
- In the login method, we retrieve the user's username and password and validate them. For demonstration purposes, we use hardcoded credentials.
- If the credentials are valid, a success message is displayed using 'QMessageBox.information'. Otherwise, an error message is displayed using 'QMessageBox.warning'.
- In the main function, we create the PyQt application, create an instance of the "LoginFormApp" class, show the window, and run the application's event loop.
Output:
Flowchart:
Python Code Editor:
Previous: Temperature converter.
Next: Button grid.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics