Tkinterプログラムを終了するにはどうすればよいですか?このコードがあるとしましょう:
from Tkinter import *
def quit():
# code to exit
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
アプリケーションを終了するには、quit
関数をどのように定義すればよいですか?
tkinterウィンドウを閉じるには、destroy()
を使用する必要があります。
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.destroy).pack()
root.mainloop()
説明:
root.quit()
上記の行Bypasses the root.mainloop()
つまり、root.mainloop()
コマンドが実行された場合、quit()
はバックグラウンドで実行されます。
root.destroy()
destroy()
コマンドが消えるとroot.mainloop()
つまりroot.mainloop()
が停止します。
したがって、プログラムを終了したいので、root.destroy()
を停止するので、mainloop()
を使用する必要があります。
ただし、無限ループを実行する場合で、Tkウィンドウを破棄したくない場合、root.mainloop()
行の後にコードを実行する場合は、root.quit()
を使用する必要があります。例:
from Tkinter import *
def quit():
global root
root.quit()
root = Tk()
while True:
Button(root, text="Quit", command=quit).pack()
root.mainloop()
#do something
def quit()
root.quit()
または
def quit()
root.destroy()
import Tkinter as tk
def quit(root):
root.destroy()
root = tk.Tk()
tk.Button(root, text="Quit", command=lambda root=root:quit(root)).pack()
root.mainloop()
Tkinterの終了機能を誤って理解したと思います。この関数を定義する必要はありません。
まず、次のように関数を変更する必要があります。
from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()
次に、「。pyw」サフィックスを使用してこのファイルを保存し、「。pyw」ファイルをダブルクリックしてGUIを実行する必要があります。今回は、ボタンをクリックするだけでGUIを終了できます。不快なDOSウィンドウはありません。 (「.py」ファイルを実行すると、quit関数は失敗します。)
Pythonプログラムを終了する通常の方法:
sys.exit()
(終了ステータスを渡すこともできます)または
raise SystemExit
tkinterプログラムで正常に動作します。
混乱の場合の照明...
def quit(self):
self.destroy()
exit()
A)destroy()はメインループを停止し、ウィンドウを強制終了しますが、pythonは実行したままにします
B)exit()はプロセス全体を停止します
Destroy()の動作を誰かが見逃した場合に備えて、OPはtkinterプログラムを「終了」する方法も尋ねました。
誰かがEscapeボタンをバインドしてGUI全体を閉じたい場合:
master = Tk()
master.title("Python")
def close(event):
sys.exit()
master.bind('<Escape>',close)
master.mainloop()
最も簡単な方法は、赤いボタン(macOSでは左端、Windowsでは右端)をクリックすることです。特定の機能をボタンウィジェットにバインドする場合は、次の操作を実行できます。
class App:
def __init__(self, master)
frame = Tkinter.Frame(master)
frame.pack()
self.quit_button = Tkinter.Button(frame, text = 'Quit', command = frame.quit)
self.quit_button.pack()
または、少し複雑にするために、プロトコルハンドラーとdestroy()
メソッドを使用します。
import tkMessageBox
def confirmExit():
if tkMessageBox.askokcancel('Quit', 'Are you sure you want to exit?'):
root.destroy()
root = Tk()
root.protocol('WM_DELETE_WINDOW', confirmExit)
root.mainloop()
idlelib.PyShell
モジュールでは、root
型のTk
変数はグローバルに定義されています
PyShell.main()
関数の最後で、無限ループであるroot.mainloop()
関数を呼び出し、root.quit()
関数によってループが中断されるまで実行します。したがって、root.quit()
はmainloop
の実行のみを中断します
そのidlelibウィンドウに関連するすべてのウィジェットを破棄するには、root.destroy()
関数の最後の行であるidlelib.PyShell.main()
を呼び出す必要があります。
次を使用できます。
root.destroy()
または
root.quit()
それが機能しない場合は、プログラムの開始時に変数があったものにルートを変更します
import tkinter
main = Tk()
main.destroy()
main.mainloop
これを入力するだけです:
root.destroy()
そして、それをコマンドとして設定すると、プログラム全体を終了するquit()関数の原因さえ必要ありません。
Tkinterウィンドウの終了には以下のコードを使用します。
from tkinter import*
root=Tk()
root.bind("<Escape>",lambda q:root.destroy())
root.mainloop()
または
from tkinter import*
root=Tk()
Button(root,text="exit",command=root.destroy).pack()
root.mainloop()
または
from tkinter import*
root=Tk()
Button(root,text="quit",command=quit).pack()
root.mainloop()
または
from tkinter import*
root=Tk()
Button(root,text="exit",command=exit).pack()
root.mainloop()
import sys
from Tkinter import *
def quit():
sys.exit()
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()
あなたが求めていることをすべきです。
def quit1():
root.destroy()
Button(root, text="Quit", command=quit1).pack()
root.mainloop()
メニューバーの場合:
def quit():
root.destroy()
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=quit)
menubar.add_cascade(label="menubarname", menu=filemenu)
root.config(menu=menubar)
root.mainloop()