我有这段代码:
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()
是否可以禁用第二条选择线,因此无法选择?另外,是否可以用不同的(浅灰色)字体显示它?
答案 0 :(得分:4)
没有方法可以实现这一目标。但还有其他方法!使用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()
另外,您可以创建自己的Widget,它只包含并放置Label-Widgets,以便您可以完全控制这些小部件。然后,您可以根据需要设置标签的状态。