Как вы упомянули, у вас есть более одного frame
виджета в вас GUI, вы можете использовать следующий метод.
Используйте frame_widget.winfo_children()
, чтобы получить child widget(s)
внутри frame_widget
, затем дайте callback
каждому из дочерних виджетов.
Я добавил еще один виджет кадра в code you posted
ради визуального понимания метода, который я использовал.
Вот код:
import tkinter as tk
class Window():
def __init__(self, master):
master.geometry('100x100')
# --- frame 1 --- #
frame1 = tk.Frame(master, bg='blue')
frame1.pack(fill='both', expand=1)
frame1.bind('<Button-1>', self.callback)
label1 = tk.Label(frame1, text='Label 1 in frame 1')
label1.pack()
label2 = tk.Label(frame1, text='Label 2 in frame 1')
label2.pack()
# you can get the child widgets inside the frame and set callback
for child_widget in frame1.winfo_children():
child_widget.bind('<Button-1>', self.callback)
# --- frame 1 --- #
# --- frame 2 --- #
frame2 = tk.Frame(master, bg='white')
frame2.pack(fill='both', expand=1)
#frame2.bind('<Button-1>', self.callback)
label1 = tk.Label(frame2, text='Label 1 in frame 2')
label1.pack()
label2 = tk.Label(frame2, text='Label 2 in frame 2')
label2.pack()
# --- frame 2 --- #
def callback(self, event):
print(event.x)
root = tk.Tk()
Window(root)
root.mainloop()

Итак, frame 1
имеет blue
по цвету и frame 2
имеет white
по цвету.
Теперь вы можете щелкнуть в любом месте внутри и на frame 1
, включая child widgets
и назначенный callback
. С другой стороны, frame 2
вообще не назначается никакого обратного вызова.
Я пытался объяснить с некоторой теорией. Надеюсь, это поможет!