Python 2.7 Tkinter更改按钮事件上的标签文本
对Python很新颖(2.7)即时学习GUI设计(Tkinter)并继续运行到不同的语法/无调用方法/全局名称未定义错误尝试实现单击按钮时,Entry对象的简单标签文本更改。可有人告诉我正确的语法作用Python 2.7 Tkinter更改按钮事件上的标签文本
from Tkinter import *
class Part3:
def __init__(self, parent):
GUIFrame =Frame(parent,width= 300, height=200)
GUIFrame.pack(expand = False, anchor = CENTER)
entry = Entry(text="enter your choice")
entry.place(x=65, y = 10)
self.test = StringVar()
self.test.set('''Hi, I'm a Label :)''')
self.Label1 = Label(parent, textvariable = self.test)
self.Label1.place(x = 85, y = 100)
self.Button2 = Button(parent, text='edit',command=self.LabelChange)
self.Button2.place(x= 80, y = 60)
self.Button3 = Button(parent, text='exit', command= parent.quit)
self.Button3.place(x= 160, y = 60)
def LabelChange(self):
test = self.entry.get()
self.Label1(test)
root = Tk()
MainFrame =Part3(root)
root.title('Input Test')
root.mainloop()
的想法是对的“编辑”(按钮2)单击,Label1文本更改为条目的文本。
尝试:
self.entry = Entry(text="enter your choice")
...
test = self.entry.get()
self.test.set(test)
我知道大多数的教程给使用textvariables的例子,但在大多数情况下,你不需要他们。您可以在不使用文本变量的情况下获取并设置小部件中的值。文本变量主要用于对变量进行跟踪。可变轨迹是一种您几乎不需要的稍微先进的技术。
test = self.entry.get() AttributeError:Part3实例没有属性'entry' – 2013-03-22 22:09:05
@GeorgeDay:抱歉。我没有意识到你没有保存对入口小部件的引用。我已经更新了我的答案。 – 2013-03-22 22:12:34
没有更多的错误抛出,但新的代码不会对Label1产生影响 – 2013-03-22 22:17:52
from Tkinter import *
class Part3:
def __init__(self, parent):
GUIFrame =Frame(parent,width= 300, height=200)
GUIFrame.pack(expand = False, anchor = CENTER)
self.entry = Entry(text="enter your choice") # this needs to be in self
self.entry.place(x=65, y = 10)
self.test = StringVar()
self.test.set('''Hi, I'm a Label :)''')
self.Label1 = Label(parent, textvariable = self.test)
self.Label1.place(x = 85, y = 100)
self.Button2 = Button(parent, text='edit',command=self.LabelChange)
self.Button2.place(x= 80, y = 60)
self.Button3 = Button(parent, text='exit', command= parent.quit)
self.Button3.place(x= 160, y = 60)
def LabelChange(self):
self.test.set(self.entry.get())
root = Tk()
MainFrame =Part3(root)
root.title('Input Test')
root.mainloop()
root.destroy()
使用可以使用.after命令。例如:
Lbl = Label(text='Hi')
def change():
Lbl.after(3000, lambda: Lbl.config(text="hola")
# Or you can use the one below to remove delay.
Lbl.config(text='hola')
return change
Btn = Button(command=change())
Lbl.pack()
Btn.pack()
您需要修复示例代码的缩进。另外,我鼓励你不要使用'place'开始 - 使用这将创建具有较差调整行为的GUI。花一两个小时学习'pack'或'grid' - 有一个小小的学习曲线,但是你的GUI会更好。 – 2013-03-22 22:07:01