不要从 python tkinter 条目中获取任何值
Don't get any value from python tkinter Entry
我有以下内容:
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() 中得到任何值。
点击保存按钮后,没有任何反应。
我是 tkinter 的新手,但也许您的函数是在 python 看到语句时调用的,而不是在 运行 时调用的。我这样使用 lambda:
x = Button(a, text=c, command=lambda j=c: command(j))
也许你可以根据你的需要调整我的内容。
我会尝试为 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
如果您从命令行 运行 脚本,如果它不起作用,它可能会给您一条有用的错误消息。
我有以下内容:
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() 中得到任何值。 点击保存按钮后,没有任何反应。
我是 tkinter 的新手,但也许您的函数是在 python 看到语句时调用的,而不是在 运行 时调用的。我这样使用 lambda:
x = Button(a, text=c, command=lambda j=c: command(j))
也许你可以根据你的需要调整我的内容。
我会尝试为 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
如果您从命令行 运行 脚本,如果它不起作用,它可能会给您一条有用的错误消息。