본문 바로가기
파이썬/파이썬 GUI

진짜 많이 쓰는 파이썬 GUI. PyQt5 모듈

by 남녀칠세부동산! 2024. 4. 3.

1. 파이썬 GUI로 PyQt5 모듈을 가장 많이 사용합니다. 일단 예브게 생겼고 기능이 많거든요.

설치는 이곳에 친절히 설명되어 있습니다.

https://wikidoc.tistory.com/13

 

파이썬 가상 환경 만들기

import sys from PyQt5.QtWidgets import QApplication, QWidget # 외부 라이브러리를 쓰려고 하면 파이썬의 유용한 라이브러리가 참 많거든요. Flask, Math, beautiful soup 등 등. 자체 내장되어 있는 라이브러리가 아니

wikidoc.tistory.com

 

2. PyQt5 모듈 설명이 잘되어 있어요.

https://codetorial.net/pyqt5/index.html

 

PyQt5 Tutorial - 파이썬으로 만드는 나만의 GUI 프로그램 - Codetorial

PDF & 예제 파일 이 튜토리얼의 내용을 오프라인과 모바일에서 더 편리하게 볼 수 있도록 약 280페이지 분량의 pdf ebook으로 제작하였습니다. PyQt5 튜토리얼 - pdf ebook. 온라인 서점을 통해서 구입이

codetorial.net

https://wikidocs.net/book/2165

 

PyQt5 Tutorial - 파이썬으로 만드는 나만의 GUI 프로그램

## 소개 - 한국어로 되어있는 PyQt5 자료가 많지 않아서 아래의 여러 튜토리얼과 강의의 예제를 정리하며 시작했습니다. - **PyQt5의 설치**부터 시작해서, **…

wikidocs.net

 

3. 이제 메인 창을 띄워볼까요?

import sys
from PyQt5.QtWidgets import QApplication, QWidget

