質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

1回答

2159閲覧

AtomでPython3.7.4を動かすときにTkinterのcanvas(ウィンドウ)が立ち上がらない

dissy1q84

総合スコア26

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2020/02/10 02:22

前提・実現したいこと

Atom(エディタ)でPython3.7.4を動かす環境を作りましたが、Tkinterライブラリを使ってcanvasを表示するプログラムを実行しても、canvas(ウィンドウ)が立ち上がりません。Python標準のIDLE(開発環境)では立ち上がることを確認しているので、Atom(エディタ)との組み合わせによるものと推測していますが、解決方法がわかりません。

発生している問題

■手順1
Python3.7.4のデフォルトの開発環境(IDLE)で、Tkinterライブラリを使ったcanvasを表示するプログラム(後述のコード)を実行すると、以下の写真のようにcanvasのウィンドウが表示されます。(エイリアン)
イメージ説明

Source

1from tkinter import * 2 3window = Tk() 4window.title('エイリアン') 5c = Canvas(window, height=300, width=400) 6c.pack() 7body = c.create_oval(100, 150, 300, 250, fill='green') 8eye = c.create_oval(170, 70, 230, 130, fill='white') 9eyeball = c.create_oval(190, 90, 210, 110, fill='black') 10mouth = c.create_oval(150, 220, 250, 240, fill='red') 11neck = c.create_line(200, 150, 200, 130) 12hat = c.create_polygon(180, 75, 220, 75, 200, 20, fill='blue') 13 14def mouth_open(): 15 c.itemconfig(mouth, fill='black') 16def mouth_close(): 17 c.itemconfig(mouth, fill='red') 18def blink(): 19 c.itemconfig(eye, fill='green') 20 c.itemconfig(eyeball, state=HIDDEN) 21def unblink(): 22 c.itemconfig(eye, fill='white') 23 c.itemconfig(eyeball, state=NORMAL) 24 25words = c.create_text(200, 280, text='私はエイリアンだ!') 26def steal_hat(): 27 c.itemconfig(hat, state=HIDDEN) 28 c.itemconfig(words, text='ぼうしを返してよ!') 29 30window.attributes('-topmost',1) 31def burp(event): 32 mouth_open() 33 c.itemconfig(words, text='げっぷ!') 34c.bind_all('<Button-1>', burp) 35 36def blink2(event): 37 c.itemconfig(eye, fill='green') 38 c.itemconfig(eyeball, state=HIDDEN) 39def unblink2(event): 40 c.itemconfig(eye, fill='white') 41 c.itemconfig(eyeball, state=NORMAL) 42c.bind_all('<KeyPress-a>',blink2) 43c.bind_all('<KeyPress-z>',unblink2) 44 45def eye_control(event): 46 key = event.keysym 47 if key == "Up": 48 c.move(eyeball,0,-1) 49 elif key == "Down": 50 c.move(eyeball,0,1) 51 elif key == "Left": 52 c.move(eyeball,-1,0) 53 elif key == "Right": 54 c.move(eyeball,1,0) 55c.bind_all('<Key>', eye_control)

■手順2
Atom1.4の環境を用意し、後述する「atom-runnter」というパッケージもインストールして、Atom内でPythonが実行できる環境を構築しました。

■手順3
しかし、Atomで同プログラムを実行すると、実行結果を表示するウィンドウはAtomの右下に表示されるものの(print文はないため何も表示されません)、手順1のウィンドウが立ち上がりません。※試しにプログラムにprint("hello")を追加してみたところ、実行結果のウィンドウには正しく表示されましたが、依然としてウィンドウの方は表示されません。

Atom導入パッケージ(関係なさそうなものも含めて列挙)

atom-runner
busy-signal
indent-guide-improved
intentions
japanese-menu
linter
linter-php
linter-ui-default
script
show-ideographic-space

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

最後の行に

python

1 2window.mainloop()

を追加してみてはどうでしょうか。

対話環境では逐次ウィンドウが出るようですが、一般的な環境ではmainloopメソッドを呼び出さないとアプリケーションは動作しません(いや、ウィンドウは出るには出るけど一瞬でプロセスが終了してるのかな。どの道mainloopは必要です)。

投稿2020/02/10 02:34

編集2020/02/10 02:59
hayataka2049

総合スコア30935

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dissy1q84

2020/02/10 02:57

hayataka2049 さん いただいたアドバイスを試したところ、解決いたしました! ありがとうございました! Pythonの勉強を始めたばかりの超初心者で、本サイトへの質問も初めてでしたが、親切に教えていただき大変助かりました。引き続き頑張りたいと思います。
dissy1q84

2020/02/10 03:10

>(いや、ウィンドウは出るには出るけど一瞬でプロセスが終了してるのかな。どの道mainloopは必要です)。  そういうことだったんですね。  改めて実行結果のウィンドウを見てみたところ  >Running: python (cwd=C:\dissy1q84\Python\エイリアンをかこう.py pid=1916). Exited with code=0 in 0.21 seconds.  となっていました。後半のメッセージは、単に実行にかかった時間だけを示すものと考えていましたが、ウィンドウが閉じられるまでの時間(処理が終わるまでの時間)だったようですね。  実際、mainloopを記載したら、後半のメッセージはウィンドウを手動で閉じるまで表示されませんでした。  アドバイスいただいてわかった気づきです。改めてありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問