我希望我的列表框“listbox1”在按下按钮“button1”时更改其绑定。首次单击按钮“禁用”列表框,而不会通过listbox1.bindtags((listbox1, Listbox, ".", "all"))
失去对列表框中所选元素的关注。
第二次单击应使用<<ListboxSelect>>
绑定重新绑定列表框。
问:如何重新绑定列表框?我尝试做一个简单的listbox1.configure
,listbox1.bind
,在listbox1.bindtags
中反转参数,用谷歌搜索,看到这里,我仍然无法理解。
from tkinter import *
root = Tk()
buttontext = StringVar()
buttontext.set("Disable")
frame_1 = Frame(root, bg="white")
frame_1.pack()
def print_(event):
print("success")
listbox_1 = Listbox(frame_1, activestyle="none", selectmode=SINGLE, height=6, width=11)
listbox_1.pack()
listbox_1.bind("<<ListboxSelect>>", print_)
listbox_1.insert(0, "test1")
listbox_1.insert(1, "test2")
def toggle_button():
if buttontext.get() == "Disable":
listbox_1.bindtags((listbox_1, Listbox, ".", "all"))
listbox_1["exportselection"] = False
buttontext.set("Normal")
elif buttontext.get() == "Normal":
listbox_1.bind("<<ListboxSelect>>", print_)
listbox_1["exportselection"] = True
buttontext.set("Disable")
button = Button(frame_1, textvariable=buttontext, command=toggle_button)
button.pack()
root.mainloop()
答案 0 :(得分:0)
问题始于这行代码:
listbox_1.bindtags((listbox_1, Listbox, ".", "all"))
它没有做你认为它正在做的事情。虽然它实际上禁用了窗口小部件,但它是因为您要用无效标记替换有效标记。如果要通过删除或更改默认标记来禁用窗口小部件,更简单的方法是删除默认绑定标记:
listbox_1.bindtags((listbox_1, ".", "all"))
要恢复绑定,您只需恢复绑定标记即可。请注意我如何使用"Listbox"
作为字符串,而不是实际的类:
listbox_1.bindtags((listbox_1, "Listbox", ".", "all")
注意:你不需要重新添加绑定,你只需要重新建立正确的绑定标记:
def toggle_button():
if buttontext.get() == "Disable":
listbox_1.bindtags((listbox_1, ".", "all"))
buttontext.set("Normal")
elif buttontext.get() == "Normal":
listbox_1.bindtags((listbox_1, "Listbox", ".", "all"))
buttontext.set("Disable")