상세 컨텐츠

본문 제목

[Python] PyQt로 UI 출력하기

[기록] Programming

by brightwing1218 2020. 7. 22. 20:48

본문

결과물

  • PushButton을 누르면, textEdit 박스에 Hello World!가 개행되면서 출력.

 

 

코드 원문

import sys 
from PyQt5.QtWidgets import * 
from PyQt5 import uic 

form_class = uic.loadUiType("untitled.ui")[0]


class MyWindow(QDialog, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        
        self.brightwing.clicked.connect(self.btn_clicked)

    def btn_clicked(self):
        self.textEdit.append("Hello World!")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWindow = MyWindow()
    myWindow.show()
    app.exec_()

 

코드 해설

더보기

 

import sys #sys 모듈은 파이썬 인터프리터가 제공하는 시스템 특화된 함수나 변수를 제공. 밑에서 쓰이지만, sys.argv는 이를 활용한 것.
from PyQt5.QtWidgets import * #PyQt 라이브러리의 QyWidgets에 속한 모든 모듈을 불러온다.
from PyQt5 import uic #PyQt 라이브러리의 uic모듈을 가져온다. uic모듈은 UI Type을 설정하는 듯.

#uic모듈의 loadUiType은, 커스텀 ui를 지정할 수 있게 해 준다. 뒤의 리스트 0번은 뭘 의미하는 걸까.
#경로 지정을 따로 안했으므로, 스크립트와 같은 폴더 내에 ui 파일이 위치해야 제대로 동작함.
form_class = uic.loadUiType("untitled.ui")[0]


class MyWindow(QDialog, form_class): #Class에 괄호가 있는 것은, 상속받는다는 의미
    def __init__(self): #__init__은 초기화를 담당하는 메서드로 고정됨. 클래스 객체가 만들어질 때 자동 호출되어 그 객체가 갖게 될 여러 성질을 정해줌.

        #이 두개는 __init__ 시 세트로 딸려다니는 것 같다.
        # Super는 자식 클래스에서 부모 클래스의 내용을 사용할 때 붙여줌.
        # setupUi는 form_class에 정의된 메서드로, QtDesigner에서 만든 클래스들을 초기화
        super().__init__()
        self.setupUi(self)

        # brightwing이라는 ui 이름을 가진 항목이 클릭되면, 동일한 클래스 내 btn_clicked 메서드를 실행시킨다.
        self.brightwing.clicked.connect(self.btn_clicked)

    def btn_clicked(self):
        #textEdit이라는 ui 항목은 QTextEdit 모듈을 활용해서 글자를 넣고 빼고 해 줄 수 있다.
        #setText는 RichText 형식의 글을 입력해주지만, 딱 한 줄 밖에 입력이 안 되어서 그냥 여러 줄 입력 가능한 append를 사용함.
        self.textEdit.append("Hello World!")

if __name__ == "__main__":
    # QApplication은 기본적으로 매개변수를 컴퓨터에 실행하도록 만든다.
    # sys.argv는 해당 파일의 절대경로를 보여준다. print(sys.argv)로 확인할 수 있음.
    app = QApplication(sys.argv)
    myWindow = MyWindow() #MyWindow 객체 생성
    myWindow.show() #myWindow를 보여준다.
    app.exec_() #계속 실행을 유지하게 해 줌. 이 줄이 없으면 프로그램이 켜진 상태를 유지 못한다.

미해결

  • Super()가 부모 클래스의 내용을 사용할 때 붙여주는 것이라던데,
    상속 받으면 원래 부모 클래스 꺼 사용 가능한 것 아닌가?

관련글 더보기

댓글 영역