Tkinter Treeview 不能编辑多于一列
Tkinter Treeview cannot edit more that one column
我使用一个 Tkinter TreeView,我用文件中的数据填充。
结果是每行预填 6 列数字数据。
一些行只有一个列值,其他行有多个填充数据的列,可由用户编辑(鼠标右键单击)。
对于具有单个可编辑列的行,我使用以下代码:
...
self.tree.insert(id2 , 2, text=key2.strip('\r\n'), \
values=("","","10","","",""), \
tags=('','','tag3','','',''))
self.tree.tag_bind(('','','tag3','','',''), '<Button-3>', self.popupEntry)
...
结果:(正常)
如果右键单击然后弹出带有文本输入的对话框,验证后,对应行的列成功填充了新值。这适用于任何单值元组 "tags".
但是,对于多于一个可编辑列的行,我修改了之前的代码如下:
...
self.tree.insert(id2 , 2, text=key2.strip('\r\n'), \
values=("","","10","","","10"), \
tags=('','','tag3','','','tag6'))
self.tree.tag_bind(('','','tag3','','','tag6'), '<Button-3>', self.popupEntry)
...
结果:(不正常)
鼠标右键无反应,无任何反应
期望的行为:
- 对于具有 2 个或更多可编辑列的行,右键单击以生成包含 2 个文本条目的对话框,验证后,将填充 2 个列值。
类似的东西:
弹窗代码:
def popupEntry(self, event):
result = tkSimpleDialog.askinteger("New value", "Please enter a new numeric value")
if result:
self.tree.item(self.tree.focus(), values=self.tag_to_val(self.tree.item(self.tree.focus(), 'tags'), result))
你不能像这样绑定到一组标签。您必须为每个单独的标签创建一个绑定。
我使用一个 Tkinter TreeView,我用文件中的数据填充。
结果是每行预填 6 列数字数据。 一些行只有一个列值,其他行有多个填充数据的列,可由用户编辑(鼠标右键单击)。
对于具有单个可编辑列的行,我使用以下代码:
...
self.tree.insert(id2 , 2, text=key2.strip('\r\n'), \
values=("","","10","","",""), \
tags=('','','tag3','','',''))
self.tree.tag_bind(('','','tag3','','',''), '<Button-3>', self.popupEntry)
...
结果:(正常) 如果右键单击然后弹出带有文本输入的对话框,验证后,对应行的列成功填充了新值。这适用于任何单值元组 "tags".
但是,对于多于一个可编辑列的行,我修改了之前的代码如下:
...
self.tree.insert(id2 , 2, text=key2.strip('\r\n'), \
values=("","","10","","","10"), \
tags=('','','tag3','','','tag6'))
self.tree.tag_bind(('','','tag3','','','tag6'), '<Button-3>', self.popupEntry)
...
结果:(不正常) 鼠标右键无反应,无任何反应
期望的行为: - 对于具有 2 个或更多可编辑列的行,右键单击以生成包含 2 个文本条目的对话框,验证后,将填充 2 个列值。
类似的东西:
弹窗代码:
def popupEntry(self, event):
result = tkSimpleDialog.askinteger("New value", "Please enter a new numeric value")
if result:
self.tree.item(self.tree.focus(), values=self.tag_to_val(self.tree.item(self.tree.focus(), 'tags'), result))
你不能像这样绑定到一组标签。您必须为每个单独的标签创建一个绑定。