【问题标题】:Rename the label in tkinter重命名 tkinter 中的标签
【发布时间】:2021-05-10 10:39:40
【问题描述】:

我与 tkinter 合作。我想更改标签的名称。通过在字段中输入字符并点击按钮,标签被一一重命名。也就是我第一次输入字符“Hello”,然后那个字符被插入到标签中;然后将其从现场移除。这次我必须为下一个标签输入一个字符。以此类推直到最后 (在 for 循环的帮助下)。 我这样做了,但它只适用于第一个标签,不能转到下一个标签):

win=Tk()
size=3
lbls=[]
frms=[]
def func():
    for i in range(6,9):
        lbls[i].configure(text=name.get())
        
for i in range(size):
    for j in range(size):
        frm=Frame(win,bd=2,relief="sunken")
        frm.grid(row=i,column=j)
        frms.append(frm)
        lbl=Label(frm,bg="white",fg="red",width="5")
        lbl.grid(row=0,column=0)
        lbls.append(lbl)
name=Entry(win)
name.grid(row=4,column=0)
btn=Button(win,text="Start",font=("Arial",14),command=func)
btn.grid(row=3,column=0)
win.mainloop()

【问题讨论】:

  • 请为您的代码创建一个最小可重现示例
  • 对于循环不要停止,使用计数器。
  • 那么你是想一次将文本输入到 3 个框中还是一个一个地输入?
  • 我要一一输入。这意味着我可以重命名一个条目中的每个标签。

标签: python loops tkinter


【解决方案1】:

你需要使用一个计数器并在函数内部增加它。基本上,for 循环不会等待您输入内容并按下按钮:

counter = 0
def func():
    global counter

    lbls[counter].configure(text=name.get()) 
    
    counter += 1 # Increase it by 1
    if counter >= len(lbls): # If counter is greater than items in list, then reset
        counter = 0
    name.delete(0,'end') # Clear the entry

这将在您每次按下按钮时不断更新文本。


一些设计技巧:为您的按钮和条目添加columnspan

name.grid(row=4,column=0,columnspan=3)
btn.grid(row=3,column=0,columnspan=3)

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 2016-03-18
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    相关资源
    最近更新 更多