【发布时间】:2014-05-27 23:00:53
【问题描述】:
编辑 2:我意识到我忘记将顶部的变量名更改为字典...我现在很生气。
编辑:我将所有这些 exec 更改为字典。
首先,请不要因为我使用 exec()/eval() 而生我的气。这是不得已而为之,我不会为此提供意见。蛮力写出变量名似乎太冗长了,我想不出更好的方法来做到这一点。
不管怎样,我正在用 python tkinter 编写一个日历应用程序,更改月份对我来说已经成为一个问题。在日历中,每当有人更改月份时,这些日子显然会从一周中的不同日子开始(2014 年 5 月从星期四开始,2014 年 6 月从星期日开始)。
不过,为了显示月份中的日期,我给每一天一个按钮和它自己的特殊变量名称,使用
exec('self.daynum'+str(7*(w-2)+d)+
' = Button(text=day, width=2)')
其中 w 和 d 是周数和天数的变量。所以,当我想隐藏这些按钮时,我相信我应该使用
exec('self.daynum'+str(day)+'.grid_forget()')
day 在 0-35 范围内循环并清除整个网格(理论上)。但是,相反,它引发了一个 AttributeError,坚持认为这些变量不存在。
有没有办法解决这个问题并隐藏我不想要的按钮,或者关于如何改造程序以不使用的建议 这些(但仍然隐藏我不想要的按钮)?
【问题讨论】:
-
您能否将所有
Button实例保存在一个字典中而不是使用exec?然后你会这样做:self.daynums[str(7*(w-2)+d)] = Button(text=day, width=2)和self.daynums[str(day)].grid_forget()。 -
哇,这听起来确实是个好主意。让我看看……
-
它仍然没有“忘记”所有的按钮。
-
我对 tkinter 不够熟悉,无法帮助您完成这部分工作。我只是想提出一些建议,以帮助您避免到处使用
exec。