Внесение данных в строки таблицы QTableWidget
День добрый, есть алгоритм который добавляет в QTableWidget строку, создавая в нем данные
from PyQt5 import QtCore, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(758, 284)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.BT1 = QtWidgets.QPushButton(self.centralwidget)
self.BT1.setGeometry(QtCore.QRect(40, 30, 301, 71))
self.BT1.setObjectName("BT1")
self.BT2 = QtWidgets.QPushButton(self.centralwidget)
self.BT2.setGeometry(QtCore.QRect(40, 110, 301, 71))
self.BT2.setObjectName("pushButton_2")
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setGeometry(QtCore.QRect(350, 30, 361, 151))
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(3)
self.tableWidget.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(2, item)
MainWindow.setCentralWidget(self.centralwidget)
self.BT1.clicked.connect(self.BT_1_Clicked) # Связь с 1-ой кнопкой
self.BT2.clicked.connect(self.BT_2_Clicked) # Связь с 2-ой кнопкой
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.BT1.setText(_translate("MainWindow", "Past 1"))
self.BT2.setText(_translate("MainWindow", "Past 2"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "x"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "y"))
item = self.tableWidget.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "z"))
def BT_1_Clicked(self):
nr = self.tableWidget.rowCount()
self.tableWidget.insertRow(nr)
self.tableWidget.setItem(nr, 0, QtWidgets.QTableWidgetItem('x'))
self.tableWidget.setItem(nr, 1, QtWidgets.QTableWidgetItem('y'))
pass
def BT_2_Clicked(self):
nr = self.tableWidget.rowCount()
self.tableWidget.insertRow(nr)
self.tableWidget.setItem(nr, 2, QtWidgets.QTableWidgetItem('z'))
pass
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
В данном коде при нажатии на кнопку №1 появляется строка, в ней заполняется 1-ый и 2-ой столбец.
При нажатии на кнопку №2 появляется еще одна строка, и в ней заполняется 3 столбец.
Суть задачи:
Сделать так, чтобы при нажатии на кнопку №2 заполнялся 3-ий столбец в строке, которая создалась от 1-ой кнопкой.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.
Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
from PyQt5 import QtCore, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(758, 284)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.BT1 = QtWidgets.QPushButton(self.centralwidget)
self.BT1.setGeometry(QtCore.QRect(40, 30, 301, 71))
self.BT1.setObjectName("BT1")
self.BT2 = QtWidgets.QPushButton(self.centralwidget)
self.BT2.setGeometry(QtCore.QRect(40, 110, 301, 71))
self.BT2.setObjectName("pushButton_2")
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setGeometry(QtCore.QRect(350, 30, 361, 151))
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(3)
self.tableWidget.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(2, item)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.BT1.setText(_translate("MainWindow", "Past 1"))
self.BT2.setText(_translate("MainWindow", "Past 2"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "x"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "y"))
item = self.tableWidget.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "z"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.BT1.clicked.connect(self.bt_1_clicked)
self.BT2.clicked.connect(self.bt_2_clicked)
self.row = None
def bt_1_clicked(self):
nr = self.tableWidget.rowCount()
if self.row is None:
self.tableWidget.insertRow(nr)
self.tableWidget.setItem(nr, 0, QtWidgets.QTableWidgetItem('x'))
self.tableWidget.setItem(nr, 1, QtWidgets.QTableWidgetItem('y'))
self.row = nr
else:
msg = QtWidgets.QMessageBox.information(
self,
'Внимание',
'Нарушена последовательность \nнажмите кнопку Past 2')
def bt_2_clicked(self):
if not self.row is None:
self.tableWidget.setItem(self.row, 2, QtWidgets.QTableWidgetItem('z'))
self.row = None
else:
msg = QtWidgets.QMessageBox.information(
self,
'Внимание',
'Нарушена последовательность \nнажмите кнопку Past 1')
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())

