Python GUI PyQt もっと早く使っておけばよかった

Python GUI Spyder と Qt Designer で かんたん GUI 開発

Django で動かしてた、チーム内で利用するユーティリティWebアプリケーションがあったのだが、サーバーが死んでしまった。

サーバーを再度立てることは事情が許さない。

しかしながら、Webアプリケーションをどうしても使いたいユーザーが存在する。

という状況で、ロジックを移植すべく、Python GUIをさわりにいく。

PyQt ではじめるGUIプログラミング

http://www.slideshare.net/RansuiIso/pyqtgui

概要がよくまとまっているので、これ読んどけば良さそう。

。。。ではあるんだけれども、作る"ノリ"みたいなところで得るものがあったので、簡単にまとめておく。

PyQtインストール

ダウンロード

http://www.riverbankcomputing.co.uk/software/pyqt/download

ここから、Pythonのバージョンと、PCのアーキテクチャに合わせたファイルをダウンロード

Qt4系、Qt5系があるようだが、Qt5系は、Python3.x のみ対応のようなので、Qt4を選択した。

インストール

Windows8 x64にインストールしてみる

pyqt_install01

Pythonのパスを聞かれるので、デフォルトですすむ。

pyqt_install02

デモが相当充実している。

pyqt_sample02

PyScripter インストール

上記スライドの通り、PyScripter をインストールする。必須ではないが、確かに捗る。

使いやすい!

https://code.google.com/p/pyscripter/

ドキュメントなど

で、どんな"ノリ" を得たかというと、現状、Python で GUIを利用する自分のニーズは、ちょっとしたユーティリティしかないので、そんなに凝ったUIである必要はない。

HTMLを書く程度のイメージで、Python GUIがかけるとうれしい。

そして、実際、そんな感じでかけてしまう!

今日見始めたばかりなので、具体的なことは何もわからないのだが、チュートリアルとクラスリファレンスを順に見ていけば、自分のやりたいレベルのことは、十分事足りる。

Tutorial

http://zetcode.com/tutorials/pyqt4/

画面イメージが貼られているので、やりたいことがすぐわかる!

Class Reference

http://pyqt.sourceforge.net/Docs/PyQt4/classes.html

Qtのオブジェクトが一覧になっているので、すぐに使いたいオブジェクトのAPIリファレンスにたどり着ける!

その他

ドキュメント

http://qt-project.org/doc/qt-4.8/

Wiki

https://wiki.python.org/moin/PyQt

Reference

http://pyqt.sourceforge.net/Docs/PyQt4/

http://pyqt.sourceforge.net/Docs/PyQt5/

ということで、適当に、書いて目的達成

# -*- coding:utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore

class PyQtExample(QtGui.QWidget):

    def __init__(self):
        super(PyQtExample, self).__init__()
        self.initUi()

    def initUi(self):
        self.cmbMode = QtGui.QComboBox(self)
        self.cmbMode.addItems(('Item1','Item2','Item3','Item4','Item5'))
        self.cmbMode.move(50,50)

        self.chkTblPrefix = QtGui.QCheckBox(u'CheckBox Title',self)
        self.chkTblPrefix.move(50,80)

        self.btnExec = QtGui.QPushButton(u'実行',self)
        self.btnExec.move(50,110)
        self.btnExec.clicked.connect(self.doExecute)

        self.btnClear = QtGui.QPushButton(u'クリア',self)
        self.btnClear.move(150,110)
        self.btnClear.clicked.connect(self.doClear)

        self.txtIn = QtGui.QTextEdit(self)
        self.txtIn.move(50,160)

        self.txtOut = QtGui.QTextEdit(self)
        self.txtOut.move(350,160)

        self.setGeometry(200, 200, 700, 400)
        self.show()

    def doExecute(self, value):
        self.txtOut.append(self.txtIn.toHtml())

    def doClear(self, value):
        self.txtOut.clear()
        self.txtIn.clear()

def main():
    app = QtGui.QApplication(sys.argv)
    example = PyQtExample()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

この程度の安っぽい画面なら瞬間的に出来る!

pyqt_sample

もっと早くから使っとけばよかった。。。