首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tkinter:解除束缚不起作用,甚至解决办法也不起作用。

tkinter:解除束缚不起作用,甚至解决办法也不起作用。
EN

Stack Overflow用户
提问于 2022-03-22 16:08:11
回答 1查看 60关注 0票数 0

我在这里提出了一个问题,这个问题已经存在了很长时间了,但显然仍然没有解决,更老的解决方法在我的Python3.7.2(Win10上的64位)上是行不通的。

我有这样的代码:

代码语言:javascript
复制
import tkinter as tk
import tkinter.simpledialog

# message box to enter a value where to set the scale to
class EnterValueBox(tk.simpledialog.Dialog):

    def body(self, master):
        self.e = tk.Entry(self, width=10)
        self.e.pack(pady=5)
        return self.e  # initial focus

    def apply(self):
        print(self.e.get())


# callback to open message box
def enterValue(event):
    EnterValueBox(root, title="Enter Value 0..100")


# create window with scale widget
root = tk.Tk()
scale = tk.Scale(root, orient=tk.HORIZONTAL, from_=0, to=100)
scale.pack()
# unbind any button-3 events
scale.unbind("<ButtonPress-3>")
scale.unbind("<ButtonRelease-3>")
scale.unbind("<Button-3>")
# bind button-3 press event to open message box
scale.bind("<ButtonPress-3>", enterValue)

tk.mainloop()

它创建一个带有单个小部件的窗口。我想绑定ButtonPress-3打开一个小对话框直接输入一个新的值。代码只将该值打印到shell,但示例显示取消绑定不起作用,因为在打印值之后,对话框将关闭(当用户单击OK时),然后执行默认绑定,这将设置滑块,用户在滑块小部件的槽中单击该滑块。

我尝试了Deleting and changing a tkinter event binding的解决方法,使用了一个PatchedScale小部件(而不是这里显示的PatchedCanvas ),但这并没有什么区别。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2022-03-22 16:34:56

默认绑定不是在小部件上,而是在小部件类上。在没有特定于小部件的绑定的小部件上调用unbind不会有任何效果。

如果不希望在特定于小部件的绑定之后运行默认绑定,通常的技术是让绑定函数返回字符串break

代码语言:javascript
复制
def enterValue(event):
    EnterValueBox(root, title="Enter Value 0..100")
    return "break"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71575313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档