1.UI 파일 생성
import sys
import os
import re
from PySide6 import QtUiTools, QtGui
from PySide6.QtWidgets import QApplication, QMainWindow
loader = QtUiTools.QUiLoader()
class MainView(QMainWindow):
def __init__(self):
super().__init__()
self.setupUI()
def setupUI(self):
global UI_MAIN
UI_MAIN = loader.load(resource_path("btnTest.ui"))
# 이름 라인에디트를 입력했을때 이벤트
UI_MAIN.lineEdit_name.textChanged.connect(checkName)
# 나이 라인에디트를 입력했을 이벤트
UI_MAIN.lineEdit_age.textChanged.connect(checkAge)
# Click 버튼을 클릭했을때
UI_MAIN.pushButton_click.clicked.connect(getResult)
self.setCentralWidget(UI_MAIN)
self.setWindowTitle("BUTTON_TEST")
self.setWindowIcon(QtGui.QPixmap(resource_path("ani.jpg")))
self.resize(500, 300)
self.show()
# 라인 에디터의 내용을 가져와서 결과라벨에 출력
def getResult():
user_name = UI_MAIN.lineEdit_name.text()
user_age = UI_MAIN.lineEdit_age.text()
result = user_name + "님의 나이는 " + user_age + "살입니다."
UI_MAIN.label_result.setText(result)
# 이름 라인에디트의 글자만 입력하게 체크하는 함수
def checkName(data):
name = data if data.isalpha() else data[:-1]
UI_MAIN.lineEdit_name.setText(name)
# 나이 라인 에디트의 숫자만 입력하게 체크하는 함수
def checkAge(data):
# 매개변수 input_age가 숫자인 경우 age 변수에 대입, 숫자가 아닌 경우 입력된 문자를 제거
try:
int(data)
age = data
except:
# 변경시마다 발생하는 이벤트이기에, 숫자 외에 다른 문자가나 기호가 입력될시 실행되는 부분
age = data[:-1]
UI_MAIN.lineEdit_age.setText(age)
# 파일경로
# pyinstaller로 원파일로 압축할때 경로 필요함
def resource_path(rel_path):
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, rel_path)
return os.path.join(os.path.abspath("."), rel_path)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainView()
# main.show()
sys.exit(app.exec())
def checkName(data):
# 정규 표현식을 사용해서 한글과 영어만 들어오게
# \uAC00-\uD7A3 : 한글, a-zA-Z: 영어 대소문자
name = re.sub(r"[^\uAC00-\uD7A3a-zA-Z\s]", "", data)
UI_MAIN.lineEdit_name.setText(name)
def checkAge(data):
age = re.sub(r"[^0-9]", "", data)
UI_MAIN.lineEdit_age.setText(age)
def checkName(data):
check(data, "name")
def checkAge(data):
check(data, "age")
def check(data, types):
if types == "name":
name = re.sub(r"[^\uAC00-\uD7A3a-zA-Z\s]", "", data)
UI_MAIN.lineEdit_name.setText(name)
else:
age = re.sub(r"[^0-9]", "", data)
UI_MAIN.lineEdit_age.setText(age)
# 위의 코드부분도 변경
# 이름 라인에디트를 입력했을때 이벤트
UI_MAIN.lineEdit_name.textChanged.connect(check("name"))
# 나이 라인에디트를 입력했을 이벤트
UI_MAIN.lineEdit_age.textChanged.connect(check("age"))
def check(send_type):
def check_type(data):
if send_type == "name":
chk_name = re.sub(r"[^\uAC00-\uD7A3a-zA-Z\s]", "", data)
UI_MAIN.lineEdit_name.setText(chk_name)
else:
chk_age = re.sub(r"[^0-9]", "", data)
UI_MAIN.lineEdit_age.setText(chk_age)
return check_type