web-dev-qa-db-ja.com

tkinterウィンドウを閉じるにはどうすればよいですか?

Tkinterプログラムを終了するにはどうすればよいですか?このコードがあるとしましょう:

from Tkinter import *

def quit():
    # code to exit

root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()

アプリケーションを終了するには、quit関数をどのように定義すればよいですか?

67
Matt Gregory

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
78
aki92
def quit()
    root.quit()

または

def quit()
    root.destroy()
36
Matt Gregory
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()
15
kaytec

Tkinterの終了機能を誤って理解したと思います。この関数を定義する必要はありません。

まず、次のように関数を変更する必要があります。

from Tkinter import *
root = Tk()
Button(root, text="Quit", command=root.quit).pack()
root.mainloop()

次に、「。pyw」サフィックスを使用してこのファイルを保存し、「。pyw」ファイルをダブルクリックしてGUIを実行する必要があります。今回は、ボタンをクリックするだけでGUIを終了できます。不快なDOSウィンドウはありません。 (「.py」ファイルを実行すると、quit関数は失敗します。)

6
TreeDoNotSplit

Pythonプログラムを終了する通常の方法:

sys.exit()

(終了ステータスを渡すこともできます)または

raise SystemExit

tkinterプログラムで正常に動作します。

4
dF.

混乱の場合の照明...

def quit(self):
    self.destroy()
    exit()

A)destroy()はメインループを停止し、ウィンドウを強制終了しますが、pythonは実行したままにします

B)exit()はプロセス全体を停止します

Destroy()の動作を誰かが見逃した場合に備えて、OPはtkinterプログラムを「終了」する方法も尋ねました。

3
Martin Guiles

誰かがEscapeボタンをバインドしてGUI全体を閉じたい場合:

master = Tk()
master.title("Python")

def close(event):
    sys.exit()

master.bind('<Escape>',close)
master.mainloop()
1
Nukyi

最も簡単な方法は、赤いボタン(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()
1
Ian Gabaraev

idlelib.PyShellモジュールでは、root型のTk変数はグローバルに定義されています

PyShell.main()関数の最後で、無限ループであるroot.mainloop()関数を呼び出し、root.quit()関数によってループが中断されるまで実行します。したがって、root.quit()mainloopの実行のみを中断します

そのidlelibウィンドウに関連するすべてのウィジェットを破棄するには、root.destroy()関数の最後の行であるidlelib.PyShell.main()を呼び出す必要があります。

1
RAD

次を使用できます。

root.destroy()

または

root.quit()

それが機能しない場合は、プログラムの開始時に変数があったものにルートを変更します

import tkinter

main = Tk()

main.destroy()

main.mainloop
1
JackHumphries

これを入力するだけです:

root.destroy()

そして、それをコマンドとして設定すると、プログラム全体を終了するquit()関数の原因さえ必要ありません。

1
BE Official

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()
0
kourosh
import sys
from Tkinter import *
def quit():
    sys.exit()
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()

あなたが求めていることをすべきです。

0
Harrison Sills
def quit1():
     root.destroy()

Button(root, text="Quit", command=quit1).pack()
root.mainloop()
0
user9093127

メニューバーの場合:

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()
0
LenyaKap