2020-01-12

PyGObject を試す (2) 〜 電卓エミュレータ

GObject (GLib Object System) は、GTK+ のすべてのウィジェットおよび関連するオブジェクトの基底クラスからなるオブジェクトシステムと、言語間の透過的相互運用性を提供するライブラリです。GObject は C 言語で実装されており、バインディングによって他の言語から利用可能となっています。

PyGObject は GObject へのバインディングを提供する Python パッケージです。

Wikipedia より引用・編集

本ブログ記事では下記の OS 環境で動作確認をしています。

Fedora 31 (Workstation Edition) x86_64
Python 3.7.5
PyGObject 3.34.0

電卓エミュレータ

昨年末に PyGObject を試してみて [1]、Linux と Windows(それに MacOS)のマルチプラットフォームで利用でき、普段使っている Linux の GNOME デスクトップと同じ GTK+ ライブラリを使っていて相性が良いので、使いこなせるようになりたいとウィジェットのサンプル集を作りはじめました [2] 

しかし、延々とウィジェット単体だけを扱うのは退屈な作業です。そこで何かはっきりした用途で動作する簡単なサンプルを作りたいと思い、使い古された題材ですが電卓エミュレータを作ってみました(左図)。

と言っても、簡単なサンプルなので、レイアウトをイメージしやすい Gtk.Grid しか使っていません。

最近の電卓は高機能になり、計算順序は数式どおりのもありますが、このエミュレータは、昔ながらの入力順の計算をします。

また、電卓特有の機能、例えば (結果:6)といった裏技のような機能はエミュレートしていません。参考サイト [3] によると、いろいろ裏技があっておもしろそうですが、どこまでエミュレートできるようにするかは、使う人の用途次第です。

ウィジェットの色やフォント、マージンなどの修飾は CSS で設定します。

個々のアプリでウィジェットの修飾にあまり懲り過ぎると、デスクトップでの使用感 (UX) が他のアプリとあまりに違ってしまうので、控えめに使う事を心掛けていますが、ここでは練習のため、色付けやマージンなどを敢えていじってみました。

ボタンウィジェット上に表示する文字は、多言語化対応した環境を使っているのですから、ASCII 文字で表示することをせず、いわゆる「全角」のフォントを意識してわざわざ使っています。

※ こんなことをわざわざ説明するのは、昔から GUI に日本語フォントを表示するのにいろいろ苦労してきた古い人間だからです。💦

以下に、ソースコードを示しました。いつもコードの可読性と簡潔さの両立を目指していますが、電卓のディスプレイの表示が整数の場合、例えば 0 ではなく 0. と表示することにこだわったのでコーディングが少々煩雑になってしまいました。

calculator.py

ウィジェットを修飾する CSS ファイルを別にしました。

calculator.css

リポジトリ

GitHub の下記のサイトにリポジトリを公開しています。calculator.py は PyGObject のサンプルと一緒に入っています。

ソースを入手するには下記のように git でクローンしてください。

git clone https://github.com/bitwalk123/PyGObject_samples.git

Windows 10 上での動作確認

Windows 10 に MSYS2 をインストール、Python / PyGObject を開発できる環境を整えておきます。git で上記のリポジトリからクローンして calculator.py を実行した結果を右に示しました。

このリポジトリにアップされているスクリプトは Linux で開発されているので、文字のエンコーディングは UTF-8 です。Windows の文字コードは cp932(いわゆるシフト JIS)ですが、MSYS2 のパッケージで実行する限り、文字の表示は UTF-8 で問題が無いようです。

参考サイト

  1. bitWalk's: PyGObject を試す
  2. bitWalk's: PyGObject サンプル集
  3. こんなこともできる!電卓の裏ワザ的使い方 | nanapi [ナナピ]
  4. X11の色名称 - Wikipedia

 

 

 

ブログランキング・にほんブログ村へにほんブログ村

0 件のコメント: