티스토리 뷰
anaconda3.5에서 Qt designer를 이용하여 UI프로그램을 만들어 보려고 한다. 기본적인 제작과정은 다음과 같다.
- Qt designer를 이용하여 UI를 디자인하고 xxx.ui파일 만들기
- pyuic4를 이용하여 xxx.ui파일을 xxx.py로 변환하기
- 변환된 xxx.py파일을 이용하여 프로그램을 완성하기
이 문서는 anaconda3.5.1과 pyqt4.11.4를 이용하여 작성하였다.
1. Qt designer를 이용하여 UI를 디자인하고 xxx.ui파일 만들기
Qt designer는 C:\Anaconda3\Library\bin\designer.exe를 실행시키면 사용할 수 있다.
C:\Anaconda3\Library\bin\는 anaconda설치시 환경변수로 설정되므로, cmd(명령프롬프트)에서
designer
만 입력하여도 Qt designer를 실행시킬 수 있다.
UI는 아래의 이미지처럼 디자인하고 hello.ui로 저장하였다.
designer 사용법은 http://blog.naver.com/lithium81/80123265397를 참고했다.
2. pyuic4를 이용하여 xxx.ui파일을 xxx.py로 변환하기
pyuic4는 Qt designer로 만들어진 ui파일을 py파일로 변환시키는 프로그램이다. uic는 C:\Anaconda3\Library\bin\pyuic4.bath에 위치하고 있다. pyuic4는 cmd(명령프롬프트)에서 pyuic4 xxx.ui > xxx.py
와 같은 형식으로 입력하면 된다
pyuic4가 올바르게 작동하지 않으면 http://stackoverflow.com/questions/32041366/convert-ui-file-to-python-using-pyuic4-issue를 참고하라.
이때 만들어진 xxx.py파일은 xxx.ui를 pyqt로 변환된 파일이라서 바로 테스트할 수 없다. 하지만 pyuic4 -x xxx.ui -o xxx.py
형식으로 입력하면 테스트할 수도록 코드가 추가된다. cmd에서 python xxx.py
를 입력하면 아래와 같이 xxx.py가 실행이 된다.
3. 변환된 xxx.py파일을 이용하여 프로그램을 완성하기
변환된 xxx.py는 Qt designer로 만든 UI를 pyqt로 변환시킨 것이다. 아래 코드는 pyuic4 hello.ui > hello.py
형식으로 변환된 hello.py파일이다.
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_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(400, 300)
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(24, 22, 351, 261))
font = QtGui.QFont()
font.setFamily(_fromUtf8("Arial"))
font.setPointSize(20)
self.pushButton.setFont(font)
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.retranslateUi(Form)
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), Form.close)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(_translate("Form", "Form", None))
self.pushButton.setText(_translate("Form", "Hello, qyqt!!", None))
변한된 py파일에는 Ui_Form클래스가 있다. 이 클래스는 화면에 출력되는 유저인터페이스가 된다. MVC 디자인 패턴을 이용해서 Ui_Form을 View로 사용하고, 새로운 클래스에 Ui_Form을 상속받아 Control로 사용하는 한다. 만일 데이터관리가 필요하다면 또다른 클래스는 만들어 Model로 사용하면 된다.
Ui_Form은 사용자가 designer에서 object_name에 따라서 달라질 수 있다.
아래의 코드는 HelloDialog.py로 새로운 py파일을 만들었다.
from PyQt4 import QtGui
import sys
import hello
class HelloDialog(QtGui.QDialog, hello.Ui_Form):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.setupUi(self)
app = QtGui.QApplication(sys.argv)
dialog = HelloDialog()
dialog.show()
sys.exit(app.exec_())
Ui_Form와 QtGui.Dialog를 상속받는 HelloDialog클래스를 만들었다. 코드에 대한 설명은 여기를 참고하길 바란다.
'pyqt4' 카테고리의 다른 글
메인위도우에서 다이얼로그를 사용하는 방법 (0) | 2016.06.25 |
---|---|
designer로 만든 ui를 상속받아 사용하는 방법 (1) | 2016.06.25 |
사용자 정의 시그널(signal)과 발생(emit) (0) | 2016.06.25 |
signal과 slot (0) | 2016.06.20 |
pyuic4 -x로 만들어지는 py파일 (0) | 2016.06.20 |