我正在创建一个使用tkinter显示年度日历的python程序。
但是,我偶然发现了这个问题--每当有人改变这个月时,这些日子显然不得不在我的网格中重新安排自己。我怎样才能做到这一点?例如,2014年5月1日从周三开始。因为我的日历是0-10,我的日历是2-7行和2-8行,所以我希望数字开始于row=2,col=6,31在row=6,col=8。
我怎么能这么做?欢迎任何帮助或建议。尤其是到目前为止,我认为每个元素都需要一个标签,每个标签都需要有自己的名称。或者,在tkinter中可能还有一些我不知道的小部件,可以帮我解决这个问题。
发布于 2014-05-22 02:52:07
你能贴个代码片段吗?我不确定我是否理解这个问题,但我的第一个想法是生成一个网格,并将tk.Labels分配到每个点,并将对它们的引用保存在列表(或2-D列表)中。然后,当你需要更新的时候,打电话给
self.labels[i][j].config(text='foo')然后遍历i和j,根据日历的布局设置值。
编辑:不,我不会硬编码它,使用循环应该很简单,例如:
import math
# Initialize the calendar matrix
cal = []
for i in range(5): # 5 weeks
cal.append([])
for j in range(7): # 7 days per week
cal[i].append('')
# Set the calendar for some month
start = 3 # Wed
for day in range(31):
row = math.floor( (day+start) / 7)
col = (day+start) - 7*row
cal[row][col] = str(day+1)
print(cal)吐出来
[['', '', '', '1', '2', '3', '4'], ['5', '6', '7', '8', '9', '10', '11'], ['12', '13', '14', '15', '16', '17', '18'], ['19', '20', '21', '22', '23', '24', '25'], ['26', '27', '28', '29', '30', '31', '']]当然,在GUI中,您可能希望有一个tk.Label或其他的矩阵。
https://stackoverflow.com/questions/23795777
复制相似问题