मैं एक टिंकर विंडो कैसे बंद करूं?


87

मैं एक टिंकर कार्यक्रम कैसे समाप्त करूं? मान लें कि मेरे पास यह कोड है:

from Tkinter import *

def quit():
    # code to exit

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

मुझे quitअपने आवेदन से बाहर निकलने के लिए फ़ंक्शन को कैसे परिभाषित करना चाहिए ?

जवाबों:


120

आपको destroy()टिंकर विंडो को बंद करने के लिए उपयोग करना चाहिए ।

from Tkinter import *

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

स्पष्टीकरण:

root.quit()

इसके बाद के संस्करण लाइन बस को बायपास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

2
यदि root.quit () का उपयोग किया जाता है, तो खिड़की को बाद में फिर से एक अलग स्क्रिप्ट में नष्ट होने के लिए कैसे पाया जा सकता है (इसलिए सिस्टम संसाधनों का उपयोग जारी रखने के लिए नहीं)?
राज

3
आपका पहला कथन गलत है। कॉलिंग quitसे सभी विजेट नष्ट हो जाएंगे; यदि विजेट नष्ट हो गए हैं, mainloopतो बाहर निकल जाएगा।
ब्रायन ओकले

1
कुछ शोधों के बाद मेरा मानना ​​है कि यह सब कोड लागू होने पर भी लागू होता है। इसलिए यदि आपके पास कमांड लाइन स्क्रिप्ट में TKinter का एक मेनलूप () है, तो root.quit () और root.destroy () का उपयोग करें, अन्यथा आपकी कमांड लाइन स्क्रिप्ट mainloop () के बाद कोड निष्पादित करना जारी नहीं रखेगी। मैंने इसका परीक्षण किया और यह मेरे लिए काम करता है (मुझे पता है कि TKinter ऐसे डिजाइन में उपयोग करने का इरादा नहीं है, फिर भी, यह काम करता है)
एलेक्स

क्या यह कई बार टिंकर की खिड़की को नष्ट करने और कई बार शुरू करने का एक अच्छा समाधान है
नितेश वाघमारे

40
def quit()
    root.quit()

या

def quit()
    root.destroy()

क्या किसी को पता है कि कौन सी विधि अधिक 'सही' है या क्या यह किसी अन्य की तुलना में अधिक पठनीय है
ओपल

8
क्षमा करें, मुझे उत्तर मिल गया है और मैंने सोचा कि मैं इसे साझा करूंगा। इसका उपयोग करना बेहतर है root.destroy()क्योंकि यह मुख्य प्रोग्राम लूप को समाप्त करता है। देखें: http://www.daniweb.com/software-development/python/threads/66698
ओपल

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

7

पायथन कार्यक्रम से बाहर निकलने की सामान्य विधि:

sys.exit()

(जिस से आप एग्जिट स्टेटस भी पास कर सकते हैं) या

raise SystemExit

Tkinter प्रोग्राम में ठीक काम करेगा।


3
प्रश्न टिक्कर विंडो को बंद करने के बारे में था, न कि एक कार्यक्रम जिसमें टिक्चर का उपयोग किया जाता है।
केवेर

7

मुझे लगता है कि आपने टिंकर के कार्य को गलत तरीके से समझा। इस फ़ंक्शन को आपको परिभाषित करने की आवश्यकता नहीं है।

सबसे पहले, आपको अपने फ़ंक्शन को निम्नानुसार संशोधित करना चाहिए:

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

फिर, आपको इस फ़ाइलों को सहेजने के लिए '.pyw' प्रत्यय का उपयोग करना चाहिए और अपना GUI चलाने के लिए '.pyw' फ़ाइल पर डबल-क्लिक करना चाहिए, इस बार, आप GUI को बटन के एक क्लिक के साथ समाप्त कर सकते हैं, और आप यह भी पा सकते हैं कोई अप्रिय डॉस विंडो नहीं होगी। (यदि आप '.py' फ़ाइल चलाते हैं, तो कार्य छोड़ना विफल हो जाएगा।)


5

भ्रम की स्थिति में रोशनी ...

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

ए) नष्ट () मेनलोप को रोकता है और खिड़की को मारता है, लेकिन अजगर चल रहा है

बी) निकास () पूरी प्रक्रिया को रोकता है

बस मामले में स्पष्ट करने के लिए कि कोई क्या नष्ट हो गया () कर रहा था, और ओपी ने यह भी पूछा कि एक टेंकर प्रोग्राम को "समाप्त" कैसे किया जाए।


3

आपको केवल इसे टाइप करने की आवश्यकता है:

root.destroy()

और जब आपको यह निर्धारित करने की आवश्यकता नहीं है कि आपको यह पूरा कार्यक्रम छोड़ना होगा, तो समारोह के कारण () फ़ंक्शन कारण की आवश्यकता नहीं है।


2

मामले में कोई भी पूरे जीयूआई को बंद करने के लिए अपने एस्केप बटन को बांधना चाहता है:

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

def close(event):
    sys.exit()

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

1

में idlelib.PyShellमॉड्यूल, rootप्रकार के चर Tkवैश्विक होने के लिए परिभाषित किया गया है

PyShell.main()फ़ंक्शन के अंत में इसे फ़ंक्शन कहते root.mainloop()हैं जो एक अनंत लूप है और यह तब तक चलता है जब तक कि root.quit()फंक्शन में लूप बाधित नहीं होता है। इसलिए, root.quit()केवल निष्पादन को बाधित करेगाmainloop

उस निष्क्रिय विंडो से संबंधित सभी विगेट्स को नष्ट करने के लिए, root.destroy()कॉल करने की आवश्यकता है, जो idlelib.PyShell.main()फ़ंक्शन की अंतिम पंक्ति है ।


1

आप उपयोग कर सकते हैं:

root.destroy()

या

root.quit()

यदि वह काम नहीं करता है, तो अपने प्रोग्राम की शुरुआत में अपने वैरिएबल को रूट बदलें

import tkinter

main = Tk()

main.destroy()

main.mainloop

1

सबसे आसान तरीका लाल बटन पर क्लिक करना होगा (मैकओएस पर बाईं ओर और विंडोज पर सबसे दाहिनी ओर)। यदि आप किसी विशिष्ट फ़ंक्शन को बटन विजेट से बांधना चाहते हैं, तो आप ऐसा कर सकते हैं:

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


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

जो आप पूछ रहे हैं उसे करना चाहिए।


हे हैरिसन, आपके पास बहुत देर से जवाब है जो मौजूदा उत्तरों के लिए कुछ भी अतिरिक्त प्रदान नहीं करता है। हालांकि हम भागीदारी की बहुत सराहना करते हैं लेकिन आपका जवाब कोई अतिरिक्त जानकारी प्रदान नहीं करता है। उदाहरण के लिए कुछ अन्य उत्तरों पर एक नज़र डालें, वे यह बताते हुए एक महान कार्य करते हैं कि कुछ काम क्यों करते हैं और अन्य नहीं करते हैं।
TheOneWhoPrograms

0

मेनू बार के लिए:

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

मैं टिंकर विंडो से बाहर निकलने के लिए नीचे दिए गए कोड का उपयोग करता हूं:

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

नीचे कोड स्निपेट। मैं एक छोटा सा परिदृश्य प्रदान कर रहा हूँ।

import tkinter as tk
from tkinter import *

root = Tk()

def exit():
    if askokcancel("Quit", "Do you really want to quit?"):
        root.destroy()

menubar = Menu(root, background='#000099', foreground='white',
               activebackground='#004c99', activeforeground='white')

fileMenu = Menu(menubar,  tearoff=0, background="grey", foreground='black',
                activebackground='#004c99', activeforeground='white')
menubar.add_cascade(label='File', menu=fileMenu)

fileMenu.add_command(label='Exit', command=exit)

root.config(bg='#2A2C2B',menu=menubar)

if __name__ == '__main__':
    root.mainloop()

मैंने यहां एक रिक्त विंडो बनाई है और उसी विंडो (रूट विंडो) पर फ़ाइल मेनू विकल्प जोड़ें, जहां मैं केवल एक विकल्प से बाहर निकलता हूं ।

तो बस रूट के लिए mainloop चलाते हैं

एक बार करने की कोशिश करो


0

root.destroyकाम करेगा।
root.quitकाम भी करेगा।

मेरे मामले में मेरे पास था

quitButton = Button(frame, text = "Quit", command = root.destroy)

आशा है कि इससे सहायता मिलेगी।



0
from tkinter import *

def quit(root):
    root.close()

root = Tk()
root.title("Quit Window")

def quit(root):
    root.close()

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

root.mainloop()

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन समस्या को हल करने के तरीके के बारे में अतिरिक्त संदर्भ प्रदान करता है और यह समस्या को हल करता है ताकि उत्तर के दीर्घकालिक मूल्य में सुधार हो सके।
पीपीएम

तुम एक याद कर रहे हैं )अपने में buttonऔर भी अपने समारोह गलत करार दिया।
कूल मेघ



-4

इसे इस्तेमाल करे।

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

हो सकता है कि आप रूट को पैरामीटर की तरह एक फ्रेम में भेजें जो आपने किया था। इसलिए यदि आप इसे समाप्त करना चाहते हैं तो आपको अपने पिता को फोन करना होगा ताकि वह अपने सभी बच्चों को बंद करने के बजाय यह सब बंद कर सकें।


4
कृपया सट्टा उत्तर न दें। आपको आदर्श रूप से केवल तभी पोस्ट करना चाहिए जब आपके पास एक सिद्ध और सत्यापित उत्तर हो। यदि आपके पास सुझाव हैं तो टिप्पणी में जा सकते हैं।
सुपरबाइडमैन

जब आप एक वर्ग का उपयोग कर रहे हैं, self.parent.destroy () जो मेरी स्थिति में काम किया है।
जक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.