Tkinter ผูกเมาส์คลิกไปที่เฟรม

ฉันคงขาดอะไรบางอย่างที่ชัดเจนไป ฉันมีสองเฟรมในโปรแกรม Tkinter โดยแต่ละเฟรมมีป้ายกำกับจำนวนมากในเค้าโครงตาราง ฉันต้องการผูกการคลิกเมาส์กับอันใดอันหนึ่ง แต่ไม่ใช่อันอื่น ปัจจุบันผมใช้

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

แต่นั่นจะเกิดขึ้นเช่นกันหากฉันคลิกในเฟรมอื่น ผมถือว่าใช้

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

จะทำงาน แต่แล้วฉันก็ไม่ได้รับคำตอบเลย

ฟังก์ชั่นที่ฉันเรียกคือ:

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 แหล่งที่มา
comment
ที่เกี่ยวข้อง: เหตุใดเมธอด .bind() จึงไม่ทำงานกับวิดเจ็ตเฟรมใน Tkinter   -  person Stevoisiak    schedule 26.04.2018


คำตอบ (1)


เมื่อคุณผูกเข้ากับหน้าต่างรูท การเชื่อมโยงนั้นจะมีผลกับวิดเจ็ตทั้งหมดในหน้าต่างรูทนั้น นั่นคือสาเหตุที่มันทริกเกอร์สำหรับเฟรมใดเฟรมหนึ่ง นี่เป็นพฤติกรรมมาตรฐานสำหรับ tkinter

เมื่อคุณย้ายการเชื่อมโยงไปยังเฟรม มันหยุดทำงานเนื่องจากเฟรมไม่เคยเห็นเหตุการณ์ เมื่อคุณคลิกที่ป้าย จะเป็นป้ายที่มองเห็นการเชื่อมโยง ไม่ใช่กรอบ (เว้นแต่คุณจะคลิกในช่องว่างระหว่างป้าย)

มีอย่างน้อยสามวิธีในการแก้ปัญหานี้ ประการหนึ่งคือคุณสามารถใส่การเข้าเล่มบนฉลากแทนที่จะใส่กรอบได้ อีกประการหนึ่งคือการคงการเชื่อมโยงไว้ในหน้าต่างรูท แต่ภายในฟังก์ชันให้ตรวจสอบเพื่อดูว่าวิดเจ็ตนั้นเป็นลูกของเฟรมนั้นหรือไม่

แนวทางแก้ไขที่สามเกี่ยวข้องกับการเปลี่ยนแปลงแท็กผูกสำหรับฉลาก สำหรับตัวอย่างเชิงลึก โปรดดูคำตอบนี้: https://stackoverflow.com/a/32771893/7432

person Bryan Oakley    schedule 16.11.2015
comment
ขอบคุณ ส่วนนี้ใช้งานได้ แต่ตอนนี้ฉันไม่สามารถสั่งให้ทำงานได้อย่างถูกต้อง ฉันตั้งคำถามใหม่สำหรับ stackoverflow.com/questions/33780668/ - person Bob; 18.11.2015