1

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

4

3 回答 3

1

尝试:

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

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

于 2013-03-22T22:04:56.020 回答
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()
于 2017-03-20T22:36:04.087 回答
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()
于 2017-03-25T16:16:47.307 回答