用按钮更新for循环的范围

2024-10-03 02:40:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个GUI,其中包含不确定数量的标签和for循环。 标签的数量应该可以通过按钮触发的func进行更改。 这是我的密码:

from tkinter import *


def change1():
    print(days)
    in1 = input('how many days?')
    for a in range(0, len(days)):
        days.remove(days[0])
    for a in range(0, int(in1)):
        in2 = input('type in another day:  ')
        days.append(in2)
    krofl = (days[0], '-', days[len(days)-1])
    firstlast.set(krofl)

Fenster = Tk()
Fenster.title("some title")
Fenster.minsize(width=800, height=900)
Fenster.resizable(width=FALSE, height=FALSE)

presetdays = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']

days = []

for a in range(0, len(presetdays)):
    days.append(presetdays[a])

firstlast = StringVar()
firstlast.set(str("preset value"))

lab1_1 = Label(Fenster, text='Zeitspanne:')
lab1_1.grid(row=0, column=0)

lab1_2 = Label(Fenster, textvariable = firstlast)
lab1_2.grid(row=0, column=1)

but1 = Button(Fenster, text='Change', command=change1)
but1.grid(row=0, column=2)


for a in range(0, len(days)):
    karamel = Label(Fenster, text = days[a])
    karamel.grid(row=a, column=6)

Fenster.mainloop()

我的问题是,标签列表将是周一,周二。。。。。即使按下按钮并更改了日期列表。 我尝试了以下方法:

number_days = IntVar()
number_days.set(7)

并将此添加到def change1中:

sth = int(len(days))
number_days.set(sth)

最后将for循环改为:

for a in range(0, number_days):
karamel = Label(Fenster, text = days[a])
karamel.grid(row=a, column=6)

但它返回以下错误: TypeError:“IntVar”对象不能解释为整数

有没有办法让它工作,以便所有标签在def change1()之后更新?你知道吗


Tags: inforlenrangecolumn标签dayslabel
1条回答
网友
1楼 · 发布于 2024-10-03 02:40:58

number_days不是正整数变量。它是对象IntVar。你必须使用number_days.get()


要更改标签,您必须记住列表中所有标签的karamel(例如all_labels),然后使用all_labels[number].config(text='new text')或所有标签[number]['text']=“new text'`

还可以使用some_label.grid_forget()从网格中删除标签。你知道吗

from tkinter import *


def change_labels():
    print(days)

    in1 = int(input('how many days?'))

    # remove all old days
    days.clear()

    for a in range(in1):
        in2 = input('type in another day:  ')
        days.append(in2)

    krofl = (days[0], '-', days[-1])
    firstlast.set(krofl)

    # it is simpler to remove all labels and create new labels

    # remove all old labels
    for l in labels:    
        l.grid_forget()

    # create new labels
    for number, name in enumerate(days):
        karamel = Label(Fenster, text=name)
        karamel.grid(row=number, column=6)
        labels.append(karamel)


#  -

presetdays = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']

# copy list 
days = presetdays[:]

#  -

Fenster = Tk()
Fenster.title("some title")
Fenster.minsize(width=800, height=900)
Fenster.resizable(width=FALSE, height=FALSE)

firstlast = StringVar()
firstlast.set(str("preset value"))

lab1_1 = Label(Fenster, text='Zeitspanne:')
lab1_1.grid(row=0, column=0)

lab1_2 = Label(Fenster, textvariable = firstlast)
lab1_2.grid(row=0, column=1)

but1 = Button(Fenster, text='Change', command=change_labels)
but1.grid(row=0, column=2)

#  - create labels first time

labels = []

for number, name in enumerate(days):
    karamel = Label(Fenster, text=name)
    karamel.grid(row=number, column=6)
    labels.append(karamel)

Fenster.mainloop()

相关问题 更多 >