代码之家  ›  专栏  ›  技术社区  ›  Martin Kunze

复制tkinter上的标签并更改按钮单击时的文本?

  •  1
  • Martin Kunze  · 技术社区  · 2 年前

    我有一些这样的程序:

    from tkinter import *
    
    def apply_text(lbl_control):
        lbl_control['text'] = "This is some test!"
    
    master = Tk()
    
    lbl = Label(master)
    btn = Button(master, text="apply", command=lambda: apply_text(lbl))
    
    
    lbl.pack()
    btn.pack()
    
    mainloop()
    

    我现在的目标是复制标签的文本 lbl 没有任何能力改变它。我尝试了以下方法来解决这个问题:

    from tkinter import *
    
    def apply_text(lbl_control):
        lbl_control.insert(0, "This is some test!")
    
    master = Tk()
    
    lbl = Entry(master, state="readonly")
    btn = Button(master, text="apply", command=lambda: apply_text(lbl))
    
    
    lbl.pack()
    btn.pack()
    
    mainloop()
    

    因为 state = "readonly" 无法更改插入的文本 lbl 不再因此,如果我点击按钮,什么也不会发生 apply .我怎样才能改变它?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Sharim09    2 年前

    有一个简单的方法可以做到这一点,简单的先改变 state 进入 normal ,然后插入文本,然后更改 状态 回到 readonly .

    from tkinter import *
    
    def apply_text(lbl_control):
        lbl_control['state'] = 'normal'
        lbl_control.delete(0,'end')
        lbl_control.insert(0, "This is some test!")
        lbl_control['state'] = 'readonly'
    
    master = Tk()
    
    lbl = Entry(master, state="readonly")
    btn = Button(master, text="apply", command=lambda: apply_text(lbl))
    
    
    lbl.pack()
    btn.pack()
    
    mainloop()
    

    还有另一种方法可以使用 textvariable .
    代码: (建议)

    from tkinter import *
    
    def apply_text(lbl_control):
        eText.set("This is some test.")
    
    master = Tk()
    
    eText = StringVar()
    lbl = Entry(master, state="readonly",textvariable=eText)
    btn = Button(master, text="apply", command=lambda: apply_text(lbl))
    
    
    lbl.pack()
    btn.pack()
    
    mainloop()