python - 开始时列表框是否可以转到特定行?
问题描述
我正在使用它来生成日历。
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)
解决方案
推荐阅读
- c# - 在 WPF C# 中为选定用户显示 Active Directory ThumbnailPhoto 属性的正确方法?
- android - MediaPlayer setDataSource 失败,状态=0x80000000
- postgresql - POSTGRES:致命:角色“用户名”不存在
- c# - 错误无法使用 .Net Core 3.1 在 Ubuntu 上加载文件或程序集 Tesseract
- vue.js - 找不到模块'wcjs-player'
- mysql - 连接到 Azure Mysql 服务器
- node.js - 为什么以及如何修复不调用 setTimeout 回调的异步函数?节点JS
- c - 如何在c中从左下角开始坐标?
- javascript - 我可以在递归函数中推送索引吗?
- python - pyspark:具有用户定义函数 (UDF) 的 StopWordsRemover