qwe*_*_so 0 python tk-toolkit listbox tkinter
我有这个代码片段:
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()
Run Code Online (Sandbox Code Playgroud)
是否可以禁用第二条选择线,使其无法选择?此外,是否可以以不同的(灰色)字体显示它?
没有方法可以实现这个目标。但还有其他方法!有了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()
Run Code Online (Sandbox Code Playgroud)
或者,您可以创建自己的小部件,它只包含和放置标签小部件,因此您可以完全控制这些小部件。然后您可以根据需要设置标签的状态。