Armadilloフォーラム

armadillo-x2でのpython, tkinterエラーについて

nakamori

2023年12月4日 17時24分

お世話になります。

下記リンクを基準として、pythonで記載できるGUIアプリケーションを構築したいと思います。
・6.2.9.1. Wayland を扱う(https://manual.atmark-techno.com/armadillo-x2/armadillo-x2_product_manu…)

上記設定でpodmanコンテナを作成後、「apt install python3-tk」コマンドで
pythonGUIライブラリのtkinterをインストールしました。

サンプルプログラムとして、下記を実行するとエラーが出力されました。

root@13f653a834d1:/# python3
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from tkinter import *
>>> root = Tk()
Traceback (most recent call last):
File "", line 1, in
File "/usr/lib/python3.9/tkinter/__init__.py", line 2270, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable

DISPLAYの環境変数が未定義のエラーと思い、(条件異なりますが)
下記リンクを参照に
・X Window Systemを起動するコンテナとGUIアプリを起動するコンテナ間の連携と画面表示について(https://armadillo.atmark-techno.com/forum/armadillo/10849
export DISPLAY=:0やexport DISPLAY=:0.0を試しましたが、

root@13f653a834d1:/# python3
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from tkinter import *
>>> root = Tk()
Traceback (most recent call last):
File "", line 1, in
File "/usr/lib/python3.9/tkinter/__init__.py", line 2270, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: couldn't connect to display ":0"

この場合、どのような設定変更を行うのが適切でしょうか?
よろしくお願いします。

コメント

at_ohsawa

2023年12月5日 11時09分

tkinterのバックエンドであるtcl/Tkが今の所メジャーな実装でwaylandプロトコルを
サポートしていないので、X Windowsを使う必要があります。

製品マニュアル 「6.2.9.2. X Window System を扱う」
を参考にコンテナを作って、その中で使ってみてください。

参考までですが、Tkを含むtclの実装のうちundroidwish
(https://wiki.tcl-lang.org/page/Binary+Distributions)
はwaylandをサポートしているようですが、とくにメンテも
されてないし、部分的な実装のままでとくにパッケージに
なっていたりはしません。
既に大半のLinuxディストリビューションがXからwaylandに
移行している現在、ややtkの対応は遅れ気味なようです。

at_ohsawa

2023年12月5日 11時16分

tkinterのバックエンドであるtcl/tkが今の所メジャーな実装でwaylandに
未だ対応していないことが原因です。

製品マニュアル 「6.2.9.2. X Window System を扱う」の手順でWeston
ではなくX を起動して、その中で使ってみてください。

参考までにコミュニティの状況としては、実験的なtkを含むtcl実装に
waylandをサポートしてみたundroidwish(https://wiki.tcl-lang.org/page/Binary+Distributions)
というプロジェクトがありますが、2017年ごろからメンテもされていないのでパッケージもありません。
ご存知の通り大半のlinuxディストロがwaylandに移行している中、ややtkの対応は遅れ気味な気はします。

nakamori

2023年12月5日 20時26分

上記の通り、X Window System&Tkinterの組み合わせで実行することが出来ました。
対応いただきありがとうございます。