2013-03-22 110 views
1

对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文本更改为条目的文本。

+1

您需要修复示例代码的缩进。另外,我鼓励你不要使用'place'开始 - 使用这将创建具有较差调整行为的GUI。花一两个小时学习'pack'或'grid' - 有一个小小的学习曲线,但是你的GUI会更好。 – 2013-03-22 22:07:01

回答

1

尝试:

self.entry = Entry(text="enter your choice") 
... 
test = self.entry.get() 
self.test.set(test) 

我知道大多数的教程给使用textvariables的例子,但在大多数情况下,你不需要他们。您可以在不使用文本变量的情况下获取并设置小部件中的值。文本变量主要用于对变量进行跟踪。可变轨迹是一种您几乎不需要的稍微先进的技术。

+0

test = self.entry.get() AttributeError:Part3实例没有属性'entry' – 2013-03-22 22:09:05

+0

@GeorgeDay:抱歉。我没有意识到你没有保存对入口小部件的引用。我已经更新了我的答案。 – 2013-03-22 22:12:34

+0

没有更多的错误抛出,但新的代码不会对Label1产生影响 – 2013-03-22 22:17:52

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

使用可以使用.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()