用于从剪贴板插入表的PyQt4表 – tableWidget?

我正在寻找一个可以用Qtdevise器生成的表格,或者直接用PyQt4生成一个表格,其中可以插入一个从Excel电子表格中复制的内容。 所以,例如在剪贴板中有这样的东西:

1 5

2 2

3 2

然后粘贴到这样的东西,这样每个数字是在一个不同的单元格:

在这里输入图像说明

我有这样的代码:

 from PyQt4 import QtCore, QtGui import sys class Ui_MainWindow(QtGui.QMainWindow): def __init__(self): QtGui.QDialog.__init__(self) self.setupUi(self) def setupUi(self, MainWindow): MainWindow.resize(320, 120) self.centralwidget = QtGui.QWidget(MainWindow) self.tableWidget = QtGui.QTableWidget(self.centralwidget) self.tableWidget.setEnabled(True) self.tableWidget.setGeometry(QtCore.QRect(0, 0, 400, 200)) self.tableWidget.setRowCount(3) self.tableWidget.setColumnCount(3) MainWindow.setCentralWidget(self.centralwidget) if __name__ == '__main__': app = QtGui.QApplication(sys.argv) ex = Ui_MainWindow() ex.show() sys.exit(app.exec_()) 

现在的问题是人们必须独立地select每个单元格,并且使用这个小部件来标记几个单元格是不可能的。 任何人有一个替代小部件的build议或适当的调整这个小部件?

您需要通过重写keyPressEvent方法并手动处理剪贴板数据来捕获Ctrl-V键盘事件。

 class MyTable(QtGui.QTableWidget): def keyPressEvent(self, event): if event.key() == QtCore.Qt.Key_V and event.modifiers() == QtCore.Qt.ControlModifier: # Check to see if clipboard contains excel data. # Manually process clipboard data and insert # it into the table starting from the selected tableitem ... return super(MyTable, self).keyPressEvent(event) 

你可以使用QClipboardQMimeData从剪贴板获取excel数据。

 from pprint import pprint clip = QtGui.QApplication.clipboard() mime = clip.mimeData() pprint(mime.formats()) 

你应该看到这样的东西:

 [u'text/html', u'text/plain', u'application/x-qt-windows-mime;value="Csv"', ... 

最后一个是excel数据。 Excel会把数据放在几个不同的格式中,你可以检查每一个格式你最喜欢的格式,但是如果你不关心格式化的话,CSV可能是最简单的。

 data = mime.data('application/x-qt-windws-mime;value="Csv"') # convert from QByteArray to python string data = str(data.data()) print data 

您应该可以看到以csv格式复制的数据。

 a,b,c d,e,f 

然后parsing数据并将其插入表中。