Button-1 Event an Frame binden

Fragen zu Tkinter.
Antworten
tobi45f
User
Beiträge: 24
Registriert: Montag 22. Februar 2021, 14:31

Hallo zusammen,

irgendwie möchte er an meinen Frame zwar das <Enter> Event aber nicht das <Button-1> Event binden. Binde ich es an das Label in dem Frame, so geht es. Aber wenn ich auch das Enter-Event an ein Frame binden kann, dann doch sicher auch das Button-1-Event?

Code: Alles auswählen

class MainWindow():
    def __init__(self, myDict):
        self.window = tk.Tk()
        mainFrame = tk.Frame(master = self.window)
        mainFrame.pack()
        
        doc = ""
        
        for id, sl in myDict.items():
        
            slFrame = tk.Frame(master = mainFrame)
            slFrame.pack(side='top', pady = 2, padx = 2)
            
            slFrame.bind("<Button-1>", lambda event, a=sl: self.left_click_Frame(event, a))  #geht nicht
            #slFrame.bind("<Button-1>", self.left_click_Frame_noArgs)	                                 #geht nicht
            slFrame.bind("<Enter>", lambda event, a=sl, b=doc: self.selectLines(a,b))             #geht!
            slFrame.focus_set()
            
            lbl_sl_id = tk.Label(slFrame, text=str(id), width=4)
            lbl_sl_id.pack(side='left')
            #lbl_sl_id.bind("<Button-1>", self.left_click_label)                                                         #geht!
            #lbl_sl_id.bind("<Button-1>", lambda event, a=sl: self.left_click_label_with_args(event, a)) #geht!
        
    def left_click_label(self, event):
        print("left_click_label")

    def left_click_label_with_args(self, event, sl):
        print("left_click_label_with_args")

    def left_click_Frame(self, event, sl):
        print("left_click_Frame")

    def selectLines(self, sl, doc):
        print("selectLines")    
        
    def left_click_Frame_noArgs(self):
        print("left_click_Frame_noArgs")
        
    def show(self):
        self.window.mainloop()
Übersehe ich hier was? Liegt es daran, dass ich Frame und Label in einer Schleife erzeuge? Wenn ja, warum bindet er Enter aber nicht Button-1?

Gruß Tobias
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@tobi45f: Verpass dem Frame mal eine Hintergrundfarbe, dann siehst Du wo Du drauf klicken kannst. 😎
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
tobi45f
User
Beiträge: 24
Registriert: Montag 22. Februar 2021, 14:31

Danke für deine Antwort!
Das hatte ich mir kurzzeitig gedacht aber dachte dann "naja Enter geht ja auch". Aber jetzt wo du es sagst, klar - Enter braucht ja nur den einen Pixel, der vermutlich um dem Label noch existiert.

Ok, kann ich den Frame hervorheben oder die Labels "durchsichtig" machen (also die Schrift sollte schon noch zu lesen sein :D) oder muss ich bei jedem der Labels das Event hinzufügen?
Antworten