这是迄今为止我的代码:
class qtreewidget(qtwidgets.qtreewidget):
返回按下=qtcore.signal(qtreeWidget,int)
定义初始化(self,*args,**kwargs):
qtwidgets.qtreewidget.\uu init\uuuuu(self,*args,**kwargs)
def keypressevent(self,事件):
如果event.key()==qtcore.qt.key_返回:
self.returnPressed.emit(self.\u selected\项目,self.\u selected\列)
其他:
qtwidgets.qtreewidget.keypressevent(self,event)
定义鼠标位置计算(自我,x位置):
“查找当前选定的列。”
尝试:
item=self.selecteditems()[0]
除了索引错误:
项目=无
header=self.header()。
总宽度=0
对于范围内的i(self.columncount()):
总宽度+=标题。节大小(I)
如果总宽度大于x位置:
返回(项,i)
def mousepressevent(self,事件):
qtWidgets.qtreeWidget.mousePressEvent(self,event)
self._selected_item,self._selected_column=self._mouse_pos_calculate(event.pos().x())
def mousereleaseevent(self,事件):
qtWidgets.qtreeWidget.mouseReleaseEvent(self,event)
self._selected_item,self._selected_column=self._mouse_pos_calculate(event.pos().x())
< /代码>
编辑:由于Eyllanesc改进了功能
class qtreewidget(qtwidgets.qtreewidget):
“按回车键时添加编辑单元格的功能。”
itemedit=qtcore.signal(qtwidgets.qtreewidgetitem,int)
定义初始化(self,*args,**kwargs):
qtwidgets.qtreewidget.\uu init\uuuuu(self,*args,**kwargs)
self.\u last\u item=无
self.\u最后一列=0
self.itemDoubleClicked.connect(self._编辑_item_拦截)
def _edit_item_intercept(self,item=none,column=none):
edit_itemitemDoubleClicked

class QTreeWidget(QtWidgets.QTreeWidget):
returnPressed = QtCore.Signal(QTreeWidget, int)
def __init__(self, *args, **kwargs):
QtWidgets.QTreeWidget.__init__(self, *args, **kwargs)
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Return:
self.returnPressed.emit(self._selected_item, self._selected_column)
else:
QtWidgets.QTreeWidget.keyPressEvent(self, event)
def _mouse_pos_calculate(self, x_pos):
"""Find the currently selected column."""
try:
item = self.selectedItems()[0]
except IndexError:
item = None
header = self.header()
total_width = 0
for i in range(self.columnCount()):
total_width += header.sectionSize(i)
if total_width > x_pos:
return (item, i)
def mousePressEvent(self, event):
QtWidgets.QTreeWidget.mousePressEvent(self, event)
self._selected_item, self._selected_column = self._mouse_pos_calculate(event.pos().x())
def mouseReleaseEvent(self, event):
QtWidgets.QTreeWidget.mouseReleaseEvent(self, event)
self._selected_item, self._selected_column = self._mouse_pos_calculate(event.pos().x())
class QTreeWidget(QtWidgets.QTreeWidget):
"""Add ability to edit cells when pressing return."""
itemEdit = QtCore.Signal(QtWidgets.QTreeWidgetItem, int)
def __init__(self, *args, **kwargs):
QtWidgets.QTreeWidget.__init__(self, *args, **kwargs)
self._last_item = None
self._last_column = 0
self.itemDoubleClicked.connect(self._edit_item_intercept)
def _edit_item_intercept(self, item=None, column=None):
if item is None:
item = self._last_item
if column is None:
column = self._last_column
self.itemEdit.emit(item, column)
def _store_last_cell(self, pos):
selected_item = self.itemAt(pos)
if selected_item is None:
return
self._last_item = selected_item
self._last_column = self.header().logicalIndexAt(pos.x())
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Return:
return self._edit_item_intercept()
QtWidgets.QTreeWidget.keyPressEvent(self, event)
def mouseMoveEvent(self, event):
QtWidgets.QTreeWidget.mouseMoveEvent(self, event)
self._store_last_cell(event.pos())