Tkinter 在 Treeview 小部件中插入一个组合框 [英] Tkinter insert a Combobox inside a Treeview widget
问题描述
例如,让我们使用一个类创建一个 Treeview 小部件,如下所示:
For example, lets create a Treeview widget using a class as follows:
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')
填充根,像往常一样插入子项.在代码块的末尾,您可以看到我想在树中放置 Combobox 的位置,使用 Combo 对象:
Populate root, insert children as usual. At the end of the codeblock, you can see where I want to put a Combobox in the tree, using a Combo object:
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
...
接下来是 Combo 的类定义.根据我的理解,组合框小部件继承自 ttk 的 Labelframe 小部件,并且必须将其放置在其中:
Next the class definition of Combo follows. The way I understand it, the combobox widget inherits from and must be placed inside the Labelframe widget from ttk:
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()
这是完全错误的吗?我希望能够在 Treeview 小部件内在单位(例如 m/s、ft/s 等)之间进行更改.
So is this completely wrong? I want to have the ability to change between units (eg m/s, ft/s, etc) from within the Treeview widget.
有什么建议吗?
推荐答案
树状视图小部件不支持嵌入式小部件.values
属性的值被视为字符串.
The treeview widget doesn't support embedded widgets. The values for the values
attribute are treated as strings.
这篇关于Tkinter 在 Treeview 小部件中插入一个组合框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!