2016-10-18 4 views
3

Ich mache eine GUI für ein medizinisches Werkzeug als ein Klassenprojekt. In Anbetracht einer Bedingung sollte es eine Reihe von Behandlungsoptionen ausgeben, die von verschiedenen Websites wie webMD gesammelt wurden. Ich möchte in der Lage sein, Mouseover-Ereignisse bei einer der aufgeführten Behandlungen zu behandeln, um ein wenig mehr Informationen über die Behandlung zu geben (z. B. die Kategorie des Medikaments, ob es sich um ein Generikum handelt oder nicht).Erstellen einer Liste von Maus über Ereignisfunktionen in Tkinter

Die Etiketten werden in einer Liste gespeichert, da ich keine Ahnung habe, wie viele verschiedene Behandlungen vorher zurückgegeben werden. Also meine Frage ist, wie kann ich diese mouseover Ereignisse arbeiten lassen. Ich kann keine Funktionsdefinition für jede einzelne mögliche Bezeichnung schreiben, sie würden in den Hunderten oder Tausenden nummerieren. Ich bin mir sicher, dass es einen sehr pythischen Weg gibt, aber ich habe keine Ahnung was.

Hier ist mein Code für die Erstellung der Etiketten:

def search_click(): 
     """ 
     Builds the search results after the search button has been clicked 
     """ 
     self.output_frame.destroy()             # Delete old results 
     build_output()                # Rebuild output frames 
     treament_list = mockUpScript.queryConditions(self.condition_entry.get()) # Get treatment data 
     labels = [] 
     frames = [self.onceFrame, self.twiceFrame, self.threeFrame, self.fourFrame] # holds the list of frames 
     for treament in treament_list:            # For each treatment in the list 
      label = ttk.Label(frames[treament[1] - 1], text=treament[0])   # Build the label for treatment 

      labels.append(label)             # Add the treatment to the list 
      label.pack()   

und hier ist das, was die GUI aussieht (nicht beurteilen [-;) GUI image

Der Text "über Drogen für Informationen Hover" sollte geändert werden, abhängig davon, über welches Medikament Ihre Maus schwebt.

+0

ich Ihren Code nicht verstehen, mit dem Namen Sie die Funktion 'search_click 'Aber es scheint, dass Sie nach Mouseover-Code fragen? Sie haben auch keinen Hinweis darauf gegeben, wo und was der tatsächliche Mouseover-Text sein sollte - wollen Sie nur den Namen des Artikels? oder zieht das aus einer Datei? – enderland

+0

Ja, die Funktion search_click wird ausgeführt, wenn jemand auf die Suchschaltfläche klickt, sodass keine der Drogen angezeigt wird, bevor sie angeklickt wurde. Daher müsste alles, was mit mouseover-Ereignissen zu tun hat, danach auftreten. Ich habe diesen Code hauptsächlich eingefügt, damit die Leute verstehen, wie die Labels erstellt werden. Am Ende würde diese Information wahrscheinlich aus einer anderen Datei stammen, aber im Moment wäre ich nur mit dem Namen der Droge zufrieden, also verstehe ich, wie es geht. – bendl

Antwort

3

Ich kann keine Funktionsdefinition für jede einzelne mögliche Bezeichnung schreiben, sie würden in den Hunderten oder Tausenden nummerieren. Ich bin mir sicher, dass es einen sehr pythischen Weg gibt, aber ich habe keine Ahnung was.

Auschecken lambda functions die sind fast identisch mit dem, was Sie wollen.

In Ihrem Fall so etwas wie:

def update_bottom_scroll_bar(text): 
    # whatever you want to do to update the text at the bottom 

for treatment in treament_list: # For each treatment in the list 
    label = ttk.Label(frames[treatment[1] - 1], text=treatment[0]) # Build the label for treatment 

    label.bind("<Enter>", lambda event, t=treatment: update_bottom_scroll_bar(text=t)) 
    label.bind("<Leave>", lambda event: update_bottom_scroll_bar(text='Default label text')) 

    labels.append(label) # Add the treatment to the list 
    label.pack() 

Geben Sie bitte auch Ihre Variablen richtig buchstabieren, ich treament-treatment korrigiert ...

+0

Ups, der eine Nachteil der Code-Vervollständigung, verewigen Tippfehler xD – bendl