• Ubuntuに関連したハード、ソフトの備忘録サイトです

Python3でのGUIーTkinterとPyQt【暫定投稿】


PythonではGUIアプリを作れますが、デフォルトでTkinterというGUIでアプリケーションを作るためのライブラリが入っています。翔泳社の「空飛ぶPython」の著者によると、①Pythonへの統合度が高い②非常に協力③完全にクロスプラットフォームなGUI④Pythonと同じくフリーという特長があります。コマンドリファレンスだけで300ページあるとのことです。ただし、PyQtもあります。 PyQtの紹介は、秀和システムの「Python入門2&3対応」に掲載されていますが、UbuntuではSynapticでPyQt4を検索すると、必要なライブラリーをゲットできます。それで上記本を見てみたのですが、443頁の簡易エディタには、ファイルを保存する機能がありません。そこでちょっと調べて付け足してみました。下記のコードです。 エディタークラスのtoPlainText()というメソッドを探すのに手間がかかりました。


#!/usr/bin/env python3
import sys
from PyQt4 import QtGui, QtCore

class CustomMainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        menubar = self.menuBar() # メニューバーの作成
        filemenu = menubar.addMenu('&File') # 「ファイル」メニューの作成

        a = QtGui.QAction('Open', self) # 「Open」メニュー項目の作成
        a.setShortcut('Ctrl+O')         # キーボード・ショートカットの設定
        # 選択したらファイルダイアログを表示
        self.connect(a, QtCore.SIGNAL('triggered()'),
                     self.showFileDialog)
        filemenu.addAction(a)

        a = QtGui.QAction('Save', self) # 「Save」メニュー項目の作成
        a.setShortcut('Ctrl+S')         # キーボード・ショートカットの設定
        # 選択したらファイルダイアログを表示
        self.connect(a, QtCore.SIGNAL('triggered()'),
                     self.saveFileDialog)

        filemenu.addAction(a)
        a = QtGui.QAction('Exit', self) # 「Exit」メニュー項目の作成
        a.setShortcut('Ctrl+Q')         # キーボード・ショートカットの設定
        # 選択したらウインドウを閉じる
        self.connect(a, QtCore.SIGNAL('triggered()'),
                     QtCore.SLOT('close()'))
        filemenu.addAction(a)

        self.textEdit = QtGui.QTextEdit() # テキストエディタの作成
        self.setCentralWidget(self.textEdit)

    def showFileDialog(self):
        # ファイルダイアログを表示しファイル名を取得
        fname = QtGui.QFileDialog.getOpenFileName(
                    self, 'Open', '.')
        f = open(fname) # ファイルを開く
        self.textEdit.setText(f.read()) # ファイルの中身を表示
    
    def saveFileDialog(self):
        # ファイルダイアログを表示し保存ファイル名を決定
        fname = QtGui.QFileDialog.getSaveFileName(
                    self, 'Save', '.')
        f = open(fname, 'w') # ファイルの保存名を決定する
        f.write(str(self.textEdit.toPlainText())) # ファイルを保存する
    
def main():
    app = QtGui.QApplication(sys.argv)
    mainw = CustomMainWindow()
    mainw.resize(800, 400)
    mainw.show()
    app.exec()
        
if __name__ == '__main__':
    main()

なお、PyQtにはqt4-designerというものがあり、GUIアプリをGUIで作ることのできるツールがあります。基本は $ sudo apt-get qt4-designerですが、ヘルプは別途synapticでインストールする必要がありました。下図がその図です。

qt4-designer

昔はインストール自体が面倒でしたが、最近はそうではなくなってきています。ただし、Python関連の本格書ないしはサイトはほとんど英語です。アマゾンには、PyQtによるプログラミングに特化した本があります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA