我不完全确定如何用一句话来表达我的问题。我正在使用python创建一个能够记录运动员里程数的日历。我制作了一个日历,其中包含一个7x4网格,其中包含左上角的月份编号,以及中心的一个按钮,显示“记录今天的锻炼。”
该按钮应该打开一个新窗口,允许用户输入行驶里程和速度,当用户按下新窗口底部的“日志”时,它应显示里程和步伐。按下按钮的那一天。
我的问题,我无法弄清楚如何仅替换点击信息的特定日期。因为我不想为每个月的每一天制作一个按钮,所以每天都有相同的按钮(以及相同的命令)。我需要按钮知道它在网格中的位置,并能够告诉标签在哪里放置里程和步伐。
我曾尝试研究lambda以确定它是否会有所帮助,但无济于事。这里是我的代码的相关部分(仍然是相当新的python,可能有点草率,我道歉)。
count = 0 #Code for button on every day in the month
dayCounter = numDays[0]
rowCount = 3
while (numDays[1] > count):
count = count + 1
logButton = Button(self, text=("Log Today's Workout"), command = self.log)
logButton.grid(column=dayCounter, row=rowCount)
if dayCounter == 6:
rowCount = rowCount + 1
if dayCounter <= 5:
dayCounter = dayCounter + 1
else:
dayCounter = 0
def calculate(self):
displayPace = Label(self, text= paceMin + ":" + formattedSec + " a mile.")
displayPace.grid(column=???, row=???)
我省略了很多代码。显示的是每天放置按钮的代码,以及在日历上放置节奏的代码。我尝试过在行和列中放置一些东西。我主要收到错误消息,或者在每个方框中放置相同的标签。我需要知道如何更改按钮或放入行和列的内容以仅替换单击的按钮。如果还需要其他任何东西,我会经常检查这个并经常更新。
答案 0 :(得分:0)
提供的代码很少,很难为您提供有效的解决方案;这是我要采取的方法:
def log(self, event):
x, y = event.x, event.y
date_ = self._get_date_from_canvas_location(x, y)
self.log_a_run(date_)
def _get_date_from_canvas_location(self, x, y):
"""returns the date corresponding to the canvas location clicked
"""
# do the job
return date_corresponding_to_that_location
def log_a_run(self, date_):
"""capture and save the run of of the date_
"""
# do the job
答案 1 :(得分:0)
使用上面的帖子和this one以及一些关于事件如何运作的研究(我从未听说过它们),我提出了这个:
grid_info = event.widget.grid_info()
self.displayRow = grid_info["row"]
self.displayColumn = grid_info["column"]
logButton = Button(self, text=("Log Today's Workout"))
logButton.grid(column=dayCounter, row=rowCount
logButton.bind('<Button-1>', self.log)
displayPace = Label(self, text= paceMin + ":" + formattedSec + " a mile.")
displayPace.grid(column=self.displayColumn, row=self.displayRow)