【问题标题】:Get data from treeview in tkinter从 tkinter 中的树视图获取数据
【发布时间】:2014-05-23 12:34:12
【问题描述】:

我正在尝试从填充的 Treeview 中获取数据:

self.tree['show'] = 'headings'
    self.tree['columns'] = ('Pool ID','Time', 'Lat', 'Lon', 'Alt', 'Spd', 'hdop','vdop','pdop', 'Sats Used', 'FixMode')
    self.tree.column('Pool ID', width=90, anchor='center')
    self.tree.heading('Pool ID', text='Pool ID')
    self.tree.column('Time', width=90, anchor='center')
    self.tree.heading('Time', text='Time')
    self.tree.column('Lat', width=90, anchor='center')
    self.tree.heading('Lat', text='Lat')
    self.tree.column('Lon', width=90, anchor='center')
    self.tree.heading('Lon', text='Lon')
    self.tree.column('Alt', width=90, anchor='center')
    self.tree.heading('Alt', text='Alt')
    self.tree.column('Spd', width=90, anchor='center')
    self.tree.heading('Spd', text='Spd')
    self.tree.column('hdop', width=90, anchor='center')
    self.tree.heading('hdop', text='hdop')
    self.tree.column('vdop', width=90, anchor='center')
    self.tree.heading('vdop', text='vdop')
    self.tree.column('pdop', width=90, anchor='center')
    self.tree.heading('pdop', text='pdop')
    self.tree.column('Sats Used', width=90, anchor='center')
    self.tree.heading('Sats Used', text='Sats Used')
    self.tree.column('FixMode', width=90, anchor='center')
    self.tree.heading('FixMode', text='FixMode')

    for i in range(5):

        self.tree.insert('', -1, values=(
                                           i+1,
                                           i+2, 
                                           i+3, 
                                           i+4,
                                           i+5,
                                           i+6,
                                           i+7,
                                           i+8,
                                           i+9,
                                           i+10,
                                           i+11))

我在文档和 SO 上进行了搜索,但没有找到任何相关信息。有人可以帮我吗?

【问题讨论】:

  • 您是否尝试过使用tkinter.ttk.Treeview.get_children
  • 是的,我知道这种方法,但我不知道最终如何处理结果。

标签: tkinter get treeview


【解决方案1】:

好的,我终于找到了方法,例如显示所有值:

for line in self.tree.get_children():

    for value in self.tree.item(line)['values']:
        print(value)

【讨论】:

    【解决方案2】:

    使用此代码:

    for Parent in self.treeview.get_children():
    
        print(self.treeview.item(Parent)["text"])
    
        for child in self.treeview.get_children(Parent):
            data = self.treeview.item(child)["text"]
            print(data)
    

    【讨论】:

      【解决方案3】:

      我猜你想访问树的值而不是文本。稍后我会解释其中的区别。

      如果您有父子层次结构,请使用以下代码:

      for parent in self.tree.get_children():
          print(self.tree.item(parent)["values"])
          for child in self.tree.get_children(parent):
              print(self.tree.item(child)["values"])
      

      如果你有一个简单的层次结构,你可以使用这个代码:

      for parent in self.tree.get_children():
          print(self.tree.item(parent)["values"])
      

      现在,您了解了逻辑,您可以尽情使用父-子-子层次结构。

      除此之外,您可能希望通过循环填充树,而不是重复相同的代码:

      self.tree['columns'] = ('Pool ID','Time', 'Lat', 'Lon', 'Alt', 'Spd', 'hdop','vdop','pdop', 'Sats Used', 'FixMode')
      for column in self.tree['columns']:
          # define the column names and headings
          self.tree.column(column, width=90, anchor='center')
          self.tree.heading(column, text=column)
      

      然后,您可能希望将数据插入到树中。您也可以通过更紧凑的循环来执行此操作:

      # let's replicate your example data set
      data = [[i+k+1  for k in range(11)] for i in range(5)]
      for r, row in data:
          self.tree.insert(parent='', index='end', iid=f"{str(r)}", text='', values=row)
      

      说明: 现在您可以使用print(self.tree.item(parent)["values"]) 获取值,如果您使用"text" 而不是"values",您将获得在text 字段中定义的任何内容self.tree.insert 方法。 iid 定义树中条目的唯一 id:这是以编程方式插入的。您最终可以填写字段text 并稍后获取内容。 在这个简单的案例中,我将字段 parent 留空。但是如果你有一个父子层次结构,你应该命名它。

      例如:

      for p, parent_record in enumerate(data):
          self.tree.insert(parent='', ...)  # can leave this blank
          for r, row in enumerate(parent_record['rows']):
              self.tree.insert(parent=f"{str(p)}", ...)  # any reference to parent loop
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-22
        • 1970-01-01
        • 2018-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多