Rich Richer Richest

カメラ / レンズ / 写真 / 名古屋 / ライフハック / 思い付き / 猫 ライフログで暮らしをRichに!

【備忘録】tkinter importがうまくいかない

f:id:mocchipa:20200321161500p:plain

tkinterで画面にGUI表示

Raspberry pi の画面にメッセージを表示させる機能を Python で実装したいのです。

ところがtkinterが上手く動かず時間を使いまくりました。

取りあえず解決したので備忘録としてここにシェアします。

 

tkinterモジュールが見つからない問題

実行させると下記のエラーがでて動きませんでした。

raceback (most recent call last):
  File "tkinter-demo.py", line 3, in <module>
    import tkinter as tk
ImportError: 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 tk

root = tk.Tk()
root.title("Tkinter test")
#root.geometry("360x240")
root.mainloop()

 

 ※root.geometry("360x240")がASCIIエラーがでてましたけど、多分 x が駄目ポイきがします。それはおいおい解決で。

 GUIを呼び出せました!

f:id:mocchipa:20200321192204p:plain

おまけ

問題可決に、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

参考まで!