我将ttk.TreeView用作多列ListBox,该列表框有效地显示了我作为表格发送给它的sql数据。当我执行sql查询并且treeview显示查询的数据时,有选择数据的选项,如单击时突出显示的行。我是否可以单击一行以突出显示数据,然后单击另一个按钮创建一个弹出窗口,其中包含要编辑的数据?
因为我正在使用SQL,所以我只需要选择数据,然后就可以使用它从SQL表(而不是树视图表)中将其删除。这是下面的树,其中包含一些选定数据的示例。我可以只传递要编辑或删除的选定数据,还是可以传递某些数据?
编辑:
def OnDoubleClick(self,event): top1=Toplevel(height=600,width=500) #frame is just for managing objects not absolutely needed but i think it is good #to use frame when using object so i have kept it in curItem = self.tree.focus() contents =(self.tree.item(curItem)) selectedetails = contents['values'] #this is what you would use to when presenting the selectedd information self.example_var = StringVar() self.example_var.set(selectedetails[1]) self.example_txt = Entry(top1,textvariable=self.example_var) self.example.grid(row=1,column=1)
我将用于管理对象的框架更改为顶层,并更改了入口小部件的位置,使其位于同一位置(top1)。当我双击树中的一个项目时产生的错误消息是:
Exception in Tkinter callback Traceback (most recent call last): File "C:\Python33\lib\tkinter\__init__.py", line 1489, in __call__ return self.func(*args) File "C:\Users\lukeh\Documents\a\test for double click.py", line 278, in OnDoubleClick self.example.grid(row=1,column=1) AttributeError: 'MultiColumnListbox' object has no attribute 'example'
当我删除self.example开始的代码的后半部分时,除了创建Toplevel之外,该代码实际上没有执行任何其他操作。
当我删除self.example代码行并仅使用print (selectedetails)正确的数据行时。
print (selectedetails)
首先,您需要使用双击将事件绑定到树上
self.tree.bind("<Double-1>",lambda event :self.OnDoubleClick(event)) #note the OnDoubleClick is the name of the sub that python will look for when tree #double clicked
接下来,您需要使您的子例程在双击树时被调用(在我的示例中为OnDoubleClick)
def OnDoubleClick(self, event): frame3 = tk.LabelFrame(self, text="frame1", width=300, height=130, bd=5) frame3.grid(row=2, column=0, columnspan=3, padx=8) #frame is just for managing objects not absolutely needed but i think it is good #to use frame when using object so i have kept it in curItem = self.tree.focus() contents =(self.tree.item(curItem)) selectedetails = contents['values'] #this is what you would use to when presenting the selectedd information
然后,要访问此选定数据,只需使用具有所需缩进的数组名称(在此示例中为selectedetails)。然后,我使用字符串变量用所选数据填充条目。
self.example_var = StringVar() self.example_var.set(selectedetails[1]) self.example_txt = Entry(frame3,textvariable=self.example_var) self.example_txt.grid(row=1,column=1)