Не получается скопировать строку в QTableWidget дочернего окна из QTableWidget основного окна
я не могу разобраться, как при нажатии на кнопку "Добавить", скопировать строку с характеристиками итема в таблицу дочернего окна.
import sys
from PyQt5 import uic
from PyQt5.QtWidgets import *
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setFixedSize(600, 450)
table = QTableWidget(self)
table.setGeometry(0, 0, 600, 400)
btn2 = QPushButton(self)
btn2.setGeometry(250, 400, 100, 40)
btn2.setText("Окно 2")
btn2.clicked.connect(self.open_second_window)
table.insertRow(0)
row_header = ['Процессор']
table.setVerticalHeaderLabels(row_header)
for i in range(7):
table.insertColumn(i)
self.btn = QPushButton("Добавить")
self.btn.clicked.connect(self.add_cpu)
table.setCellWidget(0, 6, self.btn)
item = QTableWidgetItem()
item.setText("Intel")
table.setItem(0, 0, item)
item2 = QTableWidgetItem()
item2.setText("i3 8100")
table.setItem(0, 1, item2)
item3 = QTableWidgetItem()
item3.setText("3,6 Ghz")
table.setItem(0, 2, item3)
item4 = QTableWidgetItem()
item4.setText("4 cores")
table.setItem(0, 3, item4)
item5 = QTableWidgetItem()
item5.setText("4 threads")
table.setItem(0, 4, item5)
item6 = QTableWidgetItem()
item6.setText("65W")
table.setItem(0, 5, item6)
table.resizeColumnsToContents()
def open_second_window(self):
self.window = SecondWindow(self)
self.window.show()
def add_cpu(self):
pass
class SecondWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setFixedSize(600, 450)
table2 = QTableWidget(self)
table2.setGeometry(0, 0, 600, 400)
table2.insertRow(0)
for i in range(8):
table2.insertColumn(i)
row_header = ['Процессор']
column_headers = ['1', '2', '3', '4', '5', '6', '7', '8']
table2.setVerticalHeaderLabels(row_header)
table2.setHorizontalHeaderLabels(column_headers)
App = QApplication(sys.argv)
a = MainWindow()
a.show()
sys.exit(App.exec())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
QTableWidgetItem *QTableWidget::item(int row, int column) const
Возвращает элемент для данной строки и столбца, если он был установлен; в противном случае возвращает nullptr.
void QTableWidget::setItem(int row, int column, QTableWidgetItem *item)
Устанавливает элемент для данной строки и столбца как item. Таблица становится владельцем элемента.
import sys
#from PyQt5 import uic
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
class SecondWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.resize(890, 200)
self.centralWidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralWidget)
self.table2 = QTableWidget()
self.table2.insertRow(0)
for i in range(8):
self.table2.insertColumn(i)
row_header = ['Процессор']
column_headers = ['1', '2', '3', '4', '5', '6', '7', '8']
self.table2.setVerticalHeaderLabels(row_header)
self.table2.setHorizontalHeaderLabels(column_headers)
gridLayout = QtWidgets.QGridLayout(self.centralWidget)
gridLayout.addWidget(self.table2)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.myDict = {}
self.centralWidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralWidget)
row = 0 # +++
self.btn = QPushButton("Добавить")
self.btn.clicked.connect(lambda ch, row=row : self.add_cpu(row)) # +++
btn2 = QPushButton(self)
btn2.setText("Окно 2")
btn2.clicked.connect(self.open_second_window)
self.table = QTableWidget()
self.table.insertRow(0)
row_header = ['Процессор']
self.table.setVerticalHeaderLabels(row_header)
for i in range(7):
self.table.insertColumn(i)
self.table.setCellWidget(0, 6, self.btn)
item = QTableWidgetItem()
item.setText("Intel")
self.table.setItem(0, 0, item)
item2 = QTableWidgetItem()
item2.setText("i3 8100")
self.table.setItem(0, 1, item2)
item3 = QTableWidgetItem()
item3.setText("3,6 Ghz")
self.table.setItem(0, 2, item3)
item4 = QTableWidgetItem()
item4.setText("4 cores")
self.table.setItem(0, 3, item4)
item5 = QTableWidgetItem()
item5.setText("4 threads")
self.table.setItem(0, 4, item5)
item6 = QTableWidgetItem()
item6.setText("65W")
self.table.setItem(0, 5, item6)
self.table.resizeColumnsToContents()
gridLayout = QtWidgets.QGridLayout(self.centralWidget)
gridLayout.addWidget(self.table)
gridLayout.addWidget(btn2)
self.window = SecondWindow(self)
def open_second_window(self):
# self.window = SecondWindow(self)
self.window.show()
def add_cpu(self, row):
#print(f'row = {row}')
_list = []
columns = self.table.columnCount()
for column in range(columns):
item = self.table.item(row, column)
item = item.text() if item else ''
_list.append(item)
self.myDict[row] = _list
#print(self.myDict)
for row, columns in self.myDict.items():
for col, column in enumerate(columns):
self.window.table2.setItem(row, col, QtWidgets.QTableWidgetItem(str(column)))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
w.resize(600, 450)
w.show()
sys.exit(app.exec_())


