有一个用Qt Designer制作的小应用程序,它有两个QTableWidget
带有一些数据的表(DataTable_1
, DataTable_2
)。
我找到了适合我的解决方案 ( https://quares.ru/?id=193989 ),但不幸的是我无法为自己正确应用它。
我是这样做的:
import sys
from PyQt5 import QtWidgets, QtCore
import design
class ExampleApp(QtWidgets.QMainWindow, design.Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.deleteRow_1.clicked.connect(self.delete_row_1)
self.addRow_1.clicked.connect(self.add_row_1)
self.deleteRow_2.clicked.connect(self.delete_row_2)
self.addRow_2.clicked.connect(self.add_row_2)
def keyPressEvent(self, event):
super().keyPressEvent(event)
if event.key() == QtCore.Qt.Key_C and (event.modifiers() & QtCore.Qt.ControlModifier):
self.DataTable_1.copied_cells = sorted(self.DataTable_1.selectedIndexes())
elif event.key() == QtCore.Qt.Key_V and (event.modifiers() & QtCore.Qt.ControlModifier):
r = self.DataTable_1.currentRow() - self.DataTable_1.copied_cells[0].row()
c = self.DataTable_1.currentColumn() - self.DataTable_1.copied_cells[0].column()
for cell in self.DataTable_1.copied_cells:
self.DataTable_1.setItem(cell.row() + r, cell.column() + c, QtWidgets.QTableWidgetItem(cell.data()))
def add_row_1(self):
row_position = self.DataTable_1.rowCount()
self.DataTable_1.insertRow(row_position)
def delete_row_1(self):
rows = set()
for index in self.DataTable_1.selectedIndexes():
rows.add(index.row())
for row in sorted(rows, reverse=True):
self.DataTable_1.removeRow(row)
def add_row_2(self):
row_position = self.DataTable_2.rowCount()
self.DataTable_2.insertRow(row_position)
def delete_row_2(self):
rows = set()
for index in self.DataTable_2.selectedIndexes():
rows.add(index.row())
for row in sorted(rows, reverse=True):
self.DataTable_2.removeRow(row)
def main():
app = QtWidgets.QApplication(sys.argv)
window = ExampleApp()
window.show()
app.exec_()
if __name__ == '__main__':
main()
使用 tableDataTable_1
一切正常,但我不能对 table 做同样的事情DataTable_2
。理想情况下,我还希望能够在表之间复制数据。谢谢你。
我试图为你做点什么,并标记了没有变化的块。
试试看,如果有问题,写。