tkinter Treeview小部件插入数据

时间:2016-03-20 22:28:44

标签: python python-3.x tkinter treeview

这是我的示例代码。我想在按下输入按钮时将条目中输入的项目插入到树视图中。我是python和tkinter的新手,并且没有太多关于treeview的内容。

shared_ptr

我应该作为一个论点传递什么? 或者treeview是适合这个的小部件,还是有人可以建议适合此问题的小部件?感谢

1 个答案:

答案 0 :(得分:23)

您似乎只对如何在Tkinter.Entry()点击后将用户在ttk.Treeview()窗口小部件中输入的数据插入Tkinter.Button()感兴趣。

我设计了一个简单的界面来向您展示如何解决这个问题。您可以根据问题调整我的解决方案。

以下是应用程序演示的样子:

screenshot of demo application running

所以我设置了一个计数器self.i来命名项目。但您可以为此目的添加标签和条目,并且您可以类似于其他Tkinter.Entry()条目插入项目名称。

插入方法就是这个:

def insert_data(self):
    """
    Insertion method.
    """
    self.treeview.insert('', 'end', text="Item_"+str(self.i),
                         values=(self.dose_entry.get() + " mg",
                                 self.modified_entry.get()))
    # Increment counter
    self.i = self.i + 1

这里的主要技巧可能是使用get()方法检索用户输入的数据,该方法由self.dose_entry.get()self.dose_modified.get()操作表示。

这样做完成后,您现在需要将此方法绑定到要按下的按钮以使用command选项触发插入操作:

self.submit_button = Tkinter.Button(self.parent, text="Insert",
                                    command=self.insert_data)

完整程序:

'''
Created on Mar 21, 2016

@author: Bill Begueradj
'''
try:
    import Tkinter
    import ttk
except ImportError:  # Python 3
    import tkinter as Tkinter
    import tkinter.ttk as ttk


class Begueradj(Tkinter.Frame):
    '''
    classdocs
    '''
    def __init__(self, parent):
        '''
        Constructor
        '''
        Tkinter.Frame.__init__(self, parent)
        self.parent=parent
        self.initialize_user_interface()

    def initialize_user_interface(self):
        """Draw a user interface allowing the user to type
        items and insert them into the treeview
        """
        self.parent.title("Canvas Test")
        self.parent.grid_rowconfigure(0, weight=1)
        self.parent.grid_columnconfigure(0, weight=1)
        self.parent.config(background="lavender")

        # Define the different GUI widgets
        self.dose_label = Tkinter.Label(self.parent, text="Dose:")
        self.dose_entry = Tkinter.Entry(self.parent)
        self.dose_label.grid(row=0, column=0, sticky=Tkinter.W)
        self.dose_entry.grid(row=0, column=1)

        self.modified_label = Tkinter.Label(self.parent,
                                            text="Date Modified:")
        self.modified_entry = Tkinter.Entry(self.parent)
        self.modified_label.grid(row=1, column=0, sticky=Tkinter.W)
        self.modified_entry.grid(row=1, column=1)

        self.submit_button = Tkinter.Button(self.parent, text="Insert",
                                            command=self.insert_data)
        self.submit_button.grid(row=2, column=1, sticky=Tkinter.W)
        self.exit_button = Tkinter.Button(self.parent, text="Exit",
                                          command=self.parent.quit)
        self.exit_button.grid(row=0, column=3)

        # Set the treeview
        self.tree = ttk.Treeview(self.parent,
                                 columns=('Dose', 'Modification date'))
        self.tree.heading('#0', text='Item')
        self.tree.heading('#1', text='Dose')
        self.tree.heading('#2', text='Modification Date')
        self.tree.column('#1', stretch=Tkinter.YES)
        self.tree.column('#2', stretch=Tkinter.YES)
        self.tree.column('#0', stretch=Tkinter.YES)
        self.tree.grid(row=4, columnspan=4, sticky='nsew')
        self.treeview = self.tree
        # Initialize the counter
        self.i = 0

    def insert_data(self):
        """
        Insertion method.
        """
        self.treeview.insert('', 'end', text="Item_"+str(self.i),
                             values=(self.dose_entry.get() + " mg",
                                     self.modified_entry.get()))
        # Increment counter
        self.i = self.i + 1


def main():
    root=Tkinter.Tk()
    d=Begueradj(root)
    root.mainloop()

if __name__=="__main__":
    main()

注意:

我在Python 2.7中对此进行了编码,但如果您使用的是Python 3.x,它应该可以正常工作。