Post List

2015년 10월 7일 수요일

Python GUI Programming : PyQt #04 UI Control 제어하기 (예제로 notepad 만들기)

이번에는 직접적으로 PyQt에서 생성한 control 들을 제어해보도록 하겠습니다.
예제로 notepad 기능을 하는 application을 만들어 보겠습니다.

  - file을 읽어서 그 내용을 화면에 표시합니다.
  - 그 내용을 수정해서 다른 이름의 file로 저장을 합니다.

위 2가지 기능을 하는 application을 PyQt로 만들어 보겠습니다.

1. Qt Designer에서 dialog 에 control 배치



위 그림을 참조하여 control 들을 배치하고 명칭을 변경합니다.

2. Edit signal / slot 을 눌러서 2개의 button 을 form 에 연결합니다.

form에는 사용자 정의 slot을 추가합니다.
  - slotFileOpen()
  - slotFileSave()

 사용자 정의 slot 추가에 대한 자세한 사항은 아래 Link 참조 부탁드립니다.
  http://devluna.blogspot.kr/2015/09/python-gui-programming-pyqt-03.html





3. PyMemo.ui 라는 이름으로 저장합니다.

4. 같은 경로에 PyMemo.py 파일을 생성하여 Python code를 구현합니다.

  4.1. 먼저 PyQt UI를 참조하는 Form class를 생성합니다.

import sys

from PyQt5 import QtWidgets
from PyQt5 import uic
from PyQt5 import QtGui
from PyQt5 import QtCore
from PyQt5.QtCore import pyqtSlot

class PyMemoForm(QtWidgets.QDialog):
    def __init__(self, parent = None):
        QtWidgets.QDialog.__init__(self, parent)
        self.ui = uic.loadUi("PyMemo.ui", self)
        self.ui.show()

  4.2. slotFileOpen() 을 구현합니다.

      - QtWidgets.QFileDialog.getOpenFileName()을 이용하여 file명을 dialog에서 입력합니다.
      - edit_fileName , text_context 라는 control에 file명 및 file 내용을 입력합니다.

    * control은 self.ui.control명칭 으로 접근이 가능합니다.
    * control의 자세한 사용법은 Qt Reference를 참조하시면 됩니다.
      (C++ 기준으로 되어 있으나, Python 타입으로 연관시키는 것이 어렵진 않습니다.)

      - QLineEdit http://doc.qt.io/qt-5.5/qlineedit.html
      - QTextEdit http://doc.qt.io/qt-5.5/qtextedit.html

    @pyqtSlot()
    def slotFileOpen(self):
        fileName = QtWidgets.QFileDialog.getOpenFileName()
        fullName = fileName[0]
        self.ui.edit_fileName.setText(fullName)
        fHandle = open(fullName)
        self.ui.text_context.setPlainText(fHandle.read())

  4.3 slotFileSave() 를 구현합니다.

      - QtWidgets.QfileDialog.getSaveFileName()을 이용하여 file명을 dialog에서 입력합니다.
      - text_context의 값을 file로 저장합니다.

@pyqtSlot()
    def slotFileSave(self):
        fileName = QtWidgets.QFileDialog.getSaveFileName()
        fullName = fileName[0]
        fHandle = open(fullName, 'w')
        context = self.ui.text_context.toPlainText()
        fHandle.writelines(context)
        fHandle.close()

5. 끝

  실행을 해서 결과를 확인하시면 됩니다.

* 전체 Code

1. PyMemo.py

2. PyMemo.ui

댓글 없음:

댓글 쓰기