• Tistory
    • 태그
    • 위치로그
    • 방명록
    • 관리자
    • 글쓰기
Carousel 01
Carousel 02
Previous Next

파이썬에 GUI를 입혀보자. PyQT

Programming/Python 2016. 12. 13. 15:18





한동안 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
파이썬에 GUI를 입혀보자. PyQT  (0) 2016.12.13
자주사용되는 파이썬 라이브러리  (0) 2016.11.09
python 에서 pass 와 continue의 차이점.  (0) 2016.07.15
파이썬에서 main() 함수는 어디에 있는가?  (0) 2016.06.30
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

트랙백 0개, 댓글 0개가 달렸습니다

댓글을 달아 주세요

  • «
  • 1
  • ···
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • ···
  • 47
  • »

카테고리

  • 살다보니.. (414)
    • 주절거림 (3)
    • 취미생활 (36)
      • 지식과 지혜 (3)
      • 풍경이 되어 (4)
      • Memories (17)
      • 엥겔지수를 높여라 (2)
    • mathematics (6)
      • Matrix Computation (2)
      • RandomProcesses (3)
    • English.. (8)
    • Programming (134)
      • C, C++, MFC (51)
      • C# (1)
      • OpenCV (17)
      • Python (47)
      • Git, Docker (3)
      • Matlab (4)
      • Windows (3)
      • Kinect V2 (2)
      • 기타 etc. (6)
    • 전공관련 (73)
      • Algorithm (6)
      • Deep Learning (49)
      • 실습 프로그램 (4)
      • 주워들은 용어정리 (8)
      • 기타 etc. (6)
    • Computer (104)
      • Utility (21)
      • Windows (24)
      • Ubuntu, Linux (55)
      • NAS (2)
      • Embedded, Mobile (2)
    • IT, Device (41)
      • 제품 사용기, 개봉기 (14)
      • 스마트 체험단 신청 (27)
    • Wish List (3)
    • TISTORY TIP (5)
    • 미분류. 수정중 (1)

태그목록

  • 오봉자싸롱
  • 일본
  • 에누리닷컴
  • 후쿠오카
  • 크롬
  • LIBSVM
  • matlab function
  • 딥러닝
  • ReadString
  • portugal
  • 매트랩
  • DeepLearning
  • 큐슈
  • 칼로리 대폭발
  • 스마트체험단
  • CStdioFile
  • review
  • SVM
  • Computer Tip
  • DSLR
  • random variable
  • 갤럭시노트3
  • Convolutional Neural Networks
  • Deep Learning
  • 포르투갈
  • ColorMeRad
  • utility
  • matlab
  • 매트랩 함수
  • function

달력

«   2022/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        
05-20 07:35

LATEST FROM OUR BLOG

  • 골뱅이 연산자의 의미 (행렬곱)..
  • 프린터 용지 부족 문제를 해⋯.
  • [MXNet] 데이터 리스트를 만⋯.
  • 예쁘게 출력하자 pprint - pr⋯.
  • 작업표시줄 미리보기를 리스⋯.
  • 이미지 실제 파일 포맷 확인하기.
  • 알리 등 해외배송 배송상태를⋯.
  • 티스토리 코드블럭 내용을 복⋯.
  • warning 을 on/off 하자.
  • windows 10 파일 선택, 파일⋯.
RSS 구독하기

BLOG VISITORS

  • Total : 1,114,479
  • Today : 41
  • Yesterday : 672

Copyright © 2015 Socialdev. All Rights Reserved.

티스토리툴바