tkinterで画面にGUI表示
Raspberry pi の画面にメッセージを表示させる機能を Python で実装したいのです。
ところがtkinterが上手く動かず時間を使いまくりました。
取りあえず解決したので備忘録としてここにシェアします。
tkinterモジュールが見つからない問題
実行させると下記のエラーがでて動きませんでした。
raceback (most recent call last):File "tkinter-demo.py", line 3, in <module>import tkinter as tkImportError: No module named tkinter
tkinterなんてモジュールはないぜ!と怒られています。
これは色々調べた結果、pythonのバージョンによって発生するそうです。
僕のラズパイの環境だと
コマンド
python -V
を打つと
Python 2.7.16
で返ってきました。
この問題の解決方法
このバージョンのPythonではtkinter を importするときに
import Tkinter as tk
と、頭大文字でTkinterと打たないとダメみたいです。
ディスプレーが解らないよエラー
続いて一難さったら下記のエラー
Traceback (most recent call last):File "tkinter-demo.py", line 5, in <module>root = tk.Tk()File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1828, in __init__self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)_tkinter.TclError: no display name and no $DISPLAY environment variable
ディスプレーネームが見つからないと。
どうもディスプレー環境のエラーみたいです。
これはググりまくってもヒントが見つからず途方に暮れてました、、、
この問題の解決方法
これは、冷静になったらわかりました。
僕がアホなだけでした!
Tera Term で SSH 越しに実行していたから発生していました(笑)
なんとなくそれでも動くような気がしちゃってたんですね。
良く考えたらそんなわけないですよね。
Raspberry pi から直接実行したら問題なく動きました。
うまくいったソースコード
#!/usr/bin/python
import Tkinter as tkroot = tk.Tk()
root.title("Tkinter test")
#root.geometry("360x240")
root.mainloop()
※root.geometry("360x240")がASCIIエラーがでてましたけど、多分 x が駄目ポイきがします。それはおいおい解決で。
GUIを呼び出せました!
おまけ
問題可決に、python 3.7とかをインストールしました。
最新版にしたら解決するのかと思って。
python 3.7 をインストールの後、実行してみましたけど問題治らず。
あれ?本当にインストールできた?バージョン確認したらPython2.7.16のまま。
調べたら初期設定では
python xxx.py だと 2系 で実行されて
python3 xxx.py だと 3系で実行されるんですね。
下記コマンドで確認するとちゃんと 3.7.2がインストールされていました。
python3 -V
Python 3.7.2
参考まで!