Как передать в датафрейм выбранные из QComboBox (который вставлен в ячейку QTableWidget) значения?
У меня есть QTableWidget
, содержащий столбец, полностью заполненный QComboBox
. Значения этого QTableWidget
передаю в pandas.DataFrame()
.
Проблема в том, что в датафрейм не передаются значения из QComboBox
, которые лежат в ячейках этой таблицы.
Как сделать так, чтобы значения, выбранные в QComboBox
, которые находятся в QTableWidget
, передавались в датафрейм также, как и все значения из этой таблицы?
from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets
from PyQt5.QtWidgets import * # Импортировали всё, в том числе, QApplication
from PyQt5.QtGui import * # QPainter создаёт фигуры, QBrush - текстура, QPen - дазайн
from PyQt5.QtCore import *
import sys
import pandas as pd
app = QApplication([])
tab = QTabWidget()
tab.setGeometry(0, 0, QApplication.desktop().width(), QApplication.desktop().height())
class Получить_из_Жители:
df = pd.DataFrame(
{
'№': [0, 1, 2, 3, 4, 5, 6, 7],
'Наличие КПУ': ["", "", "", "", "", "", "", ""]
}
)
# Создаём табли23 и заполняем её
headers = df.columns.values.tolist() # Список имён столбцов
table = QTableWidget()
table.setColumnCount(len(headers)) # Считает количество столбцов для их последующего переименования
table.setHorizontalHeaderLabels(headers) # Наименования столбцов
table.setColumnWidth(0, 120) # Ширина столбца 1
table.setColumnWidth(1, 150) # Ширина столбца 2
table.setColumnWidth(2, 410)
table.verticalHeader().setVisible(False) # Удаляет идексы строк
for i, row in df.iterrows():
table.setRowCount(8) # Пользователь выберен кол-во кв
for j in range(table.columnCount()):
table.setItem(i, j, QTableWidgetItem(str(row[j])))
# Заполняем столбец "Наличие КПУ" комбобоксами с вариантами выбора значения "Да" и "Нет"z
apartment_number = 0
for row in df['Наличие КПУ']:
if df['№'].loc[apartment_number] != '':
row = QtWidgets.QComboBox()
list = ["Да", "Нет"]
row.addItems(list)
table.setCellWidget(apartment_number, 1, row)
apartment_number += 1
class Загружаем_в_базу_данных:
global data
data = Получить_из_Жители.table
col_count = data.columnCount()
row_count = data.rowCount()
headers = [str(data.horizontalHeaderItem(i).text()) for i in range(col_count)]
df_list = []
for row in range(row_count):
df_list2 = []
for col in range(col_count):
table_item = data.item(row,col)
df_list2.append('' if table_item is None else str(table_item.text()))
df_list.append(df_list2)
df = pd.DataFrame(df_list, columns=headers)
print(df)
tab.addTab(Получить_из_Жители.table, "Жители")
tab.setFont(QFont('Times New Roman', 13))
tab.show()
sys.exit(app.exec_())
Источник: Stack Overflow на русском