pyside2 파이썬클래스
파이썬클래스 class0.py=====================
import sys
from PySide2.QtWidgets import QApplication, QWidget,\
QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout, QLabel
class Form(QWidget):
def __init__(self):
super(Form, self).__init__()
self.lbl = QLabel("label 예제")
self.lbl.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
form = Form()
# form.show()
sys.exit(app.exec_())
# pyinstaller -w -F 파일이름.py
기본틀=========================
import sys
from PySide2.QtWidgets import QApplication, QWidget
class Form(QWidget):
def __init__(self):
super(Form, self).__init__() # 클래스이름
# app = QApplication([])
app = QApplication(sys.argv)
form = Form() # 클래스이름
form.show()
sys.exit(app.exec_()) # 메인 루프
# pyinstaller -w -F 파일이름.py
# ctrl + enter 다음 줄
# ctrl + (fn) F5 코드 실행
# ctrl + shift + k 현재 행 삭제
# ctrl + / 현재 행 주석
# alt + ↑ 코드 이동
# alt + shift + ↓ 현재 행 복사
파이썬클래스 class00.py=====================
from PySide2.QtWidgets import QApplication, QWidget, QLabel,QPushButton
import sys
class Form(QLabel):
def __init__(self):
super(Form, self).__init__()
self.setupUI()
def setupUI(self):
self.setGeometry(50,100,800,600)
self.btn=QPushButton("Welcome to Python Class", self)
self.btn.move(100,100)
self.btn.clicked.connect(self.prt_hello)
def prt_hello(self):
print(self.btn.text())
if __name__ == '__main__':
app = QApplication(sys.argv)
form = Form()
form.show()
sys.exit(app.exec_())
# pyinstaller -w -F 파일이름.py
# ctrl + enter 다음 줄
# ctrl + (fn) F5 코드 실행
# ctrl + shift + k 현재 행 삭제
# ctrl + / 현재 행 주석
# alt + ↑ 코드 이동
# alt + shift + ↓ 현재 행 복사
파이썬클래스 class01.py=====================
import sys
from PySide2.QtWidgets import QApplication, QWidget,\
QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout, QLabel
class Form(QLabel):
def __init__(self):
super(Form, self).__init__()
self.setupUI()
def setupUI(self):
self.setWindowTitle("BOX Layout")
self.vb = QVBoxLayout()
self.setLayout(self.vb)
self.hbTop = QHBoxLayout()
self.hbMid = QHBoxLayout()
self.hbBot = QHBoxLayout()
self.vb.addLayout(self.hbTop)
self.vb.addLayout(self.hbMid)
self.vb.addStretch()
self.vb.addLayout(self.hbBot)
self.lbl = QLabel("박스 레이아웃 예제")
self.ln = QLineEdit()
self.btn1 = QPushButton("출력")
self.btn2 = QPushButton("지우기")
self.btn3 = QPushButton("출력하고 지우기")
self.vb.addWidget(self.lbl)
self.hbTop.addWidget(self.lbl)
self.hbMid.addWidget(self.ln)
self.hbMid.addWidget(self.btn1)
self.hbBot.addWidget(self.btn2)
self.hbBot.addStretch()
self.hbBot.addWidget(self.btn3)
self.btn1.clicked.connect(self.prt_line)
self.btn2.clicked.connect(self.del_line)
self.btn3.clicked.connect(self.prt_del)
def prt_line(self):
print(self.ln.text())
def del_line(self):
self.ln.clear()
def prt_del(self):
self.prt_line()
self.del_line()
if __name__ == '__main__':
app = QApplication(sys.argv)
form = Form()
form.show()
sys.exit(app.exec_())
# pyinstaller -w -F 파일이름.py
# ctrl + enter 다음 줄
# ctrl + (fn) F5 코드 실행
# ctrl + shift + k 현재 행 삭제
# ctrl + / 현재 행 주석
# alt + ↑ 코드 이동
# alt + shift + ↓ 현재 행 복사
파이썬클래스 class02.py=====================
import sys
from PySide2.QtWidgets import QApplication, QWidget,\
QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout, \
QLabel,QFormLayout,QSpinBox
from PySide2.QtGui import Qt # 레이블의 정렬상태 변경
ids = ["return", "zero", "abc", "python", "class"] # 11
class Form(QLabel):
def __init__(self):
super(Form, self).__init__()
self.setupUI()
def setupUI(self):
self.setWindowTitle("Form Layout")
self.form = QFormLayout() # 1
self.setLayout(self.form) # 1
# self.form.setHorizontalSpacing(20)
self.form.setVerticalSpacing(10) # 8 레이블과 위젯사이 간격
# Qt.AlignRight / Qt.AlignLeft
self.form.setLabelAlignment(Qt.AlignCenter) # 9
self.lnName = QLineEdit() # 2
self.lnPNum2 = QLineEdit() # 3
self.lnId = QLineEdit() # 4
self.btnFindId = QPushButton("중복검사") # 4
self.lblChkId = QLabel("ID 중복검사를 진행해주세요") # 5 우측에 레이블만 추가
self.btnOk = QPushButton("확인") # 6 두영역 모두에 표시
self.spAge = QSpinBox() # 7
self.spAge.setValue(19) # 7
self.lnPNum = QLineEdit() # 7
self.vbId = QHBoxLayout() # 4
self.vbId.addWidget(self.lnId) # 4
self.vbId.addWidget(self.btnFindId) # 4
self.form.addRow("이름: ", self.lnName) # 2
self.form.addRow("ID: ", self.vbId) # 4
self.form.addWidget(self.lblChkId) # 5 우측에 레이블만 추가
self.form.addRow("나이: ", self.spAge) # 7
self.form.addRow("연락처: ", self.lnPNum) # 7
self.form.addRow("보호자연락처: ", self.lnPNum2) # 3
self.form.addRow(self.btnOk) # 6 두영역 모두에 표시
self.spAge.valueChanged[int].connect(self.chk_age) # 10
self.btnFindId.clicked.connect(self.chk_id) # 11
self.btnOk.clicked.connect(self.chk_ok) # 12
def chk_age(self, v): # 10
if v <20: # 10
self.lnPNum2.setEnabled(True) # 10
else: # 10
self.lnPNum2.setEnabled(False) # 10
def chk_id(self): # 11
if len(self.lnId.text())<2: # 11
self.lblChkId.setText("2글자 이상 입력하세요") # 11
else: # 11
if ids.count(self.lnId.text())== 1: # 11
self.lblChkId.setText("중복되는 ID가 존재합니다") # 11
else: # 11
self.lblChkId.setText("멋진 ID네요") # 11
def chk_ok(self): # 12
str = "" # 12
if self.lnName.text() == "": # 12
str += "이름 " # 12
if self.lblChkId.text() != "멋진 ID네요!": # 12
str += "ID " # 12
if len(self.lnPNum.text()) < 13: # 12
str += "연락처 " # 12
if str != "": # 12
self.btnOk.setText(str + "을(를) 확인하세요") # 12
else: # 12
self.btnOk.setText("처리되었습니다") # 12
if __name__ == '__main__':
app = QApplication(sys.argv)
form = Form()
form.show()
sys.exit(app.exec_())
# pyinstaller -w -F 파일이름.py
# ctrl + enter 다음 줄
# ctrl + (fn) F5 코드 실행
# ctrl + shift + k 현재 행 삭제
# ctrl + / 현재 행 주석
# alt + ↑ 코드 이동
# alt + shift + ↓ 현재 행 복사
파이썬클래스 class03.py=====================
import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import Qt
class Form(QLabel):
def __init__(self):
super(Form, self).__init__()
self.setupUI()
def setupUI(self):
self.setWindowTitle("Grid Layout")
self.gl = QGridLayout()
self.vb = QVBoxLayout()
self.setLayout(self.vb)
self.ln = QLineEdit()
self.ln.setAlignment(Qt.AlignRight)
self.ln.setStyleSheet("font-size: 24px;"
"font-weight: bold;")
self.vb.addWidget(self.ln)
self.vb.addLayout(self.gl)
self.value = [
[QPushButton('±'), [0, 0]],
[QPushButton('÷'), [0, 1]],
[QPushButton('×'), [0, 2]],
[QPushButton('-'), [0, 3]],
[QPushButton('1'), [1, 0]],
[QPushButton('2'), [1, 1]],
[QPushButton('3'), [1, 2]],
[QPushButton('+'), [1, 3, 2, 1]],
[QPushButton('4'), [2, 0]],
[QPushButton('5'), [2, 1]],
[QPushButton('6'), [2, 2]],
[QPushButton('7'), [3, 0]],
[QPushButton('8'), [3, 1]],
[QPushButton('9'), [3, 2]],
[QPushButton('='), [3, 3, 2, 1]],
[QPushButton('0'), [4, 0, 1, 2]],
[QPushButton('.'), [4, 2]],
]
for i, p in self.value:
if len(p) > 2:
i.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.gl.addWidget(i, p[0], p[1], p[2], p[3])
else:
self.gl.addWidget(i, p[0], p[1])
i.setStyleSheet("font-size: 20px;"
"font-weight: bold;")
i.clicked.connect(self.clk)
def clk(self):
self.ln.setText(self.ln.text() + self.sender().text())
if __name__ == '__main__':
app = QApplication(sys.argv)
form = Form()
form.show()
sys.exit(app.exec_())
# pyinstaller -w -F 파일이름.py
# ctrl + enter 다음 줄
# ctrl + (fn) F5 코드 실행
# ctrl + shift + k 현재 행 삭제
# ctrl + / 현재 행 주석
# alt + ↑ 코드 이동
# alt + shift + ↓ 현재 행 복사
파이썬클래스 class04.py=====================
import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import Qt
class Form(QLabel):
def __init__(self):
super(Form, self).__init__()
self.setupUI()
def setupUI(self):
self.setWindowTitle("stacked Layout")
self.wgtA = QWidget()
self.wgtA_vl = QVBoxLayout()
self.btnA = QPushButton("A")
self.btnB = QPushButton("B")
self.btnC = QPushButton("C")
self.wgtA_vl.addWidget(self.btnA)
self.wgtA_vl.addWidget(self.btnB)
self.wgtA_vl.addWidget(self.btnC)
self.wgtA.setLayout(self.wgtA_vl)
self.wgt1 = QWidget()
self.wgt1_vl = QVBoxLayout()
self.btn1 = QPushButton("1")
self.btn2 = QPushButton("2")
self.btn3 = QPushButton("3")
self.wgt1_vl.addWidget(self.btn1)
self.wgt1_vl.addWidget(self.btn2)
self.wgt1_vl.addWidget(self.btn3)
self.wgt1.setLayout(self.wgt1_vl)
self.wgt가 = QWidget()
self.wgt가_vl = QVBoxLayout()
self.btn가 = QPushButton("가")
self.btn나 = QPushButton("나")
self.btn다 = QPushButton("다")
self.wgt가_vl.addWidget(self.btn가)
self.wgt가_vl.addWidget(self.btn나)
self.wgt가_vl.addWidget(self.btn다)
self.wgt가.setLayout(self.wgt가_vl)
self.layout = QStackedLayout()
self.layout.addWidget(self.wgtA)
self.layout.addWidget(self.wgt1)
self.layout.addWidget(self.wgt가)
self.setLayout(self.layout)
self.btnA.clicked.connect(lambda s=None, i=0: self.set_stack_index(s, i))
self.btnB.clicked.connect(lambda s=None, i=1: self.set_stack_index(s, i))
self.btnC.clicked.connect(lambda s=None, i=2: self.set_stack_index(s, i))
self.btn1.clicked.connect(lambda s=None, i=0: self.set_stack_index(s, i))
self.btn2.clicked.connect(lambda s=None, i=1: self.set_stack_index(s, i))
self.btn3.clicked.connect(lambda s=None, i=2: self.set_stack_index(s, i))
self.btn가.clicked.connect(lambda s=None, i=0: self.set_stack_index(s, i))
self.btn나.clicked.connect(lambda s=None, i=1: self.set_stack_index(s, i))
self.btn다.clicked.connect(lambda s=None, i=2: self.set_stack_index(s, i))
def set_stack_index(self, s, i):
self.layout.setCurrentIndex(i)
if __name__ == '__main__':
app = QApplication(sys.argv)
form = Form()
form.show()
sys.exit(app.exec_())
# pyinstaller -w -F 파일이름.py
# ctrl + enter 다음 줄
# ctrl + (fn) F5 코드 실행
# ctrl + shift + k 현재 행 삭제
# ctrl + / 현재 행 주석
# alt + ↑ 코드 이동
# alt + shift + ↓ 현재 행 복사
파이썬클래스 class05.py=====================
www.youtube.com/watch?v=BUgXxZC35Jk
import sys
from PySide2.QtWidgets import QApplication, QWidget, \
QVBoxLayout, QHBoxLayout, QPushButton, QGridLayout, \
QSizePolicy, QLabel
class Btn(QPushButton):
def __init__(self, caption):
super(Btn, self).__init__()
self.setText(caption)
self.setSizePolicy(QSizePolicy.Expanding,
QSizePolicy.Expanding)
self.setFixedSize(150, 150)
self.setStyleSheet("font-size: 20px;"
"font-weight: bold;")
class Form(QLabel):
def __init__(self):
super(Form, self).__init__()
self.setupUI()
def setupUI(self):
self.setWindowTitle("stacked Layout")
self.resize(700, 500)
self.vb = QVBoxLayout()
self.hbMid = QHBoxLayout()
self.vb.addStretch()
self.vb.addLayout(self.hbMid)
self.vb.addStretch()
self.gl = QGridLayout()
self.hbMid.addStretch()
self.hbMid.addLayout(self.gl)
self.hbMid.addStretch()
self.btnPressed = Btn("Pressed")
self.btnReleased = Btn("Released")
self.btnClicked = Btn("Clicked")
self.btnToggled = Btn("Toggled")
self.btnToggled.setCheckable(True)
self.btnReset = Btn("reset")
self.btnLambda = Btn("Lambda")
self.gl.addWidget(self.btnPressed, 0, 0)
self.gl.addWidget(self.btnReleased, 0, 1)
self.gl.addWidget(self.btnLambda, 0, 2)
self.gl.addWidget(self.btnClicked, 1, 0)
self.gl.addWidget(self.btnToggled, 1, 1)
self.gl.addWidget(self.btnReset, 1, 2)
self.btnPressed.pressed.connect(self.sendText)
self.btnReleased.released.connect(self.sendText)
self.btnClicked.clicked.connect(self.sendText)
self.btnToggled.toggled.connect(self.sendText)
self.btnReset.clicked.connect(self.reset)
self.btnLambda.pressed.connect(
lambda: self.test_lambda(self.btnReset.text()))
self.setLayout(self.vb)
self.cnt = 0
def clkCnt(self):
self.cnt += 1
self.btnReset.setText(str(self.cnt))
def sendText(self):
self.clkCnt()
print(self.sender().text())
def test_lambda(self, i):
self.clkCnt()
print("입력: {}".format(i))
def reset(self):
self.cnt = 0
self.btnReset.setText(str(self.cnt))
if __name__ == '__main__':
app = QApplication(sys.argv)
form = Form()
form.show()
sys.exit(app.exec_())
# pyinstaller -w -F 파일이름.py
# ctrl + enter 다음 줄
# ctrl + (fn) F5 코드 실행
# ctrl + shift + k 현재 행 삭제
# ctrl + / 현재 행 주석
# alt + ↑ 코드 이동
# alt + shift + ↓ 현재 행 복사
컴파일=========================
pyside2-rcc -o Logon_rc.py -py3 Logon.qrc 안됨
pyside2-rcc Logon.qrc > Logon_rc.py 이렇게 해야 됨
pyside2-uic ui_logon.ui > ui_logon.py