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

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

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

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

Q&A

解決済

2回答

6861閲覧

PythonのTkinterのウィンドウを閉じる方法

mendoitarou_

総合スコア22

Python 3.x

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

0グッド

0クリップ

投稿2019/04/20 05:38

制作中のもの&理由

pythonで、Tkinterを使ってアラームを作っています。

ですが、ウィンドウを閉じる方法がわからず、投稿しました。

該当のソースコード(長いので一部)(雑)

python

1import tkinter as tk 2 3def settingseve11(): 4 messagebox.showinfo("情報", "設定を保存しました。(保存できていませんw)") 5 #ここに、roottを閉じるコードを書きたいです。 6 7# 設定ボタンを押したときの動作 8def pushed1(): 9 Val1 = tk.BooleanVar() 10 print("設定ボタンが押されました。") 11 roott = tk.Tk() 12 roott = roott 13 roott.title("設定") 14 roott.geometry("320x240") 15 labell = tk.Label(roott, text="アラームの設定") 16 labell2 = tk.Label(roott, text="チェックを入れるとONになります。") 17 labell3 = tk.Label(roott, text="チェックを入れてのON,OFF切り替えは現在できません。") 18 buttonn1 = tk.Button(roott, text="アラーム1の設定", command=seting1) 19 buttonn2 = tk.Button(roott, text="アラーム2の設定", command=seting2) 20 buttonn3 = tk.Button(roott, text="アラーム3の設定") 21 CheckBoxx = tk.Checkbutton(roott, text="アラーム1") 22 CheckBoxx2 = tk.Checkbutton(roott, text="アラーム2") 23 CheckBoxx3 = tk.Checkbutton(roott, text="アラーム3") 24 buttonn4 = tk.Button(roott, text="OK", command=settingseve11) 25 labell.pack() 26 labell2.pack() 27 labell3.pack() 28 buttonn1.pack() 29 buttonn1.pack() 30 buttonn2.pack() 31 buttonn3.pack() 32 CheckBoxx.pack() 33 CheckBoxx2.pack() 34 CheckBoxx3.pack() 35 buttonn4.pack() 36 37#終了ボタンが押された時の動作 38def pushed2(): 39 print("終了ボタンが押されました。") 40 sys.exit() 41 42#初めの画面 43root = tk.Tk() 44root.title("アラームGUI") 45root.geometry("230x100") 46 47label = tk.Label(root, text="アラーム PresentedBy mendoitarou_") 48button3 = tk.Button(root, text="開始", command=alarmstart, width=10) 49button = tk.Button(root, text="設定", command=pushed1, width=10) 50button2 = tk.Button(root, text="終了", command=pushed2, width=10) 51 52label.grid() 53button3.grid() 54button.grid() 55button2.grid() 56 57 58#初めの画面 ループ 59root.mainloop()

試したこと

python

1roott.destroy()

こちらを入力しましたが、閉じられませんでした。

エラーコード
Exception in Tkinter callback Traceback (most recent call last): File "D:\Users\mendo\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__ return self.func(*args) File "C:\Users\mendo\Desktop\アラーム\start.py", line 146, in settingseve11 roott.destroy() NameError: name 'roott' is not defined

補足情報(FW/ツールのバージョンなど)

Visual Studio Code
python 3.7.3

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

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

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

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

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

hayataka2049

2019/04/20 07:44

関係ない箇所は省いた上で、エラーが出ずに実行可能なコードにしてもらえると助かります。
guest

回答2

0

ベストアンサー

roottが関数pushed1のローカル変数なので、関数settingseve11からは参照できません。

場当たり的ですが、グローバル変数にしてしまうのが一番簡単です。pushed1の定義の一行目に次のように追加してください。

python

1 global roott

これでsettingseve11からroott.destroy()できるようになります。

投稿2019/04/20 07:46

hayataka2049

総合スコア30933

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

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

mendoitarou_

2019/04/21 05:10

ありがとうございます! 無事解決いたしました。
guest

0

以下のようにトップレベル変数の_roottに設定ウインドウを保持しておくとよいかと思います。

Python

1_roott = None 2 3def settingseve11(): 4 messagebox.showinfo("情報", "設定を保存しました。(保存できていませんw)") 5 _roott.destroy() 6 # 略 7 8# 設定ボタンを押したときの動作 9def pushed1(): 10 Val1 = tk.BooleanVar() 11 print("設定ボタンが押されました。") 12 roott = tk.Tk() 13 14 global _roott 15 _roott = roott 16 17 # 略

投稿2019/04/20 07:37

can110

総合スコア38230

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

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

mendoitarou_

2019/04/21 05:10

ありがとうございます! 無事解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問