Tkinter mengikat klik mouse ke bingkai

Saya pasti melewatkan sesuatu yang jelas, saya memiliki dua bingkai di program Tkinter saya, masing-masing dengan banyak label dalam tata letak kotak. Saya ingin mengikat klik mouse ke salah satunya tetapi tidak yang lain. Saat ini saya menggunakan

root.bind("<Button-1>", mouse_function)

tapi itu juga terpicu jika saya mengklik di frame lain. Saya berasumsi bahwa menggunakan

schedule_frame.bind("<Button-1>", mouse_function)

akan bekerja tetapi kemudian saya tidak mendapat tanggapan di mana pun.

Fungsi yang saya panggil adalah:

def mouse_function(event):
    y = event.widget.grid_info()['row']
    x = event.widget.grid_info()['column'] 
    widgets[(y, x)].configure(state="active")
    shiftSelection(y,x)

person Bob    schedule 16.11.2015    source sumber
comment
Terkait: Mengapa metode .bind() tidak berfungsi dengan widget bingkai di Tkinter?   -  person Stevoisiak    schedule 26.04.2018


Jawaban (1)


Saat Anda mengikat ke jendela akar, pengikatan tersebut berlaku untuk semua widget di jendela akar tersebut. Itu sebabnya ini dipicu untuk frame mana pun. Ini adalah perilaku standar untuk tkinter.

Saat Anda memindahkan pengikatan ke bingkai, pengikatan tersebut berhenti berfungsi karena bingkai tidak pernah melihat peristiwa tersebut. Saat Anda mengeklik label, labellah yang melihat ikatannya, bukan bingkainya (kecuali jika Anda mengeklik di ruang antar label)

Setidaknya ada tiga cara untuk mengatasi masalah ini. Salah satunya adalah Anda dapat menempelkan penjilidan pada label, bukan pada bingkai. Cara lainnya adalah dengan tetap mengikat jendela root, namun di dalam fungsi, periksa apakah widget tersebut merupakan turunan dari satu frame tersebut.

Solusi ketiga melibatkan perubahan tag pengikat untuk label. Untuk contoh mendalam lihat jawaban ini: https://stackoverflow.com/a/32771893/7432

person Bryan Oakley    schedule 16.11.2015
comment
Terima kasih, bagian ini berhasil, tetapi sekarang saya tidak dapat membuat pesanan berfungsi dengan baik, saya membuat pertanyaan baru untuk stackoverflow.com/questions/33780668/. - person Bob; 18.11.2015