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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Tkinter

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

button

HTMLで用いる<button>タグです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

5343閲覧

tkinterのdestroyが使えません

mekabugohann014

総合スコア9

Tkinter

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

button

HTMLで用いる<button>タグです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/20 04:14

ウィンドウを開いて、一言、二言話してウィンドウをとじるプログラムを書きたいのですが、destroy()を使ってもウィンドウが閉じません。どうすればいいでしょうか。
使ってる環境はpythonの「Jupiter notebook」Macのバージョンは10.15.7です。

import tkinter
from tkinter import font
import pyautogui

def push():
team3=tkinter.Label(tm,text="いつかまた、会おうぞ")
team3.pack(side="bottom")

#画面を作る
tm=tkinter.Tk()
tm.title("ゲーム画面")
tm.geometry('100x200')
team1=tkinter.Label(tm,text="待っていたぞ。無謀で愚かな若人よ。")
team1.pack(side="top")

team2=tkinter.Label(tm,text="気を揉むな。お主はただ、ここを去るがよい")
team2.pack(side="top")
btn=tkinter.Button(tm,text="押す",command=lambda:push())
btn.place(x=130,y=80)
if push:

tm.after(1000,lambda:tm.destroy())

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

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

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

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

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

nto

2020/10/20 05:02 編集

destroy自体が正常に機能せず画面が閉じられないという事でしょうか? こちらでテストした所では、destroy自体は正常に機能しております。 (が、現状のコードではボタンを押したタイミングではなくGUIが表示された時点でif文によってコードが実行されてしまっており、コードを実行するとGUIが表示された時点ですぐにdestroyされてしまいますが)
mekabugohann014

2020/10/20 05:15

はい。仰る通りです。destroy自体が正常に機能しません。macなのですが、起動するとフリーズします。
mekabugohann014

2020/10/20 05:34

質問ありがとうございます。 すいません。ターミナルで起動したら、正常に動きました。 ありがとうございました。
nto

2020/10/20 06:30

異常が解決できた様であれば、あとはDaregadaさんがご指摘されている様に修正すればその他の点についても正常に動作するかと思います。
guest

回答3

0

  • 設定完了後にmainloopを呼ばないとウィンドウが表示されない。
  • if push:は、関数pushを定義していると常にTrueになる。設定したい条件は、「ボタンを押した後で」なのでは。それなら、push関数の末尾に、tm.after(1000,lambda:tm.destroy())を書けばいい。
  • ウィンドウが100x200ピクセルと狭いため、ラベルを表示する際にwraplengthを指定しないと、ウィンドウからはみ出してしまう。
  • 「押す」ボタンが(最初のウィンドウサイズでは)見えない。おそらく、xyに設定する値が逆。

Python

1import tkinter 2 3def push(): 4 team3 = tkinter.Label(tm, text="いつかまた、会おうぞ", wraplength=100) 5 team3.pack(side="bottom") 6 tm.after(1000, lambda: tm.destroy()) 7 8 9tm = tkinter.Tk() 10tm.title("ゲーム画面") 11tm.geometry('100x200') 12team1 = tkinter.Label(tm, text="待っていたぞ。無謀で愚かな若人よ。", wraplength=100) 13team1.pack(side="top") 14 15team2 = tkinter.Label(tm, text="気を揉むな。お主はただ、ここを去るがよい", wraplength=100) 16team2.pack(side="top") 17btn = tkinter.Button(tm, text="押す", command=lambda: push()) 18btn.place(x=80, y=130) 19 20tm.mainloop()

投稿2020/10/20 04:56

Daregada

総合スコア11990

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

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

0

こんばんは。

問題文読ませていただきました。

こんな感じでいかがでしょうか?

python

1import tkinter 2 3# ボタンをクリックした場合に実行する関数 4def push(): 5 # Windowを親要素として、label Widgetを作成する。 6 # text : テキスト情報 7 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/ 8 team3 = tkinter.Label(tm, text="いつかまた、会おうぞ") 9 # Windowを親要素として、label Widgetをどのように配置するのか? 10 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 11 team3.pack() 12 13 # 第一引数 : どのくらい遅らせて、第二引数を実行するのかを時間設定する(単位はミリ秒) 14 # 第二引数 : 第一引数後に実行する関数 15 # 1秒後にWindowを閉じる。 16 # afterについて : https://kuroro.blog/python/ngQRGzqfuyK8WaCwkGid/ 17 tm.after(1000, lambda: tm.destroy()) 18 19# Windowを作成する。 20tm = tkinter.Tk() 21 22# Windowへタイトルをつける。 23tm.title("ゲーム画面") 24# Windowの画面サイズを設定する。 25# geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/ 26tm.geometry('500x500') 27 28# Windowを親要素として、label Widgetを作成する。 29# text : テキスト情報 30# Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/ 31team1 = tkinter.Label(tm, text="待っていたぞ。無謀で愚かな若人よ。") 32# Windowを親要素として、label Widgetをどのように配置するのか? 33# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 34team1.pack() 35 36# Windowを親要素として、label Widgetを作成する。 37# text : テキスト情報 38# Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/ 39team2 = tkinter.Label(tm, text="気を揉むな。お主はただ、ここを去るがよい") 40# Windowを親要素として、label Widgetをどのように配置するのか? 41# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 42team2.pack() 43 44# Windowを親要素として、button Widgetを作成する。 45# text : テキスト情報 46# command : ボタンをクリックした時に、実行する関数を設定。pushとする。 47# Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 48btn = tkinter.Button(tm, text="押す", command=lambda: push()) 49# Windowを親要素として、button Widgetをどのように配置するのか? 50# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 51btn.pack() 52 53# Windowをループさせて、継続的にWindow表示させる。 54# mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 55tm.mainloop()

ご確認のほど、よろしくお願いいたします。????‍♂️

投稿2021/06/17 10:20

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

自己解決

自己解決しました。ターミナルで起動することが条件だったようです。

投稿2021/04/04 13:01

mekabugohann014

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問