4

以下是我的脚本。基本上,它会要求用户在输入框中输入一个数字。一旦用户输入一个数字并单击“确定”,它将为您提供标签+按钮的组合,具体取决于用户在“输入”框中输入的数字。

from Tkinter import *

root=Tk()

sizex = 600
sizey = 400
posx  = 0
posy  = 0
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))

def myClick():
    myframe=Frame(root,width=400,height=300,bd=2,relief=GROOVE)
    myframe.place(x=10,y=10)
    x=myvalue.get()
    value=int(x)
    for i in range(value):
        Mylabel=Label(myframe,text=" mytext "+str(i)).place(x=10,y=10+(30*i))
        Button(myframe,text="Accept").place(x=70,y=10+(30*i))

mybutton=Button(root,text="OK",command=myClick)
mybutton.place(x=420,y=10)

myvalue=Entry(root)
myvalue.place(x=450,y=10)

root.mainloop()

通常,当我创建标签小部件时,我会做这样的事情

mylabel=Label(root,text='mylabel')
mylabel.pack()

因此,当我稍后想更改标签的文本时,我可以简单地执行此操作

mylabel.config(text='new text')

但是现在,由于我使用 for 循环一次创建所有标签,所以在创建标签后是否有解决各个标签的问题?例如,用户在输入框中输入“5”,程序会给我 5 个标签 + 5 个按钮。无论如何,我是否可以更改各个标签的属性(即 label.config(..))?

4

1 回答 1

3

当然!只需制作一个标签列表,调用place每个标签,然后您可以稍后引用它们并更改它们的值。像这样:

from Tkinter import *

root=Tk()

sizex = 600
sizey = 400
posx  = 0
posy  = 0
root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))

labels = []

def myClick():
    del labels[:] # remove any previous labels from if the callback was called before
    myframe=Frame(root,width=400,height=300,bd=2,relief=GROOVE)
    myframe.place(x=10,y=10)
    x=myvalue.get()
    value=int(x)
    for i in range(value):
        labels.append(Label(myframe,text=" mytext "+str(i)))
        labels[i].place(x=10,y=10+(30*i))
        Button(myframe,text="Accept").place(x=70,y=10+(30*i))

def myClick2():
    if len(labels) > 0:
        labels[0].config(text="Click2!")
    if len(labels) > 1:
        labels[1].config(text="Click2!!")

mybutton=Button(root,text="OK",command=myClick)
mybutton.place(x=420,y=10)

mybutton2=Button(root,text="Change",command=myClick2)
mybutton2.place(x=420,y=80)

myvalue=Entry(root)
myvalue.place(x=450,y=10)

root.mainloop()

另请注意!在原始代码的赋值Mylabel=Label(myframe,text=" mytext "+str(i)).place(x=10,y=10+(30*i))中,该调用设置Mylabel为 None,因为该place方法返回 None。您想将place调用分成单独的一行,就像上面的代码一样。

于 2013-04-04T05:28:03.773 回答