Tkinter在Treeview小部件中插入一个Combobox [英] Tkinter insert a Combobox inside a Treeview widget

查看:2459
本文介绍了Tkinter在Treeview小部件中插入一个Combobox的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如,让我们使用类创建一个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')

填充root,照常插入孩子。在代码块的结尾,你可以看到我想使用Combo对象在树中放置一个Combobox:

  def _populate_root(self):
#a Filter对象
for self.filters中的过滤器:
top_node = self.tree.insert('','end',text = filter.name)

#a字段对象
在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 (父,'end',text ='字段名:',
值= [field.name])
self.tree.insert
values = [Combo(self)])#< ---组合对象
...

接下来是Combo的类定义。对我有用[0]丢个板砖[0]引用回复举报回复引用举报回复引用举报回复引用举报返回列表发新帖高级模式B Color Image Link Quote Code Smilies您需要登录后才可以回帖登录| .Frame):
def __init __(self,master):
self.opts =('opt1','opt2','etc')
self.comboFrame = ttk.Labelframe ,text ='Choose option')
self.comboFrame.pack()
self.combo = ttk.Combobox(comboFrame,values = self.opts,state ='readonly')
self .combo.current(1)
self.combo.pack()

完全错了?我想在树视图窗口小部件内具有在单位(例如m / s,ft / s等)之间切换的能力。



p>

解决方案

树视图窗口小部件不支持嵌入式窗口小部件。 values 属性的值被视为字符串。


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')

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
        ...

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()

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.

Any suggestions, plz?

解决方案

The treeview widget doesn't support embedded widgets. The values for the values attribute are treated as strings.

这篇关于Tkinter在Treeview小部件中插入一个Combobox的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