2024-05-16 10:11:20 发布
网友
我希望在tkinter中创建一个在每个角都有文本的平铺,类似于此图像:
_______ |a b| |c_____d|
我也希望它有当它被点击时,运行一个命令函数的功能。我目前的想法是创建一个可以容纳四个文本标签的框架,然后允许点击该框架。在
显然,最后一行行不通。在网上搜索和阅读文档之后,我仍然完全不知道如何让这个框架保存一个命令。所以,我正在联系专家们,如果有人能帮上忙,我将非常感谢!在
像这样:
from Tkinter import * root = Tk() root.geometry("400x400+50+50") elements = {} def getElemVarName(name): print "You clicked :%s element in ELEMENTS dict" %name def Move(e): key = e.keysym for i in elements.keys() : X,Y= int(elements[i].place_info()["x"]),int(elements[i].place_info()["y"]) if key == "Up" : elements[i].place_configure(x=X, y=Y-1 ) elif key == "Down" : elements[i].place_configure(x=X, y=Y+1 ) elif key == "Left" : elements[i].place_configure(x=X-1, y=Y) elif key == "Right" : elements[i].place_configure(x=X+1, y=Y) elements[i].config(text="%d-%d"%(X,Y)) for i in range(4): pos = divmod(i,2) lb = Label(root,text=str(i)) lb.place(x=pos[1]*50+10,y=(pos[0]*50)+10) elements["%d"%i] = lb for eve in ('<Left>','<Right>','<Up>','<Down>') : root.bind(eve, Move) for i in elements.keys() : elements[i].bind('<Button-1>', lambda event,s=i:getElemVarName(s)) root.mainloop()
所以: for i in range(4):4个元素
for i in range(4):
pos = divmod(i,2)设置网格值
pos = divmod(i,2)
lb = Label(root)创建标签
lb = Label(root)
lb.place(x=pos[1]*50+10,y=(pos[0]*50)+10) 平均值:pos[1]*50+10;pos[1]XGrid_位置,*50XGrid}大小,+10偏移量(y值上的相同模式)
lb.place(x=pos[1]*50+10,y=(pos[0]*50)+10)
pos[1]*50+10
pos[1]
*50
+10
y
如果更改项目文本,则无法按文本搜索。
按键盘上的箭头键(PY2.7)只使用一种定位方法(pack、grid、place)(如果你喜欢复杂的GUI,place的方法可以实现其他方法的功能)
place
评论后: elements[i].bind('<Button-1>', lambda event,s=i:getElemVarName(s))使用lambda函数作为字符串传递变量名!在
elements[i].bind('<Button-1>', lambda event,s=i:getElemVarName(s))
您可以使用bind("<Button-1>", callback)将单击分配给小部件。在
bind("<Button-1>", callback)
您可能不仅要绑定到Frame,而且还要绑定Labels。在
Frame
Labels
import tkinter as tk def makeFruity(event): print('makeFruity') print('event:', event) print('event.widget:', event.widget) try: print('event.widget.text:', event.widget.cget('text')) except Exception as ex: print('error:', ex) root = tk.Tk() newFrame = tk.Frame(root) newFrame.grid(row=0, column=0) # resize middle row and column newFrame.columnconfigure(1, weight=1, minsize=100) newFrame.rowconfigure(1, weight=1, minsize=100) # use row/column 2 instead of 1 l1 = tk.Label(newFrame, text="a") l1.grid(row=0,column=0) l2 = tk.Label(newFrame, text="b") l2.grid(row=0,column=2) l3 = tk.Label(newFrame, text="c") l3.grid(row=2,column=0) l4 = tk.Label(newFrame, text="d") l4.grid(row=2,column=2) l1.bind('<Button-1>', makeFruity) l2.bind('<Button-1>', makeFruity) l3.bind('<Button-1>', makeFruity) l4.bind('<Button-1>', makeFruity) newFrame.bind('<Button-1>', makeFruity) root.mainloop()
像这样:
所以:
for i in range(4):
4个元素pos = divmod(i,2)
设置网格值lb = Label(root)
创建标签lb.place(x=pos[1]*50+10,y=(pos[0]*50)+10)
平均值:pos[1]*50+10
;pos[1]
XGrid_位置,*50
XGrid}大小,+10
偏移量(y
值上的相同模式)如果更改项目文本,则无法按文本搜索。
按键盘上的箭头键(PY2.7)只使用一种定位方法(pack、grid、place)(如果你喜欢复杂的GUI,
place
的方法可以实现其他方法的功能)评论后:
elements[i].bind('<Button-1>', lambda event,s=i:getElemVarName(s))
使用lambda函数作为字符串传递变量名!在您可以使用
bind("<Button-1>", callback)
将单击分配给小部件。在您可能不仅要绑定到
Frame
,而且还要绑定Labels
。在相关问题 更多 >
编程相关推荐