한동안 MFC를 이용해서 프로그램 만들다 파이썬 쓰려니까 가장 첫번째로 걸리는게 GUI가 없다는 점이었다.
이런 문제를 해결 할 수 있는 좋은 방법! PyQT 를 이용하면 MFC 처럼 쉽게 GUI를 구성할 수 있다.
다음번을 위해 기록해 둬야지 안그러면 또 못찾고 헤멜것이 분명하다.
1. 먼저 PyQT를 설치
https://www.riverbankcomputing.com/software/pyqt/download
위 사이트에서 다운로드 가능하다.
PyQT5 버전부터는 파이썬 3버전만을 지원하기 때문에
파이썬 2.7 버전을 이용하는 경우는 PyQT4 버전을 이용하면 된다.
윈도우에서는 운영체제에 맞게 설치파일 다운받아 설치하면 되고
리눅스에서는 apt-get 을 이용하여 설치 가능하다고 한다 (이건 안해봄..)
2. GUI 구성
간단한 형태는 python 상에서 코드로 직접 구현 해도 되지만 형태가 복잡해지고
프로젝트가 커지면 코드로 직접 구현하기는 점점 더 어려워지겠지..
Designer 라는프로그램을 이용하여 직접 gui를 구축 해 보자.
MFC와 마찬가지로 필요한 옵션들 끌어다 자리잡고 이름 설정하고 옵션설정하고.. 뭐 그정도..
GUI 틀을 다 만들면 파일을 *.ui 로 저장한다.
3. ui 파일을 py파일로 변환하기
다 만든 ui 파일을 파이썬에서 사용하도록 py파일로 변환이 필요하다.
변환은 pyuic4 를 통해 수행한다. 이 파일은 designer 가 설치된 경로에 있다
(/python_path/lib/site-packages/PyQt4/)
아래 명령어를 통해 ui 파일을 py 파일로 변환한다.
>> pyuic4 "*.ui파일" -o "py파일명"
변환을 수행하면 위 사진과 같은 GUI는 아래와 같은 파이썬 코드로 변환된다.
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'firstUI.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(400, 300)
self.gridLayout = QtGui.QGridLayout(Dialog)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
self.pushButton_Up = QtGui.QPushButton(Dialog)
self.pushButton_Up.setObjectName(_fromUtf8("pushButton_Up"))
self.gridLayout.addWidget(self.pushButton_Up, 1, 0, 1, 1)
self.pushButton_Down = QtGui.QPushButton(Dialog)
self.pushButton_Down.setObjectName(_fromUtf8("pushButton_Down"))
self.gridLayout.addWidget(self.pushButton_Down, 1, 1, 1, 1)
self.lcdNumber = QtGui.QLCDNumber(Dialog)
self.lcdNumber.setObjectName(_fromUtf8("lcdNumber"))
self.gridLayout.addWidget(self.lcdNumber, 0, 0, 1, 2)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
self.pushButton_Up.setText(_translate("Dialog", "Up", None))
self.pushButton_Down.setText(_translate("Dialog", "Down", None))
4. 파이썬에서 py 파일 이용하여 GUI 연결하기
3번에서 생성된 py파일을 import하고 버튼은 함수랑 연결해주고 뭐 남은 작업들 코딩하면 된다.
나는 연습삼아 업다운 카운터를 구현.
업다운 버튼을 통해 LCDCounter 숫자가 증감하도록 구현하였다.
그 코드는 아래와 같다.
# -*- encoding: UTF-8 -*-
from PyQt4.QtGui import *
import firstUI
class XDialog(QDialog, firstUI.Ui_Dialog):
def __init__(self):
QDialog.__init__(self)
# setupUi() 메서드는 화면에 다이얼로그 보여줌
self.setupUi(self)
# 버튼과 함수 매핑
self.pushButton_Up.clicked.connect(self.upCount)
self.pushButton_Down.clicked.connect(self.downCount)
def upCount(self):
self.lcdNumber.display(self.lcdNumber.value()+1)
print 'Up'
def downCount(self):
self.lcdNumber.display(self.lcdNumber.value() - 1)
print 'Down'
# App
app = QApplication([])
dialog = XDialog()
dialog.show()
app.exec_()
다른 기능들도 연습 해 봐야지..
'Programming > Python' 카테고리의 다른 글
os.path 모듈 사용법 (0) | 2018.03.05 |
---|---|
파이썬2 와 파이썬3을 동시에 동작시키자 : __future__ (0) | 2018.01.19 |
자주사용되는 파이썬 라이브러리 (0) | 2016.11.09 |
python 에서 pass 와 continue의 차이점. (0) | 2016.07.15 |
파이썬에서 main() 함수는 어디에 있는가? (0) | 2016.06.30 |