class AppTest(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('메인창 테스트')
        self.move(300,300) #메인 창의 위치
        self.resize(400,200) #창의 크기
        self.show()

if __name__=='__main__':
    app = QApplication(sys.argv)
    ex = AppTest()
    sys.exit(app.exec_())

 

__init__는 엔트리 포인트인  __name__=='__main__'과 한 쌍이죠.

아래 사이트에 설명이 잘 나와 있어요.

 

https://wikidocs.net/192016

 

__init__과 self

`__init__`은 파이썬에서 클래스의 생성자(constructor) 메소드입니다. 클래스의 인스턴스를 생성할 때 자동으로 호출되며, 인스턴스가 생성될 때 초기화 작업을 수행하…

wikidocs.net

 

아주 깔끔한 메인 창이 만들어졌습니다.

 

4.  메인 창 하단에 상태바를 표시해보면

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow

class AppTest(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.statusBar().showMessage('하단 상태줄')

        self.setWindowTitle('메인창 테스트')
        self.setGeometry(300,300,400,200)
        # self.move(300,300) #메인 창의 위치
        # self.resize(400,200) #창의 크기
        self.show()

if __name__=='__main__':
    app = QApplication(sys.argv)
    ex = AppTest()
    sys.exit(app.exec_())

 

 

 

5. 버튼 클릭 시 메인 창이 닫히는 걸 만들겠습니다.

import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton

class AppTest(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        btn = QPushButton('버튼',self)
        btn.move(150,100) # 버튼의 위치
        btn.resize(100,50) # 버튼 크기
        btn.clicked.connect(QCoreApplication.instance().quit)
    

        self.setWindowTitle('버튼 테스트')
        self.setWindowIcon(QIcon('penguin-icon.ico'))
        self.move(300,300) #상단에서 300px. 왼쪽에서 300px
        self.resize(400,200) #창의 크기
        self.show()

if __name__=='__main__':
    print(sys.argv)
    app = QApplication(sys.argv)
    ex = AppTest()
    sys.exit(app.exec_())

 

5. 툴팁이라고 풍선 도움말 같은 걸 만들어보죠.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QToolTip
from PyQt5.QtGui import QFont

class App(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        QToolTip.setFont(QFont('맑은고딕', 12))
        self.setToolTip('여긴 배경인데')

        button=QPushButton('버튼', self)
        button.setToolTip('이것은 툴팁이라고 풍선 도움말 같은 거')
        button.move(100,100)
        button.resize(button.sizeHint())

        self.setWindowTitle('툴팁 테스트')
        self.setGeometry(400,400,300,300)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    view = App()
    sys.exit(app.exec_())

 

 

 

6. 버튼 클릭 시 창이 뜨는 것

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QMessageBox, QMainWindow

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        btn=QPushButton('버튼',self)
        btn.move(10,10) #버튼 위치
        self.resize(400,200) #창의 크기
        btn.clicked.connect(self.event1)
        btn.clicked.connect(event2)
        self.show()

    def event1(self):
        eve=QMessageBox(self)
        eve.setText('자네가 나를 눌렀구먼')
        eve.show()

def event2():
    print('버튼 클릭 시 콘솔에 출력하는 내용')

if __name__ =='__main__':
    app=QApplication(sys.argv)
    ex=MyWindow()
    sys.exit(app.exec_())

 

 

비쥬얼 스튜디오 하단에는 이렇게 출력됩니다.

 

 

 

7. 메뉴바를 만들어볼까요.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow,QAction
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QCoreApplication

class AppTest(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        menubar = self.menuBar()
        menu1 = menubar.addMenu("파일")
        menu2 = menubar.addMenu("편집")
        menu3 = menubar.addMenu("선택영역")

        loadFile = QAction('불러오기',self)
        saveFile = QAction('저장하기',self)
        quitApp = QAction('종료하기',self)
        quitApp.setShortcut('Ctrl+Q')#단축키 설정
        quitApp.setStatusTip('하단 도움말')

        #클릭 시 동작 추가
        loadFile.triggered.connect(self.add_open)
        saveFile.triggered.connect(self.add_save)
        quitApp.triggered.connect(QCoreApplication.instance().quit)

        menu1.addAction(loadFile)
        menu1.addAction(saveFile)
        menu1.addAction(quitApp)

        self.statusBar().showMessage('하단 상태줄')
        self.setWindowTitle('메인창 테스트')
        self.setGeometry(300,300,400,200) #메인창의 위치와 크기
        self.show()

    def add_open(self):
        pass

    def add_save(self):
        pass

if __name__=='__main__':
    app = QApplication(sys.argv)
    ex = AppTest()
    sys.exit(app.exec_())

 

 

7. 메뉴에 기능을 넣었습니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QWidget
from PyQt5.QtCore import QCoreApplication

class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        menubar = self.menuBar()
        menu1 = menubar.addMenu('파일')
        menu2 = menubar.addMenu('편집')
        menu3 = menubar.addMenu('선택 영역')

        loadFile = QAction('불러오기', self)
        saveFile = QAction('저장하기',self)
        quitFile = QAction('종료하기',self)

        loadFile.triggered.connect(self.openfile)
        saveFile.triggered.connect(self.savefile)
        quitFile.triggered.connect(QCoreApplication.instance().quit)

        menu1.addAction(loadFile)
        menu1.addAction(saveFile)
        menu1.addAction(quitFile)


        self.setWindowTitle('테스트')
        # self.setWindowIcon('penguin-icon.ico')
        self.move(600,400)
        self.resize(400,300)
        self.show()

    def openfile(self):
        pass

    def savefile(self):
        pass

if __name__ == '__main__':
    app=QApplication(sys.argv)
    view=App()
    sys.exit(app.exec_())

'파이썬 > 파이썬 GUI' 카테고리의 다른 글

로또 번호가 생성되는 윈도우 창 만들기  (0) 2024.04.03
엄청 쉬운 파이썬 GUI  (0) 2024.04.02