简体   繁体   English

在Tkinter TreeView中插入数据以更正列时面临的问题

[英]Facing Issue on Inserting Data to correct Column in Tkinter TreeView

Can you please take a look at this Tkinter code and let me know why I am not able to insert the values to correct columns? 您能否看一下这个Tkinter代码,让我知道为什么我不能将值插入到正确的列中?

as you can see from the attached image it seems it is adding empty string to first column! 从所附图像可以看出,它似乎在第一列中添加了空字符串!

from Tkinter import *
import ttk

root = Tk()

tree = ttk.Treeview( root, columns=('Impacted Features'))
tree.heading('#0', text='Feature Class')
tree.heading('#1', text='Impacted Features')
tree.column('#0', width=100)
tree.column('#1', width=160)

tree.grid(row=4, columnspan=6, sticky='nsew')
tree.insert( "",0,  values=("1A","1b"))

root.mainloop()

在此处输入图片说明

Change tree.insert( "",0, values=("1A","1b")) to tree.insert( "",0, text="1A", values=("1b")) tree.insert( "",0, values=("1A","1b"))更改为tree.insert( "",0, text="1A", values=("1b"))

The first column or icon column (index #0 ) takes text and all other columns take values 第一列或icon列(索引#0 )采用text ,所有其他列采用values

Full code: 完整代码:

from Tkinter import *
import ttk

root = Tk()

tree = ttk.Treeview( root, columns=('Impacted Features'))
tree.heading('#0', text='Feature Class')
tree.heading('#1', text='Impacted Features')
tree.column('#0', width=100)
tree.column('#1', width=160)

tree.grid(row=4, columnspan=6, sticky='nsew')
tree.insert( "",0,  text="1A", values=("1b"))

root.mainloop()

By coding: 通过编码:

tree = ttk.Treeview( root, columns=('Impacted Features'))

you created one column only. 您仅创建了一列。

Later in your program, you inserted data as if you had two columns: 在程序的后面,您插入数据时就好像有两列一样:

tree.insert( "",0,  values=("1A","1b"))

So Tkinter creates an additional column without an empty heading. 因此, Tkinter创建了一个没有空标题的附加列。 This is is exactly what your first screenshot shows. 这正是您的第一个屏幕截图显示的内容。

So what can you do to design the GUI you highlighted in your second screenshot? 那么,如何设计您在第二个屏幕截图中突出显示的GUI? Here is the answer: 答案是:

  • Step one: 第一步:

Create two columns: 创建两列:

tree = ttk.Treeview(root, columns=('zero', 'one'))

Note that I picked better symbolic names for the columns. 请注意,我为列选择了更好的符号名。 This will lead you to display the data in the desired columns with the correct headings: 这将导致您以正确的标题在所需的列中显示数据:

在此处输入图片说明

  • Step two: 第二步:

But as you can see, there is a problem with this GUI: that empty space looks ugly. 但正如您所看到的,此GUI存在一个问题:空白空间看起来很丑。 So to get rid of it, you need to rely on the show option: 因此,要摆脱它,您需要依靠show选项:

tree['show'] = 'headings'

This will lead to the result you are looking for: 这将导致您要寻找的结果:

在此处输入图片说明

  • Step three: 第三步:

In Python, everything is an object, so let me redesign your program so that you can scale it if you want: 在Python中,一切都是对象,所以让我重新设计您的程序,以便在需要时可以对其进行扩展:

import Tkinter as Tk
import ttk


class TreeViewDemo(Tk.Frame):

    def __init__(self, master):
        Tk.Frame.__init__(self, master)
        self.master = master
        self.master.title("Tree View Demo")    
        # The following 2 lings will expand the widgets as window resizes 
        # Can be removed if the effect is not desired
        self.master.grid_rowconfigure(0,weight=1)
        self.master.grid_columnconfigure(0,weight=1)

        self.create_GUI()

    def create_GUI(self):
       self.tree = ttk.Treeview(self.master, columns=('zero', 'one'))
       self.tree.heading('zero', text='Feature Class')
       self.tree.heading('one', text='Impacted Features')
       self.tree.column('zero')
       self.tree.column('one')
       self.tree.grid(row=0, column=0, sticky='nsew')
       self.tree['show'] = 'headings'
       self.tree.insert('', '0', values=("1A","1b"))


def main():
    root=Tk.Tk()
    d = TreeViewDemo(root)
    root.mainloop()

if __name__ == '__main__':
   main()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM