티스토리 뷰

anaconda3.5에서 Qt designer를 이용하여 UI프로그램을 만들어 보려고 한다. 기본적인 제작과정은 다음과 같다.

  1. Qt designer를 이용하여 UI를 디자인하고 xxx.ui파일 만들기
  2. pyuic4를 이용하여 xxx.ui파일을 xxx.py로 변환하기
  3. 변환된 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클래스를 만들었다. 코드에 대한 설명은 여기를 참고하길 바란다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함