シンプルなアプリケーションランチャー for Raspberry Pi

テキスト表示のシンプルなアプリケーションランチャーです。できるだけ簡単に設置、登録などできるようにしてみました。

アプリケーションメニュー

当サイト(Raspberry Pi)のアプリケーションメニューはpython3/tkinterで作成しています。 メインのボタンメニューは視認性、操作性とも良くダイレクトに実行、またカテゴリボタンは更にサブメニューを実行します。サブメニューは自前のツールやスクリプトを実行することも多くアイコンボタンメニューを作成することは困難になることからリストボックスによるテキスト形式で手軽に登録、再登録可能なサブメニューを作成

任意のディレクトリでファイラー(ranger)を起動

サブメニュー

雛形のサブメニューを作成
~/bin/app_menu/sub_default.py
雛形の”xxx”は変更しない
# — default — sub_file = “xxx”

雛形が決まったらコピー sub_menu.py
このときsub_file = “sub_menu.py”に変更
プログラム変更が可能になります 取り敢えずラベルカラーとボタンカラーを変更
デフォルトは’TButton’

メニュー項目はコマンドechoを実行してリストボックスから読み込みます。リストボックスは空白(space)があると分割してリスト表示 menu_listのechoコマンドは逆スラッシュで繋いで打ち込みやすくします。各文字列にspaceを含めることは出来ません。 select_selectionはリストの文字列から先頭2文字を取得 program_selectionで識別して実行

メニュー内で実行する際は関数を実行すると見やすくなります

sub_menuを呼び出すsub_master.py

devilspie2

Raspberry Pi(LightDM)は空いているスペースにウインドウを起動します。特に小さいウインドウは使いにくくなるので任意の位置に固定します。

$ sudo apt install devilspie2

http://git.savannah.gnu.org/cgit/devilspie2.git/plain/README

当サイトで使っているオプションを記載しています(– はコメント)

~/.config/devilspie2/applications.lua

----------------------------------------------------
-- devilspie2 - Lua-based window matching utility --
----------------------------------------------------
-- get_window_name()
-- get_application_name()
-- get_class_instance_name()
-- pin_window()
-- shade()
-- minimize()
-- make_always_on_top()
-- set_window_workspace(1)
-- undecorate_window()
-----------------------------------------------------

if (get_window_name()=="menu master") then
  set_window_geometry2 (1460,220,226,205)
end
if (get_window_name()=="menu sub") then
  set_window_geometry2 (1233,220,226,205)
end

ウインドウの取得はget_window_name()が扱いやすいと思います。(ウインドウタイトル)
pythonプログラムではroot.title(‘menu sub’)

ターミナルから$ xwininfo で取得できます。
位置、サイズの並びが違うので注意
+値を記載

devilspie2は自動で起動しないので~/.config/autostartに新規作成
~/bin/app_menu/sub_master.pyはLXPanelなど使いやすいところから起動、もしくは同様に作成
~/.config/autostart/devilspie2.desktop

[Desktop Entry]
Type=Application
Name=Devilspie2
Exec=devilspie2

参考

sub_default.py
sub_master.py
sub_menu.py
sub_system.py