默认情况下,tkinter的Checkbutton
窗口小部件会响应窗口小部件中的任何位置,而不是仅仅在复选框字段中。
例如,请考虑以下(Python 2)代码:
import Tkinter as tk
main = tk.Tk()
check = tk.Checkbutton(main, text="Click").pack()
main.mainloop()
运行此代码会产生一个小窗口,只有一个复选框,并带有单词" Click"。如果单击复选框,则会切换。
但是,如果您单击窗口小部件的文本而不是复选框,也会发生这种情况。
这可以预防吗?我可以创建一个单独的小部件来保存文本,但这仍然会导致复选框周围的小区域响应点击。
答案 0 :(得分:0)
我想到了两个解决方案:
答案 1 :(得分:0)
该程序创建一个checkbutton并通过将方法绑定到checkbutton来覆盖它上面的默认事件。单击该按钮时,该方法将检查已定义的限制以允许正常操作或覆盖。 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()