Hoe kan ek 'n tkinter venster toe te maak?
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?
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.