Как получить данные из последней строки определенного столбца?
Имеется таблица из которой нужно вытащить значение последней строчки определенного столбца.
Причем количество строчек не фиксированное и может меняться.
main.py
from PyQt5 import QtCore, QtGui, QtWidgets
from table_3 import Ui_MainWindow
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
def buttonCheck(self):
pass
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
table_3.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(537, 265)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(5)
self.tableWidget.setRowCount(5)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(4, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(4, item)
self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1)
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 537, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
item = self.tableWidget.verticalHeaderItem(0)
item.setText(_translate("MainWindow", "1"))
item = self.tableWidget.verticalHeaderItem(1)
item.setText(_translate("MainWindow", "2"))
item = self.tableWidget.verticalHeaderItem(2)
item.setText(_translate("MainWindow", "3"))
item = self.tableWidget.verticalHeaderItem(3)
item.setText(_translate("MainWindow", "4"))
item = self.tableWidget.verticalHeaderItem(4)
item.setText(_translate("MainWindow", "5"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "1"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "2"))
item = self.tableWidget.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "3"))
item = self.tableWidget.horizontalHeaderItem(3)
item.setText(_translate("MainWindow", "4"))
item = self.tableWidget.horizontalHeaderItem(4)
item.setText(_translate("MainWindow", "5"))
self.pushButton.setText(_translate("MainWindow", "Вывести последнее значение"))
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 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import os
import csv
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(407, 353)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout_3.setObjectName("gridLayout_3")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.gridLayout = QtWidgets.QGridLayout(self.tab)
self.gridLayout.setObjectName("gridLayout")
self.tableWidget = QtWidgets.QTableWidget(self.tab)
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(8)
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)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(4, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(5, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(6, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(7, item)
self.tableWidget.horizontalHeader().setDefaultSectionSize(120)
self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1)
self.groupBox = QtWidgets.QGroupBox(self.tab)
self.groupBox.setObjectName("groupBox")
self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox)
self.gridLayout_4.setObjectName("gridLayout_4")
self.pushButton = QtWidgets.QPushButton(self.groupBox)
self.pushButton.setObjectName("pushButton")
self.gridLayout_4.addWidget(self.pushButton, 0, 0, 1, 2) # + 2
self.pushButton_2 = QtWidgets.QPushButton(self.groupBox)
self.pushButton_2.setObjectName("pushButton_2")
self.gridLayout_4.addWidget(self.pushButton_2, 1, 0, 1, 2) # + 2
self.gridLayout.addWidget(self.groupBox, 1, 0, 1, 1)
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.gridLayout_5 = QtWidgets.QGridLayout(self.tab_2)
self.gridLayout_5.setObjectName("gridLayout_5")
self.groupBox_2 = QtWidgets.QGroupBox(self.tab_2)
self.groupBox_2.setObjectName("groupBox_2")
self.gridLayout_5.addWidget(self.groupBox_2, 1, 0, 1, 1)
self.groupBox_3 = QtWidgets.QGroupBox(self.tab_2)
self.groupBox_3.setObjectName("groupBox_3")
self.gridLayout_5.addWidget(self.groupBox_3, 2, 0, 1, 1)
self.tabWidget.addTab(self.tab_2, "")
self.gridLayout_3.addWidget(self.tabWidget, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 407, 21))
self.menubar.setObjectName("menubar")
self.menu = QtWidgets.QMenu(self.menubar)
self.menu.setObjectName("menu")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.action = QtWidgets.QAction(MainWindow)
self.action.setObjectName("action")
self.action_2 = QtWidgets.QAction(MainWindow)
self.action_2.setObjectName("action_2")
self.menu.addAction(self.action)
self.menu.addAction(self.action_2)
self.menubar.addAction(self.menu.menuAction())
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "№"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "Фамилия"))
item = self.tableWidget.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "Имя"))
item = self.tableWidget.horizontalHeaderItem(3)
item.setText(_translate("MainWindow", "Отечество"))
item = self.tableWidget.horizontalHeaderItem(4)
item.setText(_translate("MainWindow", "Адрес"))
item = self.tableWidget.horizontalHeaderItem(5)
item.setText(_translate("MainWindow", "Номер телефона"))
item = self.tableWidget.horizontalHeaderItem(6)
item.setText(_translate("MainWindow", "Дата регистрации"))
item = self.tableWidget.horizontalHeaderItem(7)
item.setText(_translate("MainWindow", "Активность"))
self.groupBox.setTitle(_translate("MainWindow", "Настройки таблицы"))
self.pushButton.setText(_translate("MainWindow", "Добавить строку"))
self.pushButton_2.setText(_translate("MainWindow", "Удалить строку"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Таблица"))
self.groupBox_2.setTitle(_translate("MainWindow", "Ввод запроса"))
self.groupBox_3.setTitle(_translate("MainWindow", "Результат вопроса"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Поиск данных"))
self.menu.setTitle(_translate("MainWindow", "Файл"))
self.action.setText(_translate("MainWindow", "Открыть"))
self.action_2.setText(_translate("MainWindow", "Сохранить как..."))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.buttonAdd)
self.pushButton_2.clicked.connect(self.buttonDelete)
self.action.triggered.connect(self.actionOpen)
self.action_2.triggered.connect(self.actionSave)
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.spinBox = QtWidgets.QSpinBox()
self.spinBox.setPrefix(" Введите индекс колонки -> ")
self.spinBox.setRange(0, self.tableWidget.columnCount())
self.pushButton_last = QtWidgets.QPushButton(
'Значение последней строчки определенного столбца')
self.pushButton_last.clicked.connect(self.buttonLast)
self.gridLayout_4.addWidget(self.spinBox, 2, 0)
self.gridLayout_4.addWidget(self.pushButton_last, 2, 1)
def buttonLast(self):
row = self.tableWidget.rowCount()
if not row:
return
column = self.spinBox.value()
item = self.tableWidget.item(row-1, column)
if not item:
msg = QtWidgets.QMessageBox.information(
self, 'Внимание',
f'строка {row}, колонка {column+1} - Пустая')
else:
item = item.text()
msg = QtWidgets.QMessageBox.information(
self, 'Внимание',
f'строка {row}, колонка {column+1} = {item}')
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def buttonAdd(self):
rowPosition = self.tableWidget.rowCount()
self.tableWidget.insertRow(rowPosition)
def buttonDelete(self):
if self.tableWidget.rowCount() > 0:
self.tableWidget.removeRow(self.tableWidget.rowCount() - 1)
def actionSave(self):
path = QtWidgets.QFileDialog.getSaveFileName(
self,
'Save CSV',
os.getenv('HOME'),
'CSV(*.csv)')
if path[0] != '':
with open(path[0], 'w', newline='') as csv_file:
writer = csv.writer(csv_file, dialect='excel')
for row in range(self.tableWidget.rowCount()):
row_data = []
for column in range(self.tableWidget.columnCount()):
item = self.tableWidget.item(row, column)
if item is not None:
row_data.append(item.text())
else:
row_data.append('')
writer.writerow(row_data)
def actionOpen(self):
path, _ = QtWidgets.QFileDialog.getOpenFileName(
self, 'Open CSV', '.', 'CSV(*.csv)')
if not path:
return
with open(path, newline='') as csv_file:
self.tableWidget.setRowCount(0)
self.tableWidget.setColumnCount(8)
my_file = csv.reader(csv_file, delimiter=',', quotechar='|')
for row_data in my_file:
row = self.tableWidget.rowCount()
self.tableWidget.insertRow(row)
if len(row_data) > 8:
self.tableWidget.setColumnCount(len(row_data))
for column, stuff in enumerate(row_data):
item = QtWidgets.QTableWidgetItem(stuff)
self.tableWidget.setItem(row, column, item)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.resize(1020, 353)
w.show()
sys.exit(app.exec_())
