pyQt4
소개
Qt는 C++에서 사용가능한 GUI 모듈중 하나입니다.
현재 Qt는 LGPL 로 라이센스를 변경하면서 재배포 및 수정에 대한 권한이 대폭 향상(?) 되었습니다.
이를 이용한 pyQt는 아쉽게도 LGPL이 아닌 GPL 라이센스를 사용하고 있습니다.
즉 상용 버전의 프로그램을 만들기 위해서는 상용버전의 ptQt 라이센스를 구입 후 사용해야 된다고 합니다.
이는 Qt를 지원하는 Nokia는 하드웨어 회사이기 때문에 이익을 하드웨어 에서 얻지만 ptQt를 제작하는 Riverbank사 는 소프트웨어의 판매로
수익을 창출하기 때문에 이러한 결정을 하였다고 합니다.
차후 LGPL 버전으로도 제공을 한다고 하고 아직까지 저도 상용 프로그램을 제작하지 않기 때문에 큰 문제는 없어 보입니다.
디자인 하기
GUI 디자인은 qt designer를 통하여 제작하면 XML 형식으로 만들어집니다.
디자이너로 만든 UI의 코드는 pyuic4를 이용하면 python 코드로 생성가능하다.
(qt 버전에 다라 pyuic의 네이밍도 조금씩 다릅니다. 차 후 버전이 올라갔을 경우에도 qt 버전에 맞는 pyuic 프로그램을 사용하여야 제대로 코드를 생성 하실 수 있습니다.)
UI는 직관적으로 만드실 수 있습니다.
왼쪽의 widget box에서 사용하고 싶은 widget 들을 드래그 해서 만들면 간단하게 구현이 가능합니다.
생성한 ui는 [file name].uic 파일로 생성이 됩니다.
생성된 uic 코드를 file.py 로 변경 할수 있는데 명령은 다음과 같다.
위 명령을 이용하면 uic 파일을 py 파일로 만들 수 있습니다.
GUI가 중간 중간 변경 될 때마다 pyuic 를 이용하여 python 코드로 변경해줘야 합니다.
| -h, --help | A help message is written to stdout. |
| --version | The version number is written to stdout. |
| -i N, --indent=N | |
| The Python code is generated using an indentation of N spaces. If N is 0 then a tab is used. The default is 4. | |
| -o FILE, --output=FILE | |
| The Python code generated is written to the file FILE. | |
| -p, --preview | The GUI is created dynamically and displayed. No Python code is generated. |
| -w, --pyqt3-wrapper | |
| The generated Python code includes a small wrapper that allows the GUI to be used in the same way as it is used in PyQt v3. | |
| -x, --execute | The generated Python code includes a small amount of additional code that creates and displays the GUI when it is executes as a standalone application. |
| --from-imports | Resource modules are imported using from . import rather than a simple import. |
그 불편함을 줄이고자 Makefile 을 간단하게 만들었습니다.
- file : file.uic
-
pyuic4 file.uic -o fil.py
아래 코드는 변환한 python 코드의 일부이다.
- -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'client_mail.ui'
#
# Created: Thu Nov 19 03:56:23 2009
# by: PyQt4 UI code generator 4.6
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
class Ui_Mail(object):
def setupUi(self, Mail):
Mail.setObjectName("Mail")
..........................................
self.retranslateUi(Mail)
QtCore.QMetaObject.connectSlotsByName(Mail)
def retranslateUi(self, Mail):
Mail.setWindowTitle(QtGui.QApplication.translate("Mail", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
class 이름은 QtDesigner4에서의 Object Inspector의 가장 상위 의 위젯의 이름앞에 Ui_를 붙이게 됩니다.
저는 Mail이라는 이름을 적어서 Ui_Mail 이라는 클래스 이름이 되었습니다.
클래스 아래에 Method가 두개 있는데 첫번째 Method인 setupUi는 제가 드래그해서 추가하였던 widget들이 추가 되어있을 것입니다.
다음 Method는 추가된 widget들 중에서 구체적인 설정 들이 추가되어 있습니다.
메인 클래스에서 위 UI를 import 하여 사용하면 됩니다.
- -*- coding:utf-8 -*-
- import sys
- from PyQt4 import QtGui
- from Ui_Mail import Ui_Mail
app = QtGui.QApplication(sys.argv)- window = QtGui.QMainWindow()
ui = Ui_Mail()- ui.setupUi(window)
- window.show()
- sys.exit(app.exec_())
References
[1] http://www.riverbankcomputing.co.uk/news
[2] http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html
History
Last edited on 10/04/2010 08:20 by hAgiNara
Comments (0)