[Python GUI] 파이썬에서 비주얼베이직 처럼 개발하기 위한 Qt Designer 툴 다운로드 및 설치(PyQt5 설치 및 pyqt5-tools 설치)
비주얼베이직처럼 버튼, 텍스트필드, 콤보박스 등의 위젯을 끌어다가 사용자 인터페이스를 빠르게 개발할 수 있는 툴이 있습니다. 바로 Qt Designer 라는 툴입니다. Windows 용 및 Mac용으로 제공하고 있습니다. 많은 사람들이 Qt Designer를 파이썬과 함께 사용하고 있어요. Qt Designer와 Python을 연결하는 방법으로 PyQt 바인딩을 사용합니다.
Qt Designer 다운로드
다음 경로에서 다운로드합니다. 윈도우용의 경우 31메가입니다.
build-system.fman.io/qt-designer-download
저는 윈도우용을 다운로드 받았습니다.
설치하기
다운로드 받은 Qt Designer Setup.exe 파일을 클릭하여 설치를 시작합니다. Next 버튼 클릭 > Install 버튼 클릭
실행하기
2개의 버튼이 있는 템플릿을 선택하여봅니다.
단축키 Ctrl+R을 누르거나 상단 메뉴 Form을 클릭 후 Preview…를 클릭하여 실행해볼 수 있습니다.
File메뉴를 누른 후 Save As…메뉴를 클릭하여 다른 이름으로 저장합니다. 확장자는 .ui입니다. 저장한 파일(test_gui.ui)을 메모장으로 열어보니 UI레이아웃이 XML 타입으로 저장되어 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>205</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QPushButton" name="btn_1">
<property name="geometry">
<rect>
<x>70</x>
<y>80</y>
<width>113</width>
<height>32</height>
</rect>
</property>
<property name="text">
<string>Button1</string>
</property>
</widget>
<widget class="QPushButton" name="btn_2">
<property name="geometry">
<rect>
<x>220</x>
<y>80</y>
<width>113</width>
<height>32</height>
</rect>
</property>
<property name="text">
<string>Button2</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>
파이썬 스크립트와 UI를 연동하는 방법
UI를 만들었지만 소스 코드는 없는 상태입니다. 이렇게 만들어진 UI를 파이썬 코드와 연결해주는 작업이 필요합니다. 코드도 함께 작성할 수 있도록 해주지..아 쫌 불편하네요. UI파일과 Python코드를 연결시키는 방법은 2가지가 있습니다.
첫번째 방법은 UI파일을 Python코드로 변환시킨 후 py로 변환시킨 파일에서 코드를 작성하는 방법입니다.
두번째 방법은 UI파일을 Python 코드에서 import하여 개발하는 방법입니다.
첫번째 방법은 개발완료 후 배포시에 사용할 것을 권장합니다. 평상시 개발할 때는 두번째 방법으로 작업을 합니다.
사전 작업으로 파이썬에서 GUI코딩을 위해서 2개의 모듈을 설치해야 합니다.
1. pyqt5 설치하기
명령프롬프트창(cmd)을 열고 pip install pyqt5 명령어를 실행하여 설치합니다.
Microsoft Windows [Version 10.0.19042.685]
(c) 2020 Microsoft Corporation. All rights reserved.
C:Usersilike>pip install pyqt5
Collecting pyqt5
Downloading PyQt5-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl (56.9 MB)
|████████████████████████████████| 56.9 MB 280 kB/s
Collecting PyQt5-sip<13,>=12.8
Downloading PyQt5_sip-12.8.1-cp39-cp39-win_amd64.whl (63 kB)
|████████████████████████████████| 63 kB 508 kB/s
Installing collected packages: PyQt5-sip, pyqt5
Successfully installed PyQt5-sip-12.8.1 pyqt5-5.15.2
C:Usersilike>
2. pyqt5-tools 설치하기
pip install pyqt5-tools 명령어를 실행하여 설치합니다.
C:Usersilike>
C:Usersilike>pip install pyqt5-tools
Collecting pyqt5-tools
Downloading pyqt5_tools-5.15.2.3-py3-none-any.whl (28 kB)
Requirement already satisfied: pyqt5==5.15.2 in c:usersilikeappdatalocalprogramspythonpython39libsite-packages (from pyqt5-tools) (5.15.2)
Requirement already satisfied: PyQt5-sip<13,>=12.8 in c:usersilikeappdatalocalprogramspythonpython39libsite-packages (from pyqt5==5.15.2->pyqt5-tools) (12.8.1)
Collecting pyqt5-plugins<5.15.2.3,>=5.15.2.2
Downloading pyqt5_plugins-5.15.2.2.0.1-cp39-cp39-win_amd64.whl (65 kB)
|████████████████████████████████| 65 kB 4.5 MB/s
Collecting qt5-tools<5.15.2.2,>=5.15.2.1
Downloading qt5_tools-5.15.2.1.0.1-py3-none-any.whl (12 kB)
Collecting click
Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
|████████████████████████████████| 82 kB 483 kB/s
Collecting qt5-applications<5.15.2.3,>=5.15.2.2
Downloading qt5_applications-5.15.2.2.1-py3-none-win_amd64.whl (61.0 MB)
|████████████████████████████████| 61.0 MB 6.4 MB/s
Collecting python-dotenv
Downloading python_dotenv-0.15.0-py2.py3-none-any.whl (18 kB)
Installing collected packages: qt5-applications, click, qt5-tools, python-dotenv, pyqt5-plugins, pyqt5-tools
Successfully installed click-7.1.2 pyqt5-plugins-5.15.2.2.0.1 pyqt5-tools-5.15.2.3 python-dotenv-0.15.0 qt5-applications-5.15.2.2.1 qt5-tools-5.15.2.1.0.1
C:Usersilike>
3. 연동하기
UI파일과 파이썬 스크립트 파일은 같은 폴더에 있어야합니다. 아래 스크립트는 UI와 파이썬 스크립트 연결을 위한 가장 기본적인 스크립트입니다. 루틴이라고 생각하면 될 것 같습니다.
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication
Form, Window = uic.loadUiType("test_gui.ui")
app = QApplication([])
window = Window()
form = Form()
form.setupUi(window)
window.show()
app.exec_()
또는
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
uiclass = uic.loadUiType("test_gui.ui")[0]
print(type(uiclass))
# ui호출용 Class 생성
class TestWindow(QMainWindow, uiclass):
def __init__(self):
super().__init__()
self.setupUi(self)
if __name__ == "__main__":
app = QApplication(sys.argv)
myApp = TestWindow()
myApp.show()
app.exec_()
안타깝게도 AttributeError: ‘TestWindow’ object has no attribute ‘accept’ 오류가 발생합니다. 오류가 발생한 코드의 위치는 __init__메소드 안의 self.setupUi(self) 코드입니다.
<class 'type'>
Traceback (most recent call last):
File "C:pythonWorkspacemain.py", line 21, in <module>
testWindow = TestWindow()
File "C:pythonWorkspacemain.py", line 13, in __init__
self.setupUi(self)
File "<string>", line 15, in setupUi
AttributeError: 'TestWindow' object has no attribute 'accept'
UI템플릿에서 다시 불러온 후 저장하고 다시 테스트했더니 이번엔 정상적으로 동작하였습니다.
다음은 첫번째 방법, UI파일을 Python코드로 변환시킨 후 py로 변환시킨 파일에서 코드를 작성하는 방법에 대해 알아봅니다. .ui를 .py로 변환하는 명령어는 다음과 같습니다.
python -m PyQt5.uic.pyuic -x [ui파일명.ui] -o [변환할 파일명.py]
[REFERENCE]
build-system.fman.io/qt-designer-download
build-system.fman.io/pyqt5-tutorial
[도움될 사이트 링크]
build-system.fman.io/pyqt5-tutorial
build-system.fman.io/pyqt-exe-creation/