【问题标题】:Tkinter: can I bind with arguments?Tkinter:我可以绑定参数吗?
【发布时间】:2019-11-24 10:59:32
【问题描述】:

我正在尝试使用 tkinter 制作地图程序,但在创建图标时遇到问题,这些图标在单击或鼠标经过它们时会显示信息。

root = Tk()
root.title('test')
root.geometry("500x500")

def text_map_icon(canvas, origin_x, origin_y, text):
    canvas.create_text(origin_x, origin_y - 60, text=text)


def map_icon(canvas, origin_x, origin_y, text):
    icon = canvas.create_arc((origin_x - 50), (origin_x - 50), (origin_y + 50), (origin_y + 50), start=70, extent=40,
                             fill='green', activefill='red', activewidth=2.0)

    canvas.tag_bind(icon, '<Enter>', text_map_icon(c, origin_x, origin_y, text))

map_icon(c, 250, 250, 'map icon')

c.pack()

root.mainloop()

为此,我使用 create_arc 画布方法创建了一个地图图标。为了在单击图标时显示信息,我尝试将其绑定到 text_map_icon 函数。为了使该文本在地图上显示相关信息(可能会根据提供给它的数据而变化),我需要该函数具有文本和坐标的参数。

我知道通常在绑定函数时,函数的参数是“事件”,而在调用时没有给出任何参数。有没有办法用参数绑定函数?

【问题讨论】:

    标签: events tkinter bind tkinter-canvas


    【解决方案1】:

    你可以使用lambda:

    from tkinter import *
    
    root = Tk()
    root.title('test')
    root.geometry("500x500")
    
    c = Canvas(root)
    
    def text_map_icon(event, canvas, origin_x, origin_y, text):
        canvas.create_text(origin_x, origin_y - 60, text=text)
    
    def map_icon(canvas, origin_x, origin_y, text):
        icon = canvas.create_arc((origin_x - 50), (origin_x - 50), (origin_y + 50), (origin_y + 50), start=70, extent=40,
                                 fill='green', activefill='red', activewidth=2.0)
    
        canvas.tag_bind(icon, '<Enter>', lambda e: text_map_icon(e, c, origin_x, origin_y, text))
    
    map_icon(c, 250, 250, 'map icon')
    
    c.pack()
    
    root.mainloop()
    

    【讨论】:

    • 谢谢,成功了。我之前尝试使用 lambda,但我认为我错过了冒号前的 e。
    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 2013-03-16
    • 2022-01-20
    • 1970-01-01
    • 2010-10-29
    相关资源
    最近更新 更多