[Python] Ubuntuでtkinter使用しようとしたら色々なエラーが出て大変だった話と解決方法

Python
スポンサーリンク

こんにちは~

Pythonでエクセルやcsvを自動で編集できたら仕事が楽になると思うので、色々プログラムを作成しています。

今回は、tkinterをubuntuで使用しようとしたら色々なエラーが出て大変だったので、解決方法を記事にしました。(ちなみに、windowsのpowershellだと全くエラーでなかっです)

この記事が誰かの役に立ったら幸いです。

スポンサーリンク

解決方法まとめ

最初に解決方法のまとめを書いておきます。

実行したコマンドと、インストールしたものは↓です。
詳細は次の詳細で書いてきます。

sudo nano /etc/apt/sources.list

deb http://archive.ubuntu.com/ubuntu bionic main universe
deb http://archive.ubuntu.com/ubuntu bionic-security main universe
deb http://archive.ubuntu.com/ubuntu bionic-updates main universe

sudo rm -fr /var/lib/apt/lists/

sudo apt-get install python3-tk

sudo apt-get -y install ubuntu-desktop
export DISPLAY=localhost:0.0

Xmingのインストール

ハマった内容と解決方法詳細

解決方法の詳細を↓につらつらと書いてきます。

ModuleNotFoundError: No module named ‘tkinter’

tkinterのコードを作成して実行すると

ModuleNotFoundError: No module named ‘tkinter’

と表示された。

えーー、Pythonに標準で入ってるのかと思った。
ここから、tkinterを使用できるようになるまで長い闘いが始まった。

tkinterをインストールするために↓のコマンドを実行した。

sudo apt-get install python3-tk

404 Not Found [IP: 2001:67c:1360:8001::24 80]

sudo apt-get install python3-tkを実行してみるも、

rr:1 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 python3-tk amd64 3.6.8-1~18.04
404 Not Found [IP: 2001:67c:1360:8001::24 80]
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/p/python3-stdlib-extensions/python3-tk_3.6.8-1~18.04_amd64.deb 404 Not Found [IP: 2001:67c:1360:8001::24 80]
E: Unable to fetch some archives, maybe run apt-get update or try with –fix-missing?

と弾かれる。
くそーー

ここから色々ググったが中々インストールできない。
結局↓を実行することでインストールはできた。

sudo nano /etc/apt/sources.list

そして、↓を追加する(何してるのかよくわかってないが、確かにbionicなんちゃらエラーに表示されていたので良い感じがする)

deb http://archive.ubuntu.com/ubuntu bionic main universe
deb http://archive.ubuntu.com/ubuntu bionic-security main universe 
deb http://archive.ubuntu.com/ubuntu bionic-updates main universe

さらに、↓のコマンドでキャッシュ削除?を実行して、tkinterをインストールする

sudo rm -fr /var/lib/apt/lists/
sudo apt-get install python3-tk

これでとりあえず、tkinterはインストールできた模様
ubuntuで実行した結果は↓(_tkinter.TclError: no display name and no $DISPLAY environment variableとなっているのが気になるが・・・)

  • import tkinter
    tkinter._test()
    Traceback (most recent call last):
    File “”, line 1, in
    File “/usr/lib/python3.7/tkinter/init.py”, line 3988, in _test
    root = Tk()
    File “/usr/lib/python3.7/tkinter/init.py”, line 2023, in init
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
    _tkinter.TclError: no display name and no $DISPLAY environment variable
    tkinter.Tcl().eval(‘info patchlevel’)
    ‘8.6.8’

tkinter.TclError: no display name and no $DISPLAY environment variable

インストールは出来たが、実行すると・・・

tkinter.TclError: no display name and no $DISPLAY environment variable

環境変数関連でエラーが出る模様・・・やはり・・・

↓のコードを追加して実行してみる。

if os.environ.get('DISPLAY','') == '':
    print('no display found. Using :0.0')
    os.environ.__setitem__('DISPLAY', ':0.0')

_tkinter.TclError: couldn’t connect to display “0.0”

上記を実行した結果

_tkinter.TclError: couldn’t connect to display “0.0”

なんかエラーが変わったーw

中々ゴール出来ない・・・

このエラーについては、GUIのインストールとXmingのインストールを実施し、環境編集を設定することで解消しました。これでようやくtkinterが使用できるようになりました。

GUIのインストール

調べてみるとUbuntuにGUIを入れていないことによるエラーとのことだったので、↓のコマンドでGUIを入れる※インストールに長時間かかった・・・

sudo apt-get -y install ubuntu-desktop

Xmingのインストール

Xmingなるものをインストールして、環境変数を設定する。
変数は↓に合わせる

export DISPLAY=localhost:0.0

とコマンドを打つ。

そうするとようやく、tkinterを起動することができた

使用したコード

サンプルとして↓のコードを使用して動作することを確認しました。

import pandas as pd
import os, tkinter, tkinter.filedialog, tkinter.messagebox

root = tkinter.Tk()
root.withdraw()
fTyp = [("","*")]
iDir = os.path.abspath(os.path.dirname(__file__))
tkinter.messagebox.showinfo('test','処理ファイルを選択してください!')
file = tkinter.filedialog.askopenfilename(filetypes = fTyp,initialdir = iDir)
df = pd.read_csv(file, encoding='shift-jis')
print(df)

以上になります!!

コメント

タイトルとURLをコピーしました