gpt4 book ai didi

python - 复制 pyqt 表选择,包括列标题和行标题

转载 作者:行者123 更新时间:2023-12-02 00:14:02 26 4
gpt4 key购买 nike

我想复制 qt 表的选定部分,包括标题。默认的qt表复制仅复制一个单元格,而我需要整个选择,可以是多列和多行。我从不同的地方(主要是 here )将一些代码拼接在一起,它似乎工作得很好,只是它只复制单元格(数据),而不是标题。我还需要一些帮助来获取选择的标题。这是我的瘦身示例:

from PyQt4 import QtGui, QtCore
import sys

class MainWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(MainWidget, self).__init__(parent)

self.table = QtGui.QTableWidget(parent=self)
self.table.setColumnCount(2)
self.table.setRowCount(2)
self.table.setHorizontalHeaderLabels(['col1','col2'])
self.table.setVerticalHeaderLabels(['row1','row2'])
self.table.setItem(0,0,QtGui.QTableWidgetItem('foo'))
self.table.setItem(0,1,QtGui.QTableWidgetItem('bar'))
self.table.setItem(1,0,QtGui.QTableWidgetItem('baz'))
self.table.setItem(1,1,QtGui.QTableWidgetItem('qux'))

layout = QtGui.QGridLayout()
layout.addWidget(self.table, 1, 0)
self.setLayout(layout)

self.clip = QtGui.QApplication.clipboard()


def keyPressEvent(self, e):
if (e.modifiers() & QtCore.Qt.ControlModifier):
selected = self.table.selectedRanges()

if e.key() == QtCore.Qt.Key_C: #copy
s = ""

for r in xrange(selected[0].topRow(), selected[0].bottomRow()+1):
for c in xrange(selected[0].leftColumn(), selected[0].rightColumn()+1):
try:
s += str(self.table.item(r,c).text()) + "\t"
except AttributeError:
s += "\t"
s = s[:-1] + "\n" #eliminate last '\t'
self.clip.setText(s)


if __name__ == '__main__':

# Initialize the application
app = QtGui.QApplication(sys.argv)
mw = MainWidget()
mw.show()
app.exec_()

示例表如下所示:

     col1 col2
row1 foo bar
row2 baz qux

例如,如果我选择了 barbux,我希望副本为:

\t col2\n
row1 \t bar\n
row2 \t qux\n

我的实际案例有很多列和行。我的困难在于找出所选单元格的标题;我可以处理格式。非常感谢任何帮助或建议。提前致谢!

最佳答案

线索在标题项中:

class MainWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(MainWidget, self).__init__(parent)

self.table = QtGui.QTableWidget(parent=self)
self.table.setColumnCount(2)
self.table.setRowCount(2)
self.table.setHorizontalHeaderLabels(['col1','col2'])
self.table.setVerticalHeaderLabels(['row1','row2'])
self.table.setItem(0,0,QtGui.QTableWidgetItem('foo'))
self.table.setItem(0,1,QtGui.QTableWidgetItem('bar'))
self.table.setItem(1,0,QtGui.QTableWidgetItem('baz'))
self.table.setItem(1,1,QtGui.QTableWidgetItem('qux'))

layout = QtGui.QGridLayout()
layout.addWidget(self.table, 1, 0)
self.setLayout(layout)

self.clip = QtGui.QApplication.clipboard()


def keyPressEvent(self, e):
if (e.modifiers() & QtCore.Qt.ControlModifier):
selected = self.table.selectedRanges()

if e.key() == QtCore.Qt.Key_C: #copy
s = '\t'+"\t".join([str(self.table.horizontalHeaderItem(i).text()) for i in xrange(selected[0].leftColumn(), selected[0].rightColumn()+1)])
s = s + '\n'

for r in xrange(selected[0].topRow(), selected[0].bottomRow()+1):
s += self.table.verticalHeaderItem(r).text() + '\t'
for c in xrange(selected[0].leftColumn(), selected[0].rightColumn()+1):
try:
s += str(self.table.item(r,c).text()) + "\t"
except AttributeError:
s += "\t"
s = s[:-1] + "\n" #eliminate last '\t'
self.clip.setText(s)

关于python - 复制 pyqt 表选择,包括列标题和行标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24971305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com