Armadilloフォーラム

X Window System+tkinterの開発環境構築

takahashi-h

2024年6月26日 11時59分

あと一歩というところなので、ご助言いただけると助かります。

■やりたいこと
 ABOSDE上でのtkinterデバッグ環境を構築する。

■いま困っていること
 tkinterが動作するようになったが、画面に対して描画領域が狭い。(添付ファイル参照)

■ハード
・Armadillo-X2
・タッチパネルモニタ GTWV050VHB00P(800x480)

■やったこと、設定など(ABOSDE上の操作)
①at-debian-imageをATDEに入れる。
 wget https://armadillo.atmark-techno.com/files/downloads/armadillo-x2/contai…
 podman load -i at-debian-image-v1.0.11.tar
 ※バージョンは読みかえてください。

②Python New Projectをつくる。

③Dockerfileを編集する。
<変更>
FROM localhost/at-debian-image:latest
<追加>
RUN apt update && apt upgrade -y \
&& apt install -y xorg \
&& apt clean

④packages.txtを編集する。 
<追加>
python3-tk

⑤app.confを編集する。
<追加>
add_devices /dev/tty7
add_devices /dev/fb0
add_devices /dev/input
add_volumes /run/udev:/run/udev:ro
add_args --cap-add=SYS_ADMIN
add_args --cap-add=SYS_TTY_CONFIG
volumes="/tmp/.X11-unix:/tmp/.X11-unix"
# append_args --env="DISPLAY=:0" ←こっちでもOK
append_args --env="DISPLAY=:0.0"
<変更>
set_command bash /vol_app/src/main.sh

⑥app/srcにmain.shをつくる。
<中身>
#!/bin/sh
X vt7 -retro & python3 /vol_app/src/main.py

⑦main.pyにtkinterのプログラムを実装する。

⑧Generate development swuして、Armadilloにインストールする。

⑨表示はされるが、描画領域が狭い。 ←いまここ

■状態補足
・X Windowは画面全体に表示される
・タッチも全領域反応する
・tkinterで描画されるのは180x180くらい
・ボタンも押せる
 →ボタンを押したときにラベル内容を更新するが、画面も更新される
・日本語は文字化けしている(ボタンのtext)
・geometory()をつかうとなぜかエラーになる
(AttributeError: '_tkinter.tkapp' object has no attribute 'geometory')
 →ただしattributes("-fullscreen", True)をやっても状況変わらず

よろしくお願いします。

ファイル ファイルの説明
20240626_tkinter.jpg
コメント

佐藤です。

差し支えなければ、main.py を見せていただくことは可能でしょうか。

佐藤様
返信いただき、ありがとうございます。

main.pyは以下の内容です。
テスト用なのでたいしたことはやっていないつもりです。
(投稿時に半角スペースが詰められてしまうので、インデントにわざと全角スペースをつかっています)

-----
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import tkinter

n = 0
def ButtonClick():
 global n
 n = n + 1
 l = tkinter.Label(text=n)
 l.place(x=10, y=10)

root = tkinter.Tk()
root.title("TEST")
# root.geometory("800x480")
# root.geometory("400x400")
# root.geometory(f"{800}x{480}+0+0")
# root.attributes("-fullscreen", True)

l0 = tkinter.Label(text="150,150")
l0.place(x=150, y=150)
# l1 = tkinter.Label(text="400,0")
# l1.place(x=400, y=0)
l2 = tkinter.Label(text="800,0")
l2.place(x=800, y=0)
# l3 = tkinter.Label(text="400,240")
# l3.place(x=400, y=240)
l4 = tkinter.Label(text="#")
l4.place(x=180, y=180)
b = tkinter.Button(root, text="受信", command=ButtonClick)
b.place(x=100,y=100,width=100, height=20)

root.mainloop()
-----

以上、よろしくお願いします。

佐藤です。

ソースコードありがとうございます。

> # root.geometory("800x480")
geometory ではなく、geometry です。

日本語の文字化けについてですが、フォントを入れると表示されると思います。
packages.txt に fonts-ipafont を追加して、development swu を作り直してみてください。

佐藤様
ご指摘、ありがとうございました。

単純に私がボケちゃってただけですね(汗)

<結果>
root.geometry("800x480")
 →で、全画面表示されるようになりました。

packages.txt に fonts-ipafont を追加
 →で、日本語が文字化けせずに表示されるようになりました。

つまならいことで、数日ハマることもあるので大変助かりました!

自己補足です。

デバッグ中は気がつかなかったのですが、
Armadillo-X2起動時にtkinterが動作しないことがわかりました。
(X Window Systemは起動する)

-----改善-----
⑥app/srcにmain.shをつくる。
<中身>
#!/bin/sh
sleep 3
X vt7 -retro & python3 /vol_app/src/main.py
----------

とし、X Window System+tkinter起動前にsleepを入れることで改善できました。

※2秒だと起動しないこともありますが、3秒だといまのところ安定して起動しています。