PySide에 대해서.

행동하는 개발자·2022년 9월 6일
0

PySide, PyQt

목록 보기
2/20

PySide2

python에서 GUI를 사용할 때 python 바인딩인 PyQt를 주로 사용한다.

  • 예를 들어 C언어에서 int abc = 10; 라고 변수 abc를 선언할 때, 식별자가 'abc'라는 변수의 속성을 정수라는 자료형 속성과 연결하고, 자료값으로는 10이 할당되는 각각의 과정에 바인딩 개념이 적용되는 것이다.

  • 위젯은 사용자 인터페이스를 구성하는 가장 기본적인 부품 역할

sys.argv란?

args = sys.argv[1:]

for i in args:
	print(i)

위의 예는 입력받은 인수들을 for문을 이용해 차례대로 하나씩 출력하는 것. sys 모듈의 argv는 명령창에서 입력한 인수들을 의미한다. 띄어쓰기를 기준으로 차례로 argv의 요소가 된다.

PS 경로>python 파일이름 입력하고싶은인수

순으로 입력하면 된다.

기본동작원리

QApplication

프로그램을 만들기 위한 하나의 큰 바구니. 이 프로그램은 생성만하고 바로 꺼지게 되는데, 내가 어떠한 명령을 취할 때까지 대기상태에 두기 위해 app.exec_()을 사용한다.

app 이 종료되면 0을 return하고 sys.exit(0)을 받으면 python은 루프에서 빠져나와 정상종료를 하게 된다.

QtWidgets

Qt 프로그램을 만드는 것은 위젯을 만들고 조합하는 작업.

QLabel 과 QPushButton 을 이용하여 메시지나 버튼을 만들 수 있다.

버튼

입력 표시 위젯

컨테이너 위젯

아이템뷰 위젯

Logon1 예제

<RCC>
  <qresource prefix="/">
    <file>images/ok.png</file>
  </qresource>
</RCC>

라고 Logon.qrc란 파일을 만들고

> pyside2-rcc -o Logon_rc.py Logon.qrc

를 실행하게 되면 경로에 Logon_rc.py가 만들어 진다.

그리고 Logon1.py를 만들어

import sys
from PySide2.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit, QGridLayout, 
                               QPushButton, QHBoxLayout, QVBoxLayout)
from PySide2.QtGui import QIcon
from PySide2.QtCore import Qt
# from PySide2.QtCore import SIGNAL, SLOT, QObject

import Logon_rc  

if __name__ == '__main__':

    app = QApplication(sys.argv)
    logon = QWidget()

    labelId = QLabel('&Id :')
    labelId.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
    labelPW = QLabel('&Password:')

    lineEditId = QLineEdit()
    lineEditPW = QLineEdit()
    lineEditPW.setEchoMode(QLineEdit.Password)

    labelId.setBuddy(lineEditId)
    labelPW.setBuddy(lineEditPW)

    buttonOk = QPushButton("&Ok")
    buttonOk.setIcon(QIcon(":/checked.png"))

    layout1 = QGridLayout()
    layout1.addWidget(labelId,0,0)
    layout1.addWidget(lineEditId,0,1);
    layout1.addWidget(labelPW,1,0)
    layout1.addWidget(lineEditPW,1,1)

    layout2 = QHBoxLayout()
    layout2.addStretch()
    layout2.addWidget(buttonOk)

    mainLayout = QVBoxLayout()
    mainLayout.addLayout(layout1)
    mainLayout.addLayout(layout2)

    logon.setLayout(mainLayout)
    logon.setWindowTitle('Log on')
    logon.setWindowIcon(QIcon(":/images/checked.png"))  # 

    buttonOk.clicked.connect(app.quit)

    logon.show()
    app.exec_()   
profile
끊임없이 뭔가를 남기는 사람

0개의 댓글