Vra

Hoe kan ek uiteindelik 'n Tkinter program? Kom ons sê ek het hierdie kode:

from Tkinter import *

def quit():
    # code to exit

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

Hoe moet ek definieer die quit funksie om my aansoek te verlaat?

Was dit nuttig?

Oplossing

Jy moet destroy() gebruik om 'n tkinter venster toe te maak.

from Tkinter import *

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

Verduideliking:

root.quit()

Die bo lyn net Lei om die root.mainloop() d.w.z root.mainloop() sal steeds loop in die agtergrond as quit() opdrag uitgevoer word.

root.destroy()

Hoewel destroy() opdrag verdwyn uit root.mainloop() d.w.z root.mainloop() tot stilstand kom.

So as jy net wil die program afsluit sodat jy moet root.destroy() gebruik as dit sal dit stop die mainloop().

As jy wil 'n paar oneindige lus loop en jy nie wil hê om jou Tk venster vernietig en wil 'n paar kode uit te voer na root.mainloop() lyn dan moet jy root.quit() gebruik. Ex:

from Tkinter import *
def quit():
    global root
    root.quit()

root = Tk()
while True:
    Button(root, text="Quit", command=quit).pack()
    root.mainloop()
    #do something

Ander wenke

def quit()
    root.quit()

of

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

Ek dink jy die stop funksie van Tkinter verkeerdelik verstaan. Hierdie funksie is dit nie nodig om te definieer.

In die eerste plek moet jy jou funksie verander soos volg:

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

Dan moet jy gebruik '.pyw' agtervoegsel om hierdie lêers te red en dubbelkliek op die ".pyw 'n lêer op jou GUI, dié keer uit te voer, kan jy die GUI eindig met 'n klik van die knoppie, en jy kan ook vind dat daar geen onaangename DOS venster sal wees. (As jy die '.py 'n lêer uit te voer, sal die stop funksie misluk.)

Die gewone metode om 'n Python uittree:

sys.exit()

(waaraan jy kan ook 'n afrit status slaag) of

raise SystemExit

sal goed werk in 'n Tkinter program.

Verligting in geval van verwarring ...

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

A) te vernietig () stop die mainloop en doodslaan die venster, maar laat luislang loop

B) uitgang () tot stilstand kom die hele proses

Net om te verduidelik in geval iemand gemis wat vernietig () besig was, en die OP het ook gevra hoe om "einde" n tkinter program.

In idlelib.PyShell module, is root veranderlike van tipe Tk gedefinieer globale te wees

Aan die einde van PyShell.main() funksie dit noem root.mainloop() funksie wat 'n oneindige lus en dit loop totdat die lus is onderbreek deur root.quit() funksie. Dus, sal root.quit() net onderbreek die uitvoering van mainloop

Met die oog op al widgets met betrekking tot daardie idlelib venster vernietig, root.destroy() moet genoem word, wat is die laaste linie van idlelib.PyShell.main() funksie.

Jy kan gebruik:

root.destroy()

of

root.quit()

As dit nie werk nie, verandering wortel van wat ooit jou veranderlike was aan die begin van jou program

import tkinter

main = Tk()

main.destroy()

main.mainloop

Die maklikste manier sou wees om op die rooi knoppie (linker op MacOS en regterkantste op Windows). As jy wil 'n spesifieke funksie bind aan 'n knoppie widget, kan jy dit doen:

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

Of, om dinge 'n bietjie meer kompleks, gebruik protokolhanteerders en die destroy() metode maak.

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

In geval wil iemand om hul Escape knoppie bind aan die sluiting van die hele GUI:

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

def close(event):
    sys.exit()

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

jy moet net hierdie tipe:

root.destroy()

en jy hoef nie eens die ophou () funksie oorsaak nodig het wanneer jy stel dat as commmand sal dit die hele program te hou.

def quit1():
     root.destroy()

Button(root, text="Quit", command=quit1).pack()
root.mainloop()
import sys
from Tkinter import *
def quit():
    sys.exit()
root = Tk()
Button(root, text="Quit", command=quit).pack()
root.mainloop()

Indien doen wat jy vra.

Vir menu bars:

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

Ek gebruik onder kodes vir die uitgang van Tkinter venster:

from tkinter import*
root=Tk()
root.bind("<Escape>",lambda q:root.destroy())
root.mainloop()

of

from tkinter import*
root=Tk()
Button(root,text="exit",command=root.destroy).pack()
root.mainloop()

of

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

of

from tkinter import*
root=Tk()
Button(root,text="exit",command=exit).pack()
root.mainloop()

Probeer hierdie:

from Tkinter import *
import sys
def exitApp():
    sys.exit()
root = Tk()
Button(root, text="Quit", command=exitApp).pack()
root.mainloop()

Probeer hierdie.

    self.parent.destroy() 
    self.parent.quit()

miskien wortel stuur jou soos parameter om 'n raam wat jy gedoen het. So as jy wil om dit te voltooi moet jy jou pa bel sodat hy dit alles kan sluit, in plaas van die sluiting van elkeen van sy kinders.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top