#!/usr/bin/env python3
import sys
from PySide6.QtCore import QSettings
from PySide6.QtCore import QCoreApplication, QMetaObject
from PySide6.QtWidgets import QFrame, QGridLayout, QLabel, \
QLineEdit, QPushButton, QSizePolicy, QWidget
from PySide6.QtWidgets import QDialog
from PySide6.QtCore import Qt
# Ui
class Ui_Dialog(object):
def setupUi(self, Dialog):
if not Dialog.objectName():
Dialog.setObjectName(u"Dialog")
Dialog.resize(290, 200)
self.gridLayout = QGridLayout(Dialog)
self.gridLayout.setObjectName(u"gridLayout")
self.gridWidget = QWidget(Dialog)
self.gridWidget.setObjectName(u"gridWidget")
self.gridLayout_2 = QGridLayout(self.gridWidget)
self.gridLayout_2.setObjectName(u"gridLayout_2")
self.id_lineEdit = QLineEdit(self.gridWidget)
self.id_lineEdit.setObjectName(u"id_lineEdit")
self.id_lineEdit.setStyleSheet(u"background-color: #ffffff;")
self.gridLayout_2.addWidget(self.id_lineEdit, 2, 0, 1, 1)
self.alert_label = QLabel(self.gridWidget)
self.alert_label.setObjectName(u"alert_label")
self.alert_label.setEnabled(True)
sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.alert_label.sizePolicy().hasHeightForWidth())
self.alert_label.setSizePolicy(sizePolicy)
self.alert_label.setStyleSheet(u"color:#ff0000;")
self.alert_label.setFrameShadow(QFrame.Plain)
self.alert_label.setTextFormat(Qt.AutoText)
self.alert_label.setAlignment(Qt.AlignCenter)
self.gridLayout_2.addWidget(self.alert_label, 5, 0, 1, 1)
self.pw_lineEdit = QLineEdit(self.gridWidget)
self.pw_lineEdit.setObjectName(u"pw_lineEdit")
self.pw_lineEdit.setStyleSheet(u"background-color: #ffffff;")
self.pw_lineEdit.setEchoMode(QLineEdit.Password)
self.gridLayout_2.addWidget(self.pw_lineEdit, 3, 0, 1, 1)
self.gridLayout.addWidget(self.gridWidget, 0, 0, 1, 1)
self.login_button = QPushButton(Dialog)
self.login_button.setObjectName(u"login_button")
self.gridLayout.addWidget(self.login_button, 1, 0, 1, 1)
self.retranslateUi(Dialog)
QMetaObject.connectSlotsByName(Dialog)
# setupUi
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Login", None))
self.id_lineEdit.setPlaceholderText(QCoreApplication.translate("Dialog", u"ID", None))
self.alert_label.setText("")
self.pw_lineEdit.setPlaceholderText(QCoreApplication.translate("Dialog", u"Password", None))
self.login_button.setText(QCoreApplication.translate("Dialog", u"Login", None))
# retranslateUi
# Setting value
class MySetting:
settings = QSettings('Setting', 'hi~')
defaults = {
'login_id': 'admin',
'login_pw': '1234'
}
@classmethod
def set(cls, key, value):
cls.settings.setValue(key, value)
@classmethod
def get(cls, key):
return cls.settings.value(
key,
cls.defaults[key],
type(cls.defaults[key])
)
@classmethod
def restore_defaults(cls):
for key, value in cls.defaults.items():
cls.set(key, value)
# Main Code
class LoginWindow(QDialog, Ui_Dialog):
def __init__(self):
super(LoginWindow, self).__init__()
self.setupUi(self)
self.setWindowFlag(Qt.WindowContextHelpButtonHint, False)
self.login_button.clicked.connect(self.login_click)
self.login_button.setShortcut('Return')
self.id = MySetting.get('login_id')
self.pw = MySetting.get('login_pw')
self.flag = 0
def login_click(self):
if self.id_lineEdit.text() == self.id and self.pw_lineEdit.text() == self.pw:
self.close()
else:
self.alert_label.setText('ID or P/W is not correct')
self.flag = self.flag + 1
if self.flag >= 5:
self.alert_label.setText('P/W = 1 + 2 + 3 + 4')
if self.flag > 6:
self.close()
sys.exit()
def keyPressEvent(self, event):
if event.key() == Qt.Key_Escape:
pass
if __name__ == '__main__':
from PySide6.QtWidgets import QApplication
app = QApplication(sys.argv)
window = LoginWindow()
window.show()
sys.exit(app.exec())
QSetting으로 간단한 예제 프로그램을 작성해 보았다.
QSetting 안에 있는 login_id, login_pw 값은 사용자가 수정하지 않는 이상 바뀌지 않는다.
또한 계속 저장되는 특성을 가지고 있어 데이터 관리에 용이하다.
테스트 프로그램으로 로그인 창을 만들어 보았다.
다음에는 Setting 값을 수정할 수 있는 프로그램을 만들어 볼 예정
반응형
'Development > GUI' 카테고리의 다른 글
Grid Layout 위젯 드래그&드롭 이벤트 생성하기 (0) | 2023.07.12 |
---|---|
QSettings 로그인 알고리즘 (2) | 2023.02.21 |
PyQt5 이미지 비율 맞추기 (0) | 2022.06.20 |
PyQt5 버튼 애니메이션 (0) | 2022.06.15 |
PyQt5 종료 Fade out 이벤트 (0) | 2021.07.08 |