4

我对 Tkinter 很陌生。我在 Tkinter 中制作了这个类似于“Hello World”的 GUI 程序。但是,每次我单击退出按钮时,程序都会崩溃。提前致谢!

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

5 回答 5

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()
于 2013-03-10T14:56:31.717 回答
0

尝试使用raise SystemExit 它可能会更好。或查看

于 2019-08-15T08:15:35.293 回答
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()
于 2016-10-31T13:50:52.910 回答
0

你的使用__init__困难。做这个:

from tkinter import *
root = Tk()

btn_quit = Button(root, text='Quit', command=quit()).pack()
root.mainloop()

如果你这样做self.quit,那就是退出命令,所以事情会崩溃!希望这可以帮助!

于 2017-10-17T18:28:12.247 回答
0

当您使用 self.quit()python 解释器关闭时,没有 tkinter 应用程序 bieng 关闭。所以尝试.destroy()命令和.mainloop()使用后sys.quit()。希望这可以帮助。

于 2017-07-20T08:21:02.827 回答