【WSL1】Tkinterの起動エラーを解消する

Web
スポンサーリンク

本記事は以下を目的としております。

WSL環境でGUIアプリを立ち上げようとした時に発生するエラーの解消方法を、Tkinterを例に紹介します。

PythonライブラリのTkinterを使用して、GUIアプリを作成しようとしたところ、

TclError: no display name and no $DISPLAY environment variable
というエラーメッセージが表示され、詰まってしまいました。

今回はWSL1のPythonでTkinterを使用するためにしたことをまとめます。

環境

Windows 10 Home 2004
WSL1 Ubuntu 20.04 LTS
Pyenv 2.0.1-6-g5f751985
Python 3.8.2

VcXsrvをインストール

WSL1は標準ではコマンドライン操作しかできないので、GUIアプリを描画するためのXサーバー(Window X Server)を導入する必要があります。

今回は無償で使用できるVcXsrvを利用します。

インストールからスタートアップへの登録までの手順を記載します。

こちらからダウンロードをしてください。 ダウンロードが完了したらインストーラーを起動します。

インストール時のオプションはひとまず標準で進めます。

任意の場所にインストールします。

Multiple windowsを選択します。

Start no clientを選択します。

Disable access controlにチェックします。

Save configurationをクリックしてconfig.xlaunchを作成します。

VcXsrvのインストールは完了です。次にスタートアップに登録します。

先ほど作成したconfig.xlaunchをVcXsrvのインストール先のフォルダに移動します。

次にWindowsのスタートアップフォルダを開きます。

フォルダのパスに、

shell:startup

と入力するとスタートアップフォルダを開けます。

デスクトップに作成されたXLaunchのショートカットをスタートアップフォルダに移動します。

その後、ショートカットのプロパティを開き、ショートカットタブのリンク先の末尾に

-run config.xlaunch
を追加し、適用、OKをクリックするとスタートアップへの登録が完了します。

環境変数DISPLAYを設定

環境変数DISPLAYを.bash_profileに設定します。

これを設定しないとGUIが描画されません。

.bash_profileに以下のコマンドを入力し保存します。

export DISPLAY=:0.0

以上で、設定は完了です。

動作チェック

表示できるかどうか、アプリを立ち上げて確認します。

from tkinter import *
from tkinter import ttk


root = Tk()
root.title("Hello Tkinter")

mainframe = ttk.Frame(root)
mainframe.grid(column=0, row=0)
ttk.Label(mainframe, text="Hello Tkinter").grid(column=0, row=0)

root.mainloop()
以上のコードをコードエディタ等でhello.pyとして保存します。

python hello.py
保存した.pyを実行します。

画像の通りに表示されたら、問題無く動作します。お疲れさまでした。

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