# -*- coding:utf-8 -*-
'''
Created on 2015年8月4日
@author: DXL
Copyright (C) 2004-2012 Shandong Leadom Software Development Co.,Ltd
'''
from PyQt4 import QtGui,QtCore
from ui import resource_rc
class TableWidgetHelper(QtCore.QObject):
def __init__(self,parent,del_column=None):
QtCore.QObject.__init__(self,parent)
if not isinstance(parent,QtGui.QTableWidget) or parent.columnCount()<=0:
print ' Parent of TableWidgetHelper must is QTableWidget and its has one column at last.'
self._parent = None
else:
self._parent = parent
self._parent.currentCellChanged.connect(self.onItemChanged)
self._parent.cellClicked.connect(self.onClickedItem)
self._parent.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
#self._addActions = []
if isinstance(del_column,int) or del_column is None:
self._del_column = del_column
if self._del_column is not None and self._parent:
if not self._parent.rowCount():
self.onItemChanged(0,0)
del_all_action = QtGui.QAction(u"清空",self._parent)
del_all_action.triggered.connect(self.onDelAll)
del_select_action = QtGui.QAction(u"删除所选",self._parent)
del_select_action.triggered.connect(self.onDelSelect)
insert_action = QtGui.QAction(u"增加一行",self._parent)
insert_action.triggered.connect(self.onAddItem)
self._parent.addAction(del_all_action)
self._parent.addAction(del_select_action)
self._parent.addAction(insert_action)
else:
print 'Variant of del_column hast unexcept type.'
self._del_column = None
def onDelAll(self):
if self._parent:
self._parent.setRowCount(0)
pass
def onAddItem(self):
if self._parent:
r = self._parent.rowCount()-1 if self._parent.rowCount() else 0
self.onItemChanged(r, 0)
pass
def onDelSelect(self):
select_rows = set()
for rg in self._parent.selectedRanges():
for i in range(rg.topRow(),rg.bottomRow()+1):
select_rows.add(i)
select_rows = list(select_rows)
select_rows.sort(reverse=True)
for index in select_rows:
self._parent.removeRow(index)
pass
def onClickedItem(self,r,c):
if self._del_column is None or not self._parent:
return
if c == self._del_column:
ret = QtGui.QMessageBox.warning(self._parent, u'警告', u'是否删除第%s行?'%(r+1,), QtGui.QMessageBox.Yes|QtGui.QMessageBox.No)
if ret == QtGui.QMessageBox.Yes:
self._parent.removeRow(r)
return
else:
return
def onItemChanged(self,r,c):
if self._del_column is None or not self._parent:
return
if r + 1 >= self._parent.rowCount():
#for i in range(self._parent.columnCount()):
self._parent.insertRow(self._parent.rowCount())
item = QtGui.QTableWidgetItem(QtGui.QIcon(':/icon/del.png'),'')
self._parent.setItem(self._parent.rowCount()-1,self._del_column,item)
if __name__ == "__main__":
a = QtGui.QApplication([])
w = QtGui.QTableWidget()
w.setColumnCount(5)
# w.setRowCount(10)
# for i in range(10):
# for j in range(5):
# insert_str = "(%s,%s)"%(i,j)
# item = QtGui.QTableWidgetItem(insert_str)
# w.setItem(i,j,item)
w_helper = TableWidgetHelper(w,4)
w.show()
a.exec_()
使QTableWidget 增加自动添加行,单击删除行的功能.
最新推荐文章于 2024-09-23 11:43:06 发布