【问题标题】:How to disable text shaking when I click a button?单击按钮时如何禁用文本抖动?
【发布时间】:2012-05-27 08:02:15
【问题描述】:

我正在使用 Tkinter、python 中的按钮。

问题是当我单击一个按钮时,按钮的文本会抖动。这可能是此小部件的默认行为,我不知道如何禁用它并使其成为静态。

有谁知道如何解决这个问题?

【问题讨论】:

  • 你能给出一个最小的代码示例吗?

标签: python button widget tkinter options


【解决方案1】:

我假设您的意思是当您单击按钮时,浮雕会从凸起变为凹陷。

这是我在http://wiki.tcl.tk/1048 上找到的(点击“显示讨论”查看):

不幸的是,单击时使用的浮雕是硬编码的(如 'sunken'),所以你不能在不破解 Tk 的情况下为每个小部件配置它 按钮绑定的内部结构。

因此,解决此问题的最简单方法是始终使按钮看起来凹陷

MyButton = Tkinter.Button(
    self.frame, 
    text = "Foobar", 
    command = self.foobar, 
    relief=Tkinter.SUNKEN
)

这样做的缺点是它可能会使按钮看起来没有响应。

您还可以使用按钮以外的小部件作为可点击项目(由 Joel Cornett 建议)。下面是一个将标签用作按钮的简单示例:

import Tkinter

class main:
        def __init__(self,root):
                # make a label with some space around the text
                self.lbl1 = Tkinter.Label(root,
                                          width = 16, height = 4,
                                          text = "Foobar")                
                self.lbl1.pack()

                # Call a function when lbl1 is clicked
                # <Button-1> means a left mouse button click
                self.lbl1.bind("<Button-1>", self.yadda)
                self.lbl1.bind("<Enter>", self.green)
                self.lbl1.bind("<Leave>", self.red)

        def yadda(self, event):
                self.lbl1.config(text="Clicked!")

        def green(self, event):
                self.lbl1.config(bg="green")

        def red(self,event):
                self.lbl1.config(bg="red")

if __name__ == "__main__":
    root = Tkinter.Tk()
    main(root)
    root.mainloop() 

【讨论】:

  • 也可以使用画布对象而不是按钮。 DIY一个点击/悬停动画并不难。
  • 是的,没错。谢谢你。难道没有办法解决这个问题,而不是让按钮总是看起来凹陷?
  • 是的,您可以像 Joel 建议的那样使用画布。或者一个标签,如果只是文本就足够了。我将在我的回答中包含一个示例。
  • 我明白了。这是另一个不错的选择,不如最后一个好,因为如果我这样做,我不会错过 ACTIVEBACKGROUND、ACTIVEFOREGROUND 等重要选项... ?我不会打扰你按下按钮时按钮的行为(我的意思是,从你想要的任何东西 - 扁平,凸起等 - 到 SUNKEN 的变化都是丑陋的。
  • 我看不出问题,你可以在需要的时候改变标签的前景和背景,对吧?例如,您还可以绑定 enter 和 leave 事件以在鼠标悬停时更改标签。至于在 Tk 中破解它,不,我不知道。
猜你喜欢
  • 1970-01-01
  • 2019-08-15
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
相关资源
最近更新 更多