컴퓨터/Python

pyside2 파이썬클래스

풍경소리^^ 2020. 10. 29. 04:30

파이썬클래스  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