سؤال

كيف أنهي برنامج Tkinter؟لنفترض أن لدي هذا الرمز:

from Tkinter import *

def quit():
    # code to exit

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

كيف يجب أن أحدد quit وظيفة للخروج من طلبي؟

هل كانت مفيدة؟

المحلول

يجب عليك استخدام destroy() لإغلاق نافذة tkinter.

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

نصائح أخرى

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" لتشغيل واجهة المستخدم الرسومية الخاصة بك، وهذه المرة، يمكنك إنهاء واجهة المستخدم الرسومية بنقرة زر، ويمكنك أيضًا العثور على ذلك لن تكون هناك نافذة DOS غير سارة.(إذا قمت بتشغيل الملف ".py"، فستفشل وظيفة الإنهاء.)

الطريقة المعتادة للخروج من برنامج بايثون:

sys.exit()

(والتي يمكنك أيضًا تمرير حالة الخروج إليها) أو

raise SystemExit

سوف تعمل بشكل جيد في برنامج Tkinter.

الإضاءة في حالة الارتباك ...

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

أ) تدمير () يوقف الحلقة الرئيسية ويقتل النافذة، لكنه يترك الثعبان قيد التشغيل

ب) خروج () يوقف العملية برمتها

فقط للتوضيح في حالة فاتت شخص ما ما كان يفعله التدمير () ، وسأل OP أيضًا عن كيفية "إنهاء" برنامج tkinter.

في 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

أسهل طريقة هي النقر على الزر الأحمر (أقصى اليسار على نظام التشغيل 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()

في حالة رغبة أي شخص في ربط زر Escape الخاص به بإغلاق واجهة المستخدم الرسومية بأكملها:

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

def close(event):
    sys.exit()

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

ما عليك سوى كتابة هذا:

root.destroy()

ولا تحتاج حتى إلى وظيفة الإقلاع عن التدخين () لأنه عندما تقوم بتعيين ذلك كأمر فإنه سيتم إنهاء البرنامج بأكمله.

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

يجب أن تفعل ما تطلبه.

لأشرطة القائمة:

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

أستخدم الرموز أدناه للخروج من نافذة 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()

جرب هذا:

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

جرب هذا.

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

ربما ترسل معلمة مثل الجذر إلى الإطار الذي قمت به.لذلك إذا كنت تريد الانتهاء منه عليك أن تتصل بوالدك حتى يتمكن من إغلاق كل شيء، بدلاً من إغلاق كل واحد من أبنائه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top