Python 3.x Tkinter在Treeview小部件中插入一个组合框

Python 3.x Tkinter在Treeview小部件中插入一个组合框,python-3.x,combobox,treeview,tkinter,ttk,Python 3.x,Combobox,Treeview,Tkinter,Ttk,例如,让我们使用如下类创建Treeview小部件: class FiltersTree: def __init__(self, master, filters): self.master = master self.filters = filters self.treeFrame = Frame(self.master) self.treeFrame.pack() self._create_treeview(

例如,让我们使用如下类创建Treeview小部件:

class FiltersTree:
    def __init__(self, master, filters):
        self.master = master
        self.filters = filters
        self.treeFrame = Frame(self.master)
        self.treeFrame.pack()
        self._create_treeview()
        self._populate_root()

    def _create_treeview(self):
        self.dataCols = ['filter', 'attribute']
        self.tree = ttk.Treeview(self.master, columns = self.dataCols, displaycolumns = '#all')
填充根目录,像往常一样插入子目录。在代码块的末尾,您可以看到我希望使用Combo对象在树中放置Combobox的位置:

    def _populate_root(self):
        # a Filter object
        for filter in self.filters:
            top_node = self.tree.insert('', 'end', text=filter.name)

            # a Field object
            for field in filter.fields:
                mid_node = self.tree.insert(top_node, 'end', text = field.name)

                # insert field attributes
                self.insert_children(mid_node, field)

    def insert_children(self, parent, field):
        name = self.tree.insert(parent, 'end', text = 'Field name:',
                         values = [field.name])
        self.tree.insert(parent, 'end', text = 'Velocity: ', 
                         values = [Combo(self)]) # <--- Combo object
        ...
那么这是完全错误的吗?我希望能够从Treeview小部件中在单位(例如m/s、ft/s等)之间进行更改

有什么建议吗


treeview小部件不支持嵌入式小部件。
值属性的值被视为字符串。

默认情况下,树视图是字符串列表林的静态显示。然而,通过工作,在仔细阅读Treeview引用之后,可以使Treeview具有相当的交互性。对于这个问题,我将左键单击绑定到一个事件处理程序,该处理程序将鼠标x,y与units属性单元格的边界框(.bbox)进行比较。如果在框中,则直接在“单位”属性单元格的顶部显示一个组合框,并用当前值(如“触发器”)初始化


当然,将Treeview放在带有单独组合框的框架中可能会更容易。

顺便问一下,您能否向我提出任何建议,以便我实现在Treeview中切换单元的目标?基本上,我希望用户能够决定程序是否应该显示m/s、knots、mph等。@ADB:你可能想看看这个:我自己没有使用过它,但我已经将tktreectrl与tcl/tk aps结合使用,它确实有很多功能。
class Combo(ttk.Frame):
    def __init__(self, master):
        self.opts = ('opt1', 'opt2', 'etc')
        self.comboFrame = ttk.Labelframe(master, text = 'Choose option')
        self.comboFrame.pack()
        self.combo = ttk.Combobox(comboFrame, values=self.opts, state='readonly')
        self.combo.current(1)
        self.combo.pack()