ラズパイデスクトップでPyQt5入門(1)
こんばんは。國松です。
今回はVMWare入れたRaspberyyPidesktop でPyQt5を使って簡単なGUIを作って行こうと思います。本当に簡単なものです。
PyQtとは
クロスプラットフォームなGUIツールキットであるQtのPythonバインディングにして、PythonでGUIプログラミングをするときの選択肢の一つ(wikiからの抜粋)です。
今回はPyQt5をインストールしていきます。PyQt4ではないので注意してください。PyQt5はPyQt4と下位互換性がありません。
PyQt5のインストール
1 | sudo apt-get install python3-pyqt5 |
以下のサイトのPyQt5チュートリアルを順番にやっていこう思います。
ZetCode PyQt5 tutorial
まずはシンプルなWindowを表示して行きます。
1.Simple_Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/usr/bin/python3 #coding: utf-8 import sys from PyQt5.QtWidgets import QApplication, QWidget if __name__ == '__main__': app = QApplication(sys.argv) #必ず作らなくてはいけないオブジェクト w = QWidget() #ウィジェットオブジェクト作成(画面のこと) w.resize(250, 150) #画面のサイズを(横250,高さ150に)設定 w.move(300,300) #画面をx=300,y=300の位置に移動 w.setWindowTitle('Simple') #タイトルを設定 w.show() # 画面を表示 sys.exit(app.exec_()) #プログラムをクリーンに終了する |
app = QApplication(sys.argv)
すべてのPyQt 5アプリケーションはアプリケーションオブジェクトを作成しなければなりません。 sys.argvパラメータは、コマンドラインからの引数のリストです。
w = QWidget()
QWidgetウィジェットはPyQt 5のすべてのユーザーインターフェースオブジェクトの基底クラスです。
w.show()
show()メソッドはウィジェットを画面に表示します。ウィジェットは、最初にメモリ内に作成され、後で画面に表示されます。
画像ではターミナルと重なってしまって見にくいですが、シンプルなWindowが表示されればOKです。
2.An application icon
次はwindowのタイトルバーの左上にアイコンを表示していきたいと思います。
アイコンに使用する画像は作成するプログラムと同じディレクトリに入れておいて下さい。
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 32 | #!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QIcon class Example(QWidget): #コンストラクタ def __init__(self): super().__init__() self.initUI() def initUI(self): #setGeometry(x,y,横幅,高さ) self.setGeometry(300, 300, 300, 220) #タイトルの設定 self.setWindowTitle('Icon') #タイトルバーの左上にアイコンを設定 self.setWindowIcon(QIcon('web.png')) #画面を表示 self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) |
画像を見てお分かりの通り表示されたWindowのタイトルバーにはアイコンがありません。LXTerminalの仕様なのか 原因を色々調べたのですがよくわかりませんでした。
あきらめかけたのその時、画面の上の方に並んだタブの一つ、今作成したiconのタブの左隅に桃のアイコン(桃です。お尻ではありません)がキチンと表示されているを発見しました。「あ、そんなころに…」という感じでした。
アイコンを探して少し疲れたので今回はここまでにしたいと思います。