是否可以禁用列表框中的元素?
Is it possible to disable elements in a listbox?
我有这个代码片段:
import Tkinter as tk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
list = ['one','disable me','two']
listbox = tk.Listbox(self,height=len(list))
for item in list:
listbox.insert(tk.END, item)
listbox.pack()
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
是否可以禁用第2条选择线,使其无法被选中?此外,是否可以用不同的(灰色)字体显示它?
没有实现此目标的方法。但是还有其他方法!使用 itemconfig(index, fg="gray")
您可以将字体颜色设置为灰色。您也可以将列表框绑定到 <<ListBoxSelection>>
事件并定义回调方法。在此方法中,只需使用 .curselection()
检查所选项目的索引,然后如果它与项目的索引匹配,则可以清除选择。
代码片段:
import Tkinter as tk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
list = ['one','disable me','two']
self.listbox = tk.Listbox(self,height=len(list))
for item in list:
self.listbox.insert(tk.END, item)
self.listbox.pack()
self.disable_item(1)
def disable_item(self,index):
self.listbox.itemconfig(index, fg="gray")
self.listbox.bind("<<ListboxSelect>>",
lambda event, index=index: self.no_selection(event, index))
def no_selection(self, event, index):
if self.listbox.curselection()[0] in str(index):
self.listbox.selection_clear(index)
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
或者,您可以创建自己的小部件,它只包含和放置标签小部件,这样您就可以完全控制这些小部件。然后你可以随意设置Label的状态。
我有这个代码片段:
import Tkinter as tk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
list = ['one','disable me','two']
listbox = tk.Listbox(self,height=len(list))
for item in list:
listbox.insert(tk.END, item)
listbox.pack()
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
是否可以禁用第2条选择线,使其无法被选中?此外,是否可以用不同的(灰色)字体显示它?
没有实现此目标的方法。但是还有其他方法!使用 itemconfig(index, fg="gray")
您可以将字体颜色设置为灰色。您也可以将列表框绑定到 <<ListBoxSelection>>
事件并定义回调方法。在此方法中,只需使用 .curselection()
检查所选项目的索引,然后如果它与项目的索引匹配,则可以清除选择。
代码片段:
import Tkinter as tk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
list = ['one','disable me','two']
self.listbox = tk.Listbox(self,height=len(list))
for item in list:
self.listbox.insert(tk.END, item)
self.listbox.pack()
self.disable_item(1)
def disable_item(self,index):
self.listbox.itemconfig(index, fg="gray")
self.listbox.bind("<<ListboxSelect>>",
lambda event, index=index: self.no_selection(event, index))
def no_selection(self, event, index):
if self.listbox.curselection()[0] in str(index):
self.listbox.selection_clear(index)
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
或者,您可以创建自己的小部件,它只包含和放置标签小部件,这样您就可以完全控制这些小部件。然后你可以随意设置Label的状态。