默认情况下,tkinter的Checkbutton
小部件响应小部件中任何位置的单击,而不仅仅是在复选框字段中。
例如,考虑以下(Python 2)代码:
import Tkinter as tk
main = tk.Tk()
check = tk.Checkbutton(main, text="Click").pack()
main.mainloop()
运行此代码将生成一个小窗口,其中包含一个复选框,并附带单词"Click“。如果单击复选框,则会切换该复选框。
但是,如果单击小部件的文本而不是复选框,也会发生这种情况。
这可以预防吗?我可以制作一个单独的小部件来保存文本,但是这仍然会在复选框周围形成一个小区域来响应单击。
发布于 2018-01-16 05:20:43
有两种解决办法:
发布于 2018-01-16 05:37:12
此程序创建一个校验按钮,并通过将方法绑定到校验按钮来重写默认事件。单击按钮时,该方法将检查已定义的限制,以允许正常操作或覆盖。OP希望确保当单击校验按钮的文本时,不会采取默认操作。这本质上就是这样做的。
import tkinter as tk
import tkinter.ttk as ttk
class App(tk.Frame):
def __init__(self, parent, *args, **kwargs):
self.checkvar = IntVar()
check = tk.Checkbutton(parent, text='Click', variable=self.checkvar)
check.bind('<Button-1>', self.checkCheck)
check.pack()
print(dir(check))
def checkCheck(self, event):
# Set limit based on your font and preference
limit = 18
print(event.x, event.y, self.checkvar.get())
if event.x > limit or event.y > limit:
self.checkvar.set(not self.checkvar.get())
else:
print("Normal behavior")
if __name__ == "__main__":
window = tk.Tk()
app = App(window)
window.mainloop()
https://stackoverflow.com/questions/48281391
复制相似问题