1

我有以下内容:

class Example(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.menu()

    def menu(self):
        self.parent.title("Simple menu")
        menubar = Menu(self.parent)
        self.parent.config(menu=menubar)
        configmenu = Menu(menubar, tearoff=0)
        configmenu.add_command(label="Add Player", command=self.addplayer)
        menubar.add_cascade(label="Config", menu=configmenu)
        menubar.add_command(label="Exit", command=self.onexit)

    def onexit(self):
        self.quit()

    def addplayer(self):
        toplevel = Toplevel()
        toplevel.focus_set()
        Label(toplevel, text='first name').grid(row=1, column=0, sticky='W')
        fn = Entry(toplevel, text='first name')
        fn.grid(row=1, column=1, sticky='W')
        indb = insertdb()
        Button(toplevel, text='Save', command=indb.foo(fn.get())).grid(row=4, column=0, pady=1)
        Button(toplevel, text='Abort', command=toplevel.destroy).grid(row=4, column=1, pady=1)


class insertdb():
    def __init__(self):
        # db foo
        return

    def foo(self, fn):
        # toplevel.destroy()
        print(fn)

这只是一个例子,仍然不完整。我不明白,为什么我没有从 fn.get() 获得任何价值。点击保存按钮后,没有任何反应。

4

2 回答 2

2

我是 tkinter 的新手,但也许你的函数是在 python 看到语句时而不是在运行时调用的。我像这样使用 lambda:

x = Button(a, text=c, command=lambda j=c: command(j))  

也许你可以根据你的需要调整我所拥有的。

于 2016-03-14T07:51:49.127 回答
0

我会尝试为 定义一个单独的函数indb.foo(fn.get(),并将函数名称分配为按钮的命令。你可以把它放在一个try/except格式中:

def fooget():
    from tkinter import messagebox
    # May need to set nonlocal variable for the Entry here and in addplayer
    try:
        indb.foo(fn.get())
    except:
        messagebox.showerror(message='No luck') # or words to that effect

如果您从命令行运行脚本,如果它不起作用,它很可能会为您提供有用的错误消息。

于 2016-03-14T17:07:18.290 回答