2016-04-27 14 views
0

Ich bin mir nicht ganz sicher, wie ich meine Frage in einem Satz formulieren soll. Ich benutze Python, um einen Kalender mit der Fähigkeit zu erstellen, Meilen für Athleten zu protokollieren. Ich habe einen Kalender erstellt, der ein 7x4-Gitter enthält, das die Nummer des Monats in der oberen linken Ecke und eine Schaltfläche in der Mitte enthält, die "Log today's workout" sagt.Die gleiche Schaltfläche mit dem gleichen Befehl an mehreren Stellen einfügen, aber mit eindeutigen Funktionen

Die Schaltfläche soll ein neues Fenster öffnen, in dem der Benutzer die Laufleistung eingeben kann und wie schnell und wenn der Benutzer am unteren Rand des neuen Fensters "log" drückt, sollte die Laufleistung und die Geschwindigkeit angezeigt werden der Tag, an dem die Taste gedrückt wurde.

Mein Problem ist, dass ich nicht herausfinden kann, wie man nur den bestimmten Tag ersetzt, der mit den Informationen angeklickt wurde. weil ich keinen Knopf für jeden Tag des Monats machen wollte, habe ich den gleichen Knopf (zusammen mit dem gleichen Befehl) an jedem Tag. Ich brauche den Knopf, um zu wissen, wo im Raster es ist, und in der Lage zu sein, dem Etikett zu sagen, wo man mit dem Kilometerstand und dem Tempo platziert werden soll.

Ich habe versucht, Lambda zu erforschen, um zu sehen, ob es helfen würde, aber ohne Erfolg. hier sind relevante Teile meines Codes (immer noch ziemlich neu für Python, wahrscheinlich ein wenig schlampig, ich entschuldige mich).

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=???) 

Ich habe eine Menge Code weggelassen. Was angezeigt wird, ist der Code, mit dem man jeden Tag eine Taste drücken kann, und der Code, mit dem die Geschwindigkeit im Kalender angezeigt wird. Ich habe versucht, einige Dinge in Reihe und Spalte zu platzieren. Ich erhalte meistens Fehlermeldungen, oder er legt dasselbe Etikett in jede einzelne Box. Ich muss wissen, wie man den Knopf ändert oder was man in Reihe und Spalte setzt, um nur den Knopf zu ersetzen, der geklickt wird. Wenn noch etwas benötigt wird, werde ich das sehr häufig überprüfen und werde oft aktualisiert.

+1

Bitte bearbeiten Sie Ihren Code bis zu [MCVE] (http://stackoverflow.com/help/mcve) und teilen Sie uns genau mit, was Sie zu tun haben, wie Sie es tun und was tatsächlich passiert. – TigerhawkT3

+0

Entschuldigung, die erste Frage, die ich gestellt habe. ist die neue Frage besser? @ TigerhawkT3 –

+0

In while (numDays [1]> count) ', wo änderst du entweder 'numDays [1]' oder 'count'? Und Sie suchen vielleicht nach etwas [http://stackoverflow.com/questions/7546285/creating-lambda-inside-a-loop]. – TigerhawkT3

Antwort

0

Mit dem kleinen Code zur Verfügung gestellt, ist es schwierig, Ihnen eine funktionierende Lösung zu geben; hier ist der Ansatz würde ich nehmen:

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 
+0

Ich habe eine Antwort mit meinem letzten Code geschrieben, den ich benutzt habe, ich hätte es nicht ohne dich gemacht, danke! –

+1

Ich bin froh, dass ich helfen konnte - es ist in Ordnung, nützliche Antworten zu finden. :) –

0

den oben genannten Post Verwendung und this one und einige der Forschung auf, wie die Ereignisse gearbeitet (ich würde nie von ihnen gehört), kam ich mit auf den Punkt:

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)