Python 2.7 Tkinter更改按钮事件上的标签文本

时间:2013-03-22 21:09:04

标签: user-interface button python-2.7 tkinter

我是Python(2.7)即时学习GUI设计(Tkinter)的新手,并且在尝试实现简单的标签文本更改时,继续运行不同的语法/没有调用方法/全局名称未定义错误从按钮单击的Entry对象。有人可以告诉我正确的动作语法

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

3 个答案:

答案 0 :(得分:1)

尝试:

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

我知道大多数教程都使用textvariables来提供示例,但在大多数情况下,您不需要它们。您可以在不使用textvariable的情况下获取和设置窗口小部件中的值。 Textvariables主要用于对变量进行跟踪。变量跟踪是一种您很少需要的先进技术。

答案 1 :(得分: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()

答案 2 :(得分: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()