如何创建具有按钮功能的Python tkinter框架?

2024-05-16 10:11:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望在tkinter中创建一个在每个角都有文本的平铺,类似于此图像:

 _______
|a     b|
|c_____d|

我也希望它有当它被点击时,运行一个命令函数的功能。我目前的想法是创建一个可以容纳四个文本标签的框架,然后允许点击该框架。在

^{pr2}$

显然,最后一行行不通。在网上搜索和阅读文档之后,我仍然完全不知道如何让这个框架保存一个命令。所以,我正在联系专家们,如果有人能帮上忙,我将非常感谢!在


Tags: 函数文档图像文本命令功能框架tkinter
2条回答

像这样:

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个元素

pos = divmod(i,2)设置网格值

lb = Label(root)创建标签

lb.place(x=pos[1]*50+10,y=(pos[0]*50)+10) 平均值:pos[1]*50+10pos[1]XGrid_位置,*50XGrid}大小,+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。在

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()

相关问题 更多 >