【问题标题】:tkinter treeview: how to disable widget?tkinter treeview:如何禁用小部件?
【发布时间】:2016-02-01 03:18:42
【问题描述】:

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

我们该如何解决呢? 感谢您的支持。

更新

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

我正在寻找一种解决方案,在该解决方案中,appart 从禁用选择,像条目小部件一样影响小部件的可视化。

【问题讨论】:

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

标签: python-3.x tkinter treeview


【解决方案1】:

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

在我的示例中,我添加了一个条目,以便您可以比较两个小部件的外观。如果您使用的是 OS X 或 Windows,您可能需要更改主题(style.theme_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()

【讨论】:

    猜你喜欢
    • 2017-08-25
    • 2016-07-07
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 2016-12-04
    • 2013-05-20
    相关资源
    最近更新 更多