【发布时间】:2020-04-10 16:23:12
【问题描述】:
我正在使用 tkinter 模块编写一个日历程序,单击网格上的每一天将打印出当天的日期(月/日/年)。但是,我还想在底部添加另一个部分,显示一年中的哪一天。像这样:
例如,2020 年 1 月 1 日是一年中的第一天,3 月 20 日是一年中的第 80 天,等等。我希望我的单选按钮能够控制这两个变量,日期为一个字符串,一年中的日期为整数。这可能吗?
strDate = StringVar()
labelDate = Label(frameDay, textvariable=strDate, width=28,
font=("Consolas", "15", "bold")).grid(row=1, column=1)
# Creating the calendar grid
while day <= self.returnMaxDay():
currentDay = Date(self.month, day, self.year)
radDay = Radiobutton(frameCalendar, text=str(day),
font=("Consolas", "15", "bold"), indicatoron=0, width=4, height=1,
variable=strDate, value=str(currentDay.returnDayName()) + ", "
+ str(currentDay.returnMonthName()) + " "
+ str(day) + ", " + str(currentDay.year))
radDay.grid(row=row, column=weekDay)
day += 1
weekDay += 1
if weekDay == 7:
row += 1
weekDay = 0
labelDayOfYear = Label(window, text=str(self.dayOfYear()), font=("Consolas", "20")).pack()
【问题讨论】:
-
通过
command选项关联回调,并将所需的变量设置为回调中所需的变量。 -
@acw1668 由于我使用 while 循环创建了单选按钮,因此该变量仅采用 while 循环的最后一次迭代,始终为 28、29、30 或 31。我是不确定
command是否有效。 -
brien:它会起作用,只是你做得不对(但我不能告诉你如何在没有看到你的代码的情况下修复它)。此外,在几个地方,您将调用
grid()或pack()(始终为None)的结果分配给变量。 -
3 月 20 日将是一年中的第 80 天:您如何计算?因为
variable=跟在value=后面,所以你不能,但你可以从value字符串构建一个datetime对象。 -
如果你
command=lambda:...在循环中,那么你可能必须使用lambda arg=x:...来正确赋值command=lambda arg=x:function(arg)而不是 `command=lambda:function(x)
标签: python python-3.x tkinter