Python 3.x tkinter treeview:如何禁用小部件?

Python 3.x tkinter treeview:如何禁用小部件?,python-3.x,tkinter,treeview,Python 3.x,Tkinter,Treeview,我们正在用Python+tkinter构建GUI界面。 问题是我们何时需要设置实体的视图模式。我需要将treeview小部件的查看模式或状态设置为“禁用” 我们如何解决这个问题? 谢谢你的支持 更新 self.frmTab01.trvDetailorder.configure(selectmode='none') 我正在寻找一种解决方案,其中appart from disable the selection会像entry widget一样影响widget的可视化效果。nbro是正确的,您需要更

我们正在用Python+tkinter构建GUI界面。 问题是我们何时需要设置实体的视图模式。我需要将treeview小部件的查看模式或状态设置为“禁用”

我们如何解决这个问题? 谢谢你的支持

更新

self.frmTab01.trvDetailorder.configure(selectmode='none')

我正在寻找一种解决方案,其中appart from disable the selection会像entry widget一样影响widget的可视化效果。

nbro是正确的,您需要更改Treeview样式以使其看起来被禁用。此外,我还禁用了在鼠标单击时使用绑定技巧禁用Treeview时打开/关闭项目的可能性

在我的示例中,我添加了一个条目,以便您可以比较这两个小部件的外观。如果您使用的是OS X或Windows,您可能需要更改主题(
style.theme\u use(“clam”)
应该这样做),因为它们的默认主题不太可自定义

from tkinter import Tk
from tkinter.ttk import Treeview, Style, Button, Entry

root = Tk()

def toggle_state():
    if "disabled" in tree.state():
        e.state(("!disabled",))
        tree.state(("!disabled",))
        # re-enable item opening on click
        tree.unbind('<Button-1>')
    else:
        e.state(("disabled",))
        tree.state(("disabled",))
        # disable item opening on click
        tree.bind('<Button-1>', lambda e: 'break')

style = Style(root)
# get disabled entry colors
disabled_bg = style.lookup("TEntry", "fieldbackground", ("disabled",))
disabled_fg = style.lookup("TEntry", "foreground", ("disabled",))

style.map("Treeview", 
          fieldbackground=[("disabled", disabled_bg)],
          foreground=[("disabled", "gray")],
          background=[("disabled", disabled_bg)])

e = Entry()
e.insert(0, "text")
e.pack()

tree = Treeview(root, selectmode='none')
tree.pack()
tree.insert("", 0, iid="1", text='1')
tree.insert("1", 0, iid='11', text='11')

Button(root, text="toggle", command=toggle_state).pack()

root.mainloop()
从tkinter导入Tk
从tkinter.ttk导入树视图、样式、按钮、条目
root=Tk()
def切换_状态():
如果在树的.state()中“禁用”:
e、 状态((“!disabled”,))
树的状态((“!disabled”,))
#单击重新启用项目打开
树。解除绑定(“”)
其他:
e、 状态((“已禁用”))
树的状态((“已禁用”))
#单击时禁用项目打开
tree.bind(“”,lambda e:“break”)
样式=样式(根)
#获取禁用的入口颜色
disabled_bg=style.lookup(“TEntry”、“fieldbackground”、“disabled”))
disabled_fg=style.lookup(“TEntry”、“foreground”、“disabled”)
style.map(“树视图”,
fieldbackground=[(“已禁用”,已禁用\u bg)],
前景=[(“禁用”、“灰色”)],
背景=[(“禁用”,禁用\u bg)])
e=条目()
e、 插入(0,“文本”)
e、 包()
tree=Treeview(root,选择mode='none')
tree.pack()
tree.insert(“,0,iid=“1”,text=“1”)
tree.insert(“1”,0,iid='11',text='11')
按钮(root,text=“toggle”,command=toggle\u state).pack()
root.mainloop()

我认为现在(也许将来)不可能这样做。你可以做的是在禁用时更改
Treeview
对象模拟的样式,等等。请注意,在某些操作系统(如Mac OS X)中,无法设置某些小部件或小部件属性的样式。。。