Tkinter:如何删除输入字段而不导致错误?
我试图在用户给出其姓名后删除一个输入字段,但使用以下代码时出错:Tkinter:如何删除输入字段而不导致错误?,tkinter,python-2.7,Tkinter,Python 2.7,我试图在用户给出其姓名后删除一个输入字段,但使用以下代码时出错: from Tkinter import * from random import randrange class Application(Frame): def __init__(self): Frame.__init__(self) self.grid() self.nameEntry = Entry(self) self.nameEntry.grid
from Tkinter import *
from random import randrange
class Application(Frame):
def __init__(self):
Frame.__init__(self)
self.grid()
self.nameEntry = Entry(self)
self.nameEntry.grid(row=0, column=0, columnspan=4)
self.setupBtn = Button(self, text = "Generate", command=self.setup)
self.setupBtn.grid(row=4, column=0, columnspan=4)
self.preText = Text(self, width=50, height=3, wrap=WORD)
self.preText.grid(row=6, column=0, columnspan=4)
self.preText.delete(0.0, END)
self.preText.insert(0.0, "If you enter your name, i'll give you a random number each time!")
self.statusLbl = Label(self, text="What's your name?", bg="white")
self.statusLbl.grid(row=7, column=0, columnspan=4, sticky=W)
def setup(self):
name = self.nameEntry.get()
if name != "":
self.nameEntry.destroy()
self.setupBtn = Button(self, text = "Roll Again", command=self.setup)
self.setupBtn.grid(row=4, column=0, columnspan=4)
randomNumber = randrange(10, 100)
if name == "":
message = "Your name please!"
self.preText.delete(0.0, END)
self.preText.insert(0.0, message)
else:
self.preText.delete(0.0, END)
self.preText.insert(0.0, str(randomNumber))
Application().mainloop()
以下是错误:
Tkinter回调回溯中出现异常(最近一次调用为last):
我想在用户输入名称并单击滚动按钮后删除名称输入字段。但我没有滚动,而是得到了那个错误
有人能帮我吗?据我所知,这是因为name=self.nameEntry.get()
用于存储到name中,因此,当我删除它时,它会导致一个问题。你有解决办法吗?我不是很好,因此不确定如何继续。这里有两个选择:
(快速和肮脏)您可以将setup()中的第一个if更改为:
grid_forget()导致Tk删除小部件,但实际上并没有销毁它。此外,您不需要重新创建按钮,只需告诉它更改其文本即可。另一种方法是在中设置self.name=None并将setup()更改为:
不幸的是,我还没有找到Tkinter/ttk的一个好的中央信息源,但以下是我找到的:
- (从这里开始,教程有一些很棒的东西)
- (特金特文件)
- (2.7 Python ttk模块)
- (用于真正深入挖掘tcl/tk 8.5文档)
尽可能使用ttk小部件,它们使您的应用程序看起来更像本机主机应用程序。至于Tix,它主要是为了向后兼容。grid\u forget()对我来说很有用。谢谢你的帮助。在这之前我没有试过grid_forget()。不管怎样,你知道我可以在哪里查看我可以使用的方法列表,这样我就不会再遇到这样的问题了吗?
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__ return self.func(*args)
File "C:/Users/User/Desktop/app.py", line 25, in setup name = self.nameEntry.get()
File "C:\Python27\lib\lib-tk\Tkinter.py", line 2391, in get return self.tk.call(self._w, 'get')
TclError: invalid command name ".45073096L.45073736L"
if name != "":
self.nameEntry.grid_forget()
self.setupBtn.config(text="Roll Again")
def __init__(self):
self.name=None
# rest of __init__ the same
def setup(self):
if not self.name:
self.name = self.nameEntry.get()
self.nameEntry.destroy()
self.setupBtn.config(text="Roll Again")
randomNumber = randrange(10, 100)
if not self.name:
message = "Your name please!"
self.preText.delete(0.0, END)
self.preText.insert(0.0, message)
else:
self.preText.delete(0.0, END)
self.preText.insert(0.0, str(randomNumber))