tkinter 退出崩溃

4 投票
5 回答
6548 浏览
提问于 2025-04-17 18:35

我刚接触Tkinter,做了一个类似“你好,世界”的图形界面程序。但是每次我点击退出按钮时,程序就崩溃了。提前谢谢大家的帮助!

from Tkinter import *
import sys
class Application(Frame):

def __init__(self,master=None):

    Frame.__init__(self,master=None)
    self.grid()
    self.createWidgets()

def createWidgets(self):
    self.quitButton = Button(text='Quit',command=self.quit)#Problem here
    self.quitButton.grid()
app = Application()
app.master.title("Sample application")
app.mainloop()

5 个回答

0

当你使用 self.quit() 时,Python解释器会关闭,但tkinter应用程序并不会随之关闭。所以你可以试试 .destroy() 命令,然后在 .mainloop() 之后使用 sys.quit()。希望这对你有帮助。

0

这段代码现在运行得很好:

import tkinter

class MyApp(tkinter.LabelFrame):
    def __init__(self, master=None):
        super().__init__(master, text="Hallo")
        self.pack(expand=1, fill="both")
        self.createWidgets()
        self.createBindings()
    def createWidgets(self):
        self.label = tkinter.Label(self)
        self.label.pack()
        self.label["text"] = "Bitte sende ein Event"
        self.entry = tkinter.Entry(self)
        self.entry.pack()
        self.ok = tkinter.Button(self)
        self.ok.pack()
        self.ok["text"] = "Beenden"
        self.ok["command"] = self.master.destroy
    def createBindings(self):
        self.entry.bind("Entenhausen", self.eventEntenhausen)
        self.entry.bind("<ButtonPress-1>", self.eventMouseClick)
        self.entry.bind("<MouseWheel>", self.eventMouseWheel)
    def eventEntenhausen(self, event):
        self.label["text"] = "Sie kennen das geheime Passwort!"
    def eventMouseClick(self, event):
        self.label["text"] = "Mausklick an Position " \
        "({},{})".format(event.x, event.y)
    def eventMouseWheel(self, event):
        if event.delta < 0:
            self.label["text"] = "Bitte bewegen Sie das Mausrad"\
            " in die richtige Richtung."
        else:
            self.label["text"] = "Vielen Dank!"

root = tkinter.Tk()
app = MyApp(root)
app.mainloop()
4

在Tkinter中,根元素是一个Tk对象。Application应该是Tk的子类,而不是Frame

from Tkinter import *
import sys

class Application(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.grid()
        self.createWidgets()
    def createWidgets(self):
        self.quitButton = Button(text='Quit',command=self.destroy) # Use destroy instead of quit
        self.quitButton.grid()

app = Application()
app.title("Sample application")
app.mainloop()

撰写回答