首页 > 解决方案 > 开始时列表框是否可以转到特定行?

问题描述

我希望此列表框在开始时转到当前日期。 在此处输入图像描述

我正在使用它来生成日历。

import holidays
    def date_range(date1, date2):
        listboxMain.delete(0, tk.END)
        us_holidays = holidays.UnitedStates(state="PA")
        
        
        def daterange(date1, date2):
            for n in range(int((date2 - date1).days) + 1):
                yield date1 + timedelta(n)
    
        for i, dt in enumerate(daterange(date1, date2)):
            holiday = us_holidays.get(dt)
            if not holiday:
                holiday = ""
    
            day, date, month, year = dt.strftime('%A %d %B %Y').split()
            line = f'{day:10s} {date} {month:>10s} {year:>7} {holiday}'
    
            if (datetime.date.today() - dt).days == 0:
                TODAY_INDEX = i
    
            listboxMain.insert(i, line)
            index = listboxMain.get(0, tk.END).index(line)
            # print(line, index, i,"after line insert line 76")
    
        listboxMain.itemconfig(TODAY_INDEX, {'bg': '#cc9900'})
        listboxMain.itemconfig(TODAY_INDEX, {'fg': '#000099'})

    button_calender = tk.Button(lower2_frame, text="Calendar", fg='#99ceff', bg='#32475a', font=(
        'Times', 18), borderwidth =' 8', command=lambda: date_range(A_WEEK_AGO, A_450_DAYS_AHEAD))

我试图用这个来获取当前的日期索引。

def day_today():
        dt = datetime.date.today()
        day, date, month, year = dt.strftime('%A %d %B %Y').split()
        return f'{day:10s} {date} {month:>10s} {year:>7}'

index = listboxMain.get(0, tk.END).index(day_today())

但是得到了这个错误:

ValueError: tuple.index(x): x not in tuple

如果我最终得到索引,有没有办法自动滚动到索引所在的行?

更新: 正如 BryanOakley 暗示的那样,我没有使用相同的索引格式来获取当前日期行。

return f'{day:10s} {date} {month:>10s} {year:>7}'

不得不改成

return f'{day:10s} {date} {month:>10s} {year:>7} {holiday}'

现在,当日历以这两行开头时,我终于可以滚动到当天。

index = listboxMain.get(0, tk.END).index(day_today())
listboxMain.see(index)

标签: pythontkinterlistbox

解决方案


推荐阅读