如何在Python的for循环中为CustomTkinter框架关联对应日期标识(替代重复创建代码)
如何在Python的for循环中为CustomTkinter框架关联对应日期标识(替代重复创建代码)
我刚接触Python和GUI开发,最近在做一个周计划的窗口界面。我已经整理好一周的法语日期列表,想通过循环为每一天创建一个独立的框架:
(预期效果:横向排列7个垂直填充的框架,每个框架对应一周中的一天)
创建框架的循环逻辑跑通了,但我遇到了一个问题:怎么给每个框架关联对应的日期标识呢?比如让第一个框架对应Lundi_frame,第二个对应Mardi_frame... 虽然手动写7段重复代码也能搞定,但我更想搞懂怎么用循环来实现这种关联,毕竟重复代码太不优雅了。
我自己试了一段代码,但不知道怎么把循环里的day变量和框架的标识关联起来——也就是怎么把day_frame里的day替换成当前循环的日期值。(这里我用的是CustomTkinter而不是原生Tkinter,所以代码里会有CTk前缀)
我的尝试代码:
week = ['Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche'] for day in week: day_frame = CTkFrame(master=week_frame, bg_color=window_color,border_color='white',border_width=2,fg_color=window_color) day_frame.pack(side=LEFT, fill=Y, expand=YES)
最终解决方案:用字典存储框架,放弃动态命名
后来我搞明白了,其实不需要给框架做动态命名,用字典来存储是更合理的方案——把日期作为字典的键,对应的框架对象作为值,这样想调用哪个日期的框架直接通过键取就行。
修改后的代码:
week = ['Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche'] frames = {} for day in week: day_frame = CTkFrame(master=week_frame, bg_color=window_color,border_color='white',border_width=2,fg_color=window_color) day_frame.pack(side=LEFT, fill=Y, expand=YES) frames[day] = day_frame # 举个使用例子:修改"Mardi"对应框架的前景色 frames['Mardi'].configure(fg_color='white')
(实际效果:可以通过字典键直接操控指定日期的框架,比如上面的代码会把周二(Mardi)对应的框架前景色改成白色,能直观看到字典的作用)
备注:内容来源于stack exchange,提问作者Macronaute
相关产品推荐
相关产品推荐

