【问题标题】:Tkinter Button doesn´t change it´s relief after pressing itTkinter 按钮在按下后不会改变它的浮雕
【发布时间】:2017-04-11 18:51:01
【问题描述】:

为什么我的 tkinter 按钮在我按下后会停留在“凹陷”的浮雕中?

import tkinter
from tkinter import messagebox as msgbox 

class GUI(object):
    def __init__(self):
        self.root = tkinter.Tk()
        self.root.geometry("200x200")
        self.root.title("Test")


        self.testButton = tkinter.Button(self.root, text="Click Me!")
        self.testButton.bind("<Button-1>", self.click)
        self.testButton.bind("<ButtonRelease-1>", self.release)
        self.testButton.pack()

    def release(self, event):
        event.widget.config(relief=tkinter.RAISED)

    def click(self, event):
        result =  msgbox.askokcancel("Continue?", "Do you want to continue?")
        if result:
            print("Okay")
        else:
            print("Well then . . .")
        print(event.widget.cget("relief"))
        print()

if __name__ == "__main__":
    test = GUI()
    test.root.mainloop()

控制台显示浮雕是“凸起的”,但在 GUI 上它停留在“下沉”的浮雕中,为什么? The GUI after pressing the Button

【问题讨论】:

  • 编辑您的帖子并放置一个文件,不要放置图像来显示您的代码。
  • 我无法测试它,因为我不想重新输入你的代码,但我猜如果你使用 command 参数而不是 bind 它会像你想要的那样工作: tkinter.Button(root, text="click me", command=self.click)。您还需要从 click 方法的参数中删除“事件”。下次将代码以文本形式发布。
  • @Jonathan 这可以解决问题,但有没有办法保持绑定?
  • 是:绑定到“”。下次在您的代码中包含所有需要的导入。您的示例应该是可运行的。
  • @Jonathan 你测试了吗?它仍然停留在沉没的浮雕中。我编辑了问题,谢谢:)

标签: python button tkinter


【解决方案1】:

您的回调正在打印“raised”,因为您的代码在默认按钮绑定之前运行,因此按钮浮雕实际上是在调用您的函数时引发的。

我很确定这是导致按钮保持凹陷的原因:

  1. 您单击按钮,会出现一个对话框。此时按钮被升起,因为 tkinter 的默认绑定还没有机会运行 1,并且是默认绑定导致按钮出现凹陷
  2. 会出现一个对话框,它会从主窗口中窃取焦点。
  3. 您单击并释放按钮以单击对话框。因为对话框偷走了焦点,所以第二个释放事件没有传递给按钮
  4. 此时,原始点击的处理继续进行,控制转到默认的 tkinter 绑定以进行按钮点击。
  5. 默认行为会导致按钮凹陷
  6. 此时,您的鼠标按钮没有按下,所以您自然无法释放按钮。因为您无法释放按钮,所以窗口永远不会看到释放事件。
  7. 因为按钮永远不会看到按钮释放事件,所以按钮保持下沉状态

1 有关 tkinter 如何处理事件的说明,请参阅此答案:https://stackoverflow.com/a/11542200/7432。答案集中在键盘事件上,但同样的机制也适用于鼠标按钮。

【讨论】:

  • 谢谢你,这很有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多