weixin_46296502 2023-01-08 19:36 采纳率: 50%
浏览 9
已结题

python多个bind在同一函数中怎么实现

我想将多个bind事件在同一个函数中实现,但是不知道怎么使用。
代码如下:
import tkinter

class Example(tkinter.Frame):
    def __init__(self, *args, **kwargs):
        tkinter.Frame.__init__(self, *args, **kwargs)
        self.l1 = tkinter.Label(self, text="Enter name")
        self.l2 = tkinter.Label(self, text="", width=40)
        self.l1.pack(side="top")
        self.l2.pack(side="top", fill="x")

        self.b1 = tkinter.Button(root, text="Ok")
        self.b2 = tkinter.Button(root, text="Ok2")
        self.b1.bind("<Enter>", self.on_enter)
        self.b1.bind("<Leave>", self.on_leave)
        self.b2.bind("<Enter>", self.on_enter)
        self.b2.bind("<Leave>", self.on_leave)
        self.b1.pack()
        self.b2.pack()

    def on_enter(self, event):
        if self.b1.bind:
            self.l2.configure(text="Check details filled before pressing Ok")
        if self.b2.bind:
            self.l2.configure(text="Check details filled before pressing Ok2")

    def on_leave(self, enter):
        if self.b1.bind:
            self.l2.configure(text="")
        if self.b2.bind:
            self.l2.configure(text="")


if __name__ =="__main__":
    root = tkinter.Tk()
    Example(root).pack(side="top", fill="both", expand="true")
    root.mainloop()

运行结果:

img

img

  • 写回答

1条回答 默认 最新

  • m0_54204465 2023-01-08 19:56
    关注
    import tkinter
    
    class Example(tkinter.Frame):
        def __init__(self, *args, **kwargs):
            tkinter.Frame.__init__(self, *args, **kwargs)
            self.l1 = tkinter.Label(self, text="Enter name")
            self.l2 = tkinter.Label(self, text="", width=40)
            self.l1.pack(side="top")
            self.l2.pack(side="top", fill="x")
            self.b1 = tkinter.Button(root, text="Ok")
            self.b2 = tkinter.Button(root, text="Ok2")
            self.b1.bind("<Enter>", self.on_enter)
            self.b1.bind("<Leave>", self.on_leave)
            self.b2.bind("<Enter>", self.on_enter)
            self.b2.bind("<Leave>", self.on_leave)
            self.b1.pack()
            self.b2.pack()
        def on_enter(self, event):
            if event.widget == self.b1:
                self.l2.configure(text="Check details filled before pressing Ok")
            elif event.widget == self.b2:
                self.l2.configure(text="Check details filled before pressing Ok2")
        def on_leave(self, enter):
            if event.widget == self.b1:
                self.l2.configure(text="")
            elif event.widget == self.b2:
                self.l2.configure(text="")
    
    if __name__ == "__main__":
        root = tkinter.Tk()
        Example(root).pack(side="top", fill="both", expand="true")
        root.mainloop()
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月17日
  • 已采纳回答 1月9日
  • 创建了问题 1月8日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改