Python GUI 만들기

python을 이용하여 어플리케이션을 만들기 위해 PyQT5 라이브러리를 사용하였다.
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtGui import QIcon, QFont


class MyApp(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 툴팁의 폰트, 크기 설정
        QToolTip.setFont(QFont('SansSerif', 10))

        # 버튼 만들기
        btn_quit = QPushButton('Quit', self)
        test = QPushButton('test',self)
        # 버튼의 툴팁 설정
        btn_quit.setToolTip('<b>창을 닫아주는 버튼</b> widget')
        # # 버튼의 절대적 위치 지정
        # btn_quit.move(50, 50)
        # 버튼이 적절한 크기로 유지되도록 설정: (sizeHint())
        btn_quit.resize(btn_quit.sizeHint())
        btn_quit.clicked.connect(QCoreApplication.instance().quit)


        # 수평 박스를 만들고 버튼이나 빈 공간을 추가한다.
        hbox = QHBoxLayout()
        # 두 버튼 양쪽의 stretch factor가 1로 같기 때문에 이 두 빈 공간의 크기는 창의 크기가 변화해도 항상 같습니다.
        hbox.addStretch(1)
        hbox.addWidget(btn_quit)
        hbox.addWidget(test)
        hbox.addStretch(1)
        # 수직 박스를 만든다 
        # 위에서 만들었던 수평 박스를 수직 박스에 넣는다.
        vbox = QVBoxLayout()
        vbox.addStretch(3)
        vbox.addLayout(hbox)
        vbox.addStretch(1)
        # 최종적으로 수직 박스를 창의 메인 레이아웃으로 설정합니다.
        self.setLayout(vbox)

        #창 제목 
        self.setWindowTitle('My First Application')
        # 창의 아이콘 생성
        self.setWindowIcon(QIcon('web.png'))
        # 창의 위치와 사이즈 설정(x,y,width,height)
        self.setGeometry(300, 300, 300, 200)
        self.center()
        self.show()

    def center(self):
        # 창의 위치와 크기 정보를 가져온다.
        qr = self.frameGeometry()
        # 모니터의 center를 파악
        screen_center = QDesktopWidget().availableGeometry().center()
        # 창의 직사각형 위치를 모니터의 center로 이동
        qr.moveCenter(screen_center)
        # 창을 화면 중심으로 이동했던 직사각형의 위치로 이동시킨다.
        self.move(qr.topLeft())

#'__name__'은 현재 모듈의 이름이 저장되는 내장 변수입니다.
# 만약 'moduleA.py'라는 코드를 import해서 예제 코드를 수행하면 __name__ 은 'moduleA'가 됩니다. 
# 그렇지 않고 코드를 직접 실행한다면 __name__ 은 __main__ 이 됩니다. 
# 따라서 이 한 줄의 코드를 통해 프로그램이 직접 실행되는지 혹은 모듈을 통해 실행되는지를 확인합니다.
if __name__ == '__main__':
    # 어플리케이션 객체를 생성
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())