【问题标题】:Binding MouseClick to widget of an instance将 MouseClick 绑定到实例的小部件
【发布时间】:2014-08-01 19:50:58
【问题描述】:

我有一个ttkcalendar 对象“cal”的实例。当我将按钮单击绑定到 cal 时,调用的函数只有在我单击 ttcalendar 框架的角时才会执行;当我点击实际的日历区域时,在执行 ttkcalendar 函数时,我的绑定没有。

当我单击框架角时,此代码会运行

# Calendar Frame
    self.cal=Calendar(LeftFrame)
    self.cal.pack(side=TOP)
    self.cal.bind("<Button-1>",self.clicked)

我认为如果我尝试绑定到日历的画布对象,它会起作用。但是此代码返回 AttributeError: Calendar instance has no attribute canvas。

# Calendar Frame
    self.cal=Calendar(LeftFrame)
    self.cal.pack(side=TOP)
    self.cal.canvas.bind("<Button-1>",self.clicked)

正如我所说,内部 ttkcalendar 绑定可以很好地切换显示的日期。有什么见解吗?谢谢

【问题讨论】:

    标签: python binding tkinter


    【解决方案1】:

    错误信息应该很清楚。如果 python 告诉你“AttributeError: Calendar instance has no attribute canvas”,你必须假设这是真的。

    查看Calendar 类的源代码,我没有看到任何canvas 属性。就像错误告诉您的那样,您正在尝试访问一个不存在的属性。

    Calendar确实 有一个名为_canvas 的属性,也许您可​​以尝试使用它。不过,前面的下划线表示它是作为私有属性使用的,并且可能会在未来的代码修订版中消失。

    【讨论】:

    • 嗨,我也尝试过,但无济于事。有没有办法让点击事件同时在小部件和它所在的框架上注册?
    • @user3883010:我不太明白你在问什么。您当然可以在多个小部件上进行相同的绑定。只需绑定到列表框,并在框架上进行相同的绑定。还有其他技术,但这实际上取决于您的目标是什么。在此站点中搜索“bindtags”以查看其他更高级的绑定技术。
    • 我有日历小部件实例,它显示一个日历。如果单击它,它将突出显示选定的日期。似乎唯一的公共函数是选择,它返回当前选定日期的日期名称。我想要的是让包含这个日历实例的代码也有一个绑定,这样当点击日历时,我可以调用该代码中的另一个函数。正如我所拥有的,点击只运行日历实例的内部事件,而不是其容器的外部功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多