2013-04-10 82 views
0
def mouse_click(event): 
    #'reports' to both terminal and results text box 
    parent_name = Frame.winfo_parent(root) 
    parent = Frame._nametowidget(parent_name) 
    result = ("{0}: {1},{2}\n ".format('Clicked at', event.x, event.y)) 
    print('clicked at',parent, event.x, event.y) 

from tkinter import * 


root = Tk() 
root.title("Change Text") 
root.geometry('700x500') 

top=root.winfo_toplevel() 
for rn in range(0,9): # rn = row number 
    top.rowconfigure(rn, weight=1) 
top.rowconfigure(rn, weight=0)  
for cn in range(0,5): # cn = column number 
    top.columnconfigure(cn, weight=1) 
# FRAME 1 
frame1 = Frame(root, borderwidth = 2, background = '#EFE0CD', relief = RIDGE,width = 25, height = 20) 
frame1.bind("<Button-1>", mouse_click) 
frame1.grid(column = 0, row = 0, columnspan = 2, rowspan = 3, sticky = N+S+E+W) 
frame1_lbl = Label(frame1, text='Frame 1', font='comic-sans-MS 10 ', fg ='red', bg = '#EFE0CD') 
frame1_lbl.grid(row=0, column =0) 

# FRAME 2 
frame2 = Frame(root, borderwidth = 2, background = '#CCC6B0', relief = RIDGE,width = 25, height = 20) 
frame2.bind("<Button-1>", mouse_click) 
frame2.grid(column = 0, row = 3, columnspan = 2, rowspan = 3, sticky = N+S+E+W) 
frame2_lbl = Label(frame2, text='Frame 2', font='comic-sans-MS 10', fg ='red', bg = '#CCC6B0') 
frame2_lbl.grid(row=0, column =0,) 
root.mainloop() 

我知道這是一個非常愚蠢的問題。如何識別單擊鼠標的框架,以便報告打印在xy座標處單擊frame1或frame2 ?.我發現了一些關於使用winfo_parent的內容,但顯然沒有正確使用它。 謝謝tkinter報告框架以及鼠標座標

回答

0

傳遞給回調函數的事件對象具有widget屬性,該屬性是對獲取該事件的小部件的引用。所以,event.widget是你想要打印的。

+0

難道我以某種方式使用。nametowidget來獲取框架的名稱?感謝您的幫助。 event.widget給了我一個數字。不太確定如何將其轉換爲名稱。使用._nametowidget()告訴我它缺少參數名稱。抱歉無知! – user1478335 2013-04-10 11:57:17

+0

print('clicked at',event.widget._nametowidget(root),event.x,event.y)使用這個給我點x y? – user1478335 2013-04-10 12:03:53

+0

我現在嘗試了w = event.widget print(w.winfo_name()),它仍然給出一個數字而不是名稱。請放下。在數字前 – user1478335 2013-04-10 12:35:54