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

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

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

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

Tkinter

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

Python

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

Q&A

解決済

1回答

31295閲覧

tkinterをexit()で抜ける場合、その前にroot.quit()で閉じた方が良いのかどうか

Aki1000

総合スコア78

Python 3.x

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

Tkinter

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

Python

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

0グッド

0クリップ

投稿2018/11/15 05:03

単にPythonでのプログラミングに対して好奇心で聞くので、そういうプログラミングの仕様というか、方針について教えて頂けるとありがたいです。

tkinterで指定秒数、指定の大きさで、指定の文字列を表示する吹き出しを作っています。
指定時間後にroot.quit()でtkinterを閉じて、exit()で抜けているのですが、root.quit()が無くても動作は同じです。

はたしてroot.quit()はやる必要があるのでしょうか?
まったく詳しくないのですが、こう、メモリの解放とかなんとか、閉じた方が良い理由はありますか?
ファイルの読み書き調べた時に、openで開いたファイルを閉じないとメモリを専用するからcloseでちゃんと閉じるか、最近ではwithで必ず閉じるようにして開いているという話を読んだでので気になりました……

Python

1from tkinter import Tk,StringVar,Label 2def fukidasi(mes, setTime = 2, x=50, y=50,width = 900,height = 150 ): 3 root = Tk() 4 root.option_add('*font', (u'MS ゴシック', 40)) 5 root.geometry('{}x{}+{}+{}'.format(width, height, x, y)) 6 root.attributes("-topmost", True) 7 setTime = setTime*1000 8 9 buff = StringVar() 10 buff.set('') 11 12 Label(textvariable=buff).pack() 13 14 def endup(): 15 root.quit() 16 exit() 17 18 def show_text(): 19 buff.set(mes) 20 if setTime != 0: 21 root.after(setTime, endup) 22 23 show_text() 24 root.mainloop()

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

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

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

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

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

guest

回答1

0

ベストアンサー

貴殿の記述の通り、
「ファイルの読み書き調べた時に、openで開いたファイルを閉じないとメモリを専用するからcloseでちゃんと閉じるか」
は、気になるところです。
貴殿のコードを丸コピして下記で試しました。

python

1fukidasi('Hello')

しっかり、動作を確認しました。
rootオブジェクトのメソッドのendupで

python

1def endup(): 2 root.quit() 3 exit()

で、
root.quit()が無いとき、とexit()が無い時、それぞれで試しましたが、見た目は全く同じ動作をしました。
ただ、tkinterのDocumentのコード例を見ますと

python

1self.quit.pack()

と記述されており、quit()だけで良いと思われます。
終了には、他の方法もあり、

python

1import sys 2 3sys.exit()

という表現もされますが、もし、マルチプロセスやマルチスレッドで実行の場合、これでは、全部実行を止めてしまうので、よろしくないと思います。
exit()で、他に、pythonで起動したプログラムが走っているものも、実行を止めてしまうか否かまで、探せませんでした。
貴殿のTkのみ走っていて、他に使わない保証があるならば、exit()が入っていても構いませんが、もし、将来、別のpythonプロセスが走っていて、且つ、このプログラムを誰かが実行する可能性があるならば、バグの原因になると思われるので、root.quit()。つまり、そのプロセスのみ終了するとした方が良いと思います。

詳しくは、TKのドキュメントをお読みになると良いと思います。

それから、open文の場合、closeを忘れてしまうので、with ステートメントから始める方が良い事とは、異なると思います。この場合は、あくまで、インメモリの開放忘れ防止なので、別件と考えます。

投稿2018/11/17 09:34

hit701

総合スコア148

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

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

Aki1000

2018/11/19 00:42

quit()ではなく、exit()だけで良いかどうかと言う事が知りたいな、と
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問