【问题标题】:Display text when cursor is placed over button in python当光标放在python中的按钮上时显示文本
【发布时间】:2015-08-15 06:29:29
【问题描述】:

当光标放在按钮上时如何在窗口中显示文本。

我有下面的代码,当将光标放在“确定”按钮上时,它必须将文本显示为“在按下确定之前检查详细信息”。

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.b1.bind("<Enter>", self.on_enter)
        self.b1.bind("<Leave>", self.on_leave)
        self.b1.pack()       

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

    def on_leave(self, enter):
        self.l2.configure(text="")

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

如果我在光标放在标签 l1 上时为显示文本编写相同的代码,则可以正常工作。当光标放在按钮上或进行任何修改时,还有其他方法可以继续显示吗??

【问题讨论】:

标签: python tkinter


【解决方案1】:

据我所知,Tk 没有内置按钮工具提示结构

在另一个 GUI 框架 Qt (PyQt) 中,这是一个内置功能 - 例如:

button1 = QtGui.QPushButton("This is button1", self)
button1.setToolTip("You have moused over Button1)

有一些解决方法可以将这种类型的功能添加到 Tk,但您可能需要一些时间才能将它们直接实现到您的程序中

基本上你创建你自己的类 ToolTip() 和你的模块中的一个函数来添加一个新的 ToolTip,addToolTip()

以下是执行此操作的两个参考: ref 1 ref 2

编辑:请注意,此处的 ref1 与该问题的 cmets 中 Martineau 链接到的问题中接受的答案相同。

【讨论】:

  • 如果我说错话或说了一些完全不正确的话,我很乐意做出改变 - 我发布的第一个参考通过提供绑定 和 到一些定义的函数来显示文本。不知道是什么问题,但如果我说错了,我们深表歉意
  • 我的意思只是质疑为什么我在没有任何 cmets 的情况下被否决 - 如果有人讨论为什么我的答案不正确或不相关,我完全可以接受否决。我只是不喜欢看到没有讨论的随机否决票。人们很难以这种方式学习。
  • Maxwell Grady,我没有投反对票。这对我真的很有帮助。非常感谢。
【解决方案2】:

如果我正确理解了这个问题,您希望能够在鼠标悬停在不同的小部件上时显示不同的消息。最简单的解决方案是为每个包含消息的小部件对象添加一个自定义属性,然后从绑定函数中的属性中获取该消息。

例如:

class Example(...):
    def __init__(...):
        ...
        self.l1.description = "This is label 1"
        self.l2.description = "This is label 2"
        self.b1.description = "This is the OK button"

        for widget in (self.l1, self.l2, self.b1):
            widget.bind("<Enter>", self.on_enter)
            widget.bind("<Leave>", self.on_leave)
        ...

    def on_enter(self, event):
        description = getattr(event.widget, "description", "")
        self.l2.configure(text=description)

【讨论】:

    猜你喜欢
    • 2014-05-25
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 2017-03-10
    • 1970-01-01
    相关资源
    最近更新 更多