这是我的示例代码。我想在按下输入按钮时将条目中输入的项目插入到树视图中。我是python和tkinter的新手,并且没有太多关于treeview的内容。
shared_ptr
我应该作为一个论点传递什么? 或者treeview是适合这个的小部件,还是有人可以建议适合此问题的小部件?感谢
答案 0 :(得分:23)
您似乎只对如何在Tkinter.Entry()
点击后将用户在ttk.Treeview()
窗口小部件中输入的数据插入Tkinter.Button()
感兴趣。
我设计了一个简单的界面来向您展示如何解决这个问题。您可以根据问题调整我的解决方案。
以下是应用程序演示的样子:
所以我设置了一个计数器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,它应该可以正常工作。