суть: есть таблица с животными и картинками к ним. так же есть диалоговое окно для добавления новых данных (имя, порода, возраст) и кнопка для добавления картинки. данные вставляются, только вот картинка встает не только что созданную строчку, а в верхнюю строчку таблицы. а должно быть так, чтобы картинка и свежие данные соответствовали
вот фрагмент кода:
def add_row_to_table(self, cat_id, name, gender, age, species, reserve, date_of_receipt, pickup_date, image_path):
row_position = self.animals_table.rowCount()
self.animals_table.insertRow(row_position)
item_cat_id = QTableWidgetItem(cat_id)
item_cat_id.setTextAlignment(Qt.AlignCenter)
self.animals_table.setItem(row_position, 0, item_cat_id)
item_name = QTableWidgetItem(name)
item_name.setTextAlignment(Qt.AlignCenter)
self.animals_table.setItem(row_position, 1, item_name)
item_gender = QTableWidgetItem(gender)
item_gender.setTextAlignment(Qt.AlignCenter)
self.animals_table.setItem(row_position, 2, item_gender)
item_age = QTableWidgetItem(age)
item_age.setTextAlignment(Qt.AlignCenter)
self.animals_table.setItem(row_position, 3, item_age)
item_species = QTableWidgetItem(species)
item_species.setTextAlignment(Qt.AlignCenter)
self.animals_table.setItem(row_position, 4, item_species)
item_reserve = QTableWidgetItem(reserve)
item_reserve.setTextAlignment(Qt.AlignCenter)
self.animals_table.setItem(row_position, 5, item_reserve)
item_date_of_receipt = QTableWidgetItem(date_of_receipt)
item_date_of_receipt.setTextAlignment(Qt.AlignCenter)
self.animals_table.setItem(row_position, 6, item_date_of_receipt)
item_pickup_date = QTableWidgetItem(pickup_date)
item_pickup_date.setTextAlignment(Qt.AlignCenter)
self.animals_table.setItem(row_position, 7, item_pickup_date)
pixmap = QPixmap(image_path)
if not pixmap.isNull():
label = QLabel()
label.setPixmap(pixmap.scaled(100, 100, Qt.KeepAspectRatio, Qt.SmoothTransformation))
self.animals_table.setCellWidget(row_position, 8, label)
def select_image(self, row):
file_dialog = QFileDialog(self)
file_dialog.setNameFilter("images (*.png *.jpg *.jpeg *.bmp)")
file_dialog.setViewMode(QFileDialog.Detail)
if file_dialog.exec_():
file_path = file_dialog.selectedFiles()[0]
pixmap = QPixmap(file_path)
if not pixmap.isNull():
label = QLabel()
label.setPixmap(pixmap.scaled(50, 50, Qt.KeepAspectRatio, Qt.SmoothTransformation))
self.animals_table.setCellWidget(row, 8, label)
self.update_image_path_in_database(row, file_path)
def update_image_path_in_database(self, row, image_path):
try:
animal_id = self.animals_table.item(row, 0).text()
self.cursor.execute("UPDATE cats_admin_test SET image_path = %s WHERE cat_id = %s;",
(image_path, animal_id))
self.connection.commit()
except Exception as e:
print(f'ошибка обновления пути к изображению в базе данных: {e}')
def get_input(self):
dialog = QDialog(self)
dialog.setWindowTitle('добавление животного')
dialog.resize(700, 100)
name_input = QLineEdit()
gender_input = QLineEdit()
age_input = QLineEdit()
species_input = QLineEdit()
reserve_input = QLineEdit()
date_of_receipt_input = QLineEdit()
pickup_date_input = QLineEdit()
name_label = QLabel('имя:')
gender_label = QLabel('вид:')
age_label = QLabel('возраст:')
species_label = QLabel('порода:')
reserve_label = QLabel('зарезервирован(а):')
date_of_receipt_label = QLabel('дата поступления:')
pickup_date_label = QLabel('дата забора:')
font = QFont('Gertrude', 9)
name_label.setFont(font)
gender_label.setFont(font)
age_label.setFont(font)
species_label.setFont(font)
reserve_label.setFont(font)
date_of_receipt_label.setFont(font)
pickup_date_label.setFont(font)
layout = QFormLayout()
layout.addRow(name_label, name_input)
layout.addRow(gender_label, gender_input)
layout.addRow(age_label, age_input)
layout.addRow(species_label, species_input)
layout.addRow(reserve_label, reserve_input)
layout.addRow(date_of_receipt_label, date_of_receipt_input)
layout.addRow(pickup_date_label, pickup_date_input)
select_image_button = QPushButton('выбрать изображение')
select_image_button.clicked.connect(self.select_image)
layout.addWidget(select_image_button)
button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
def handle_close():
dialog.accept()
button_box.accepted.connect(handle_close)
button_box.rejected.connect(dialog.reject)
layout.addWidget(button_box)
dialog.setLayout(layout)
if dialog.exec_() == QDialog.Accepted:
name = name_input.text().strip()
gender = gender_input.text().strip()
age = age_input.text().strip()
species = species_input.text().strip()
reserve = reserve_input.text().strip()
date_of_receipt = date_of_receipt_input.text().strip()
pickup_date = pickup_date_input.text().strip()
return name, gender, age, species, reserve, date_of_receipt, pickup_date, True
else:
return '', '', '', '', '', '', '', False
p.s знаю, что проблема в том, что я передаю просто позицию строки в
self.animals_table.setCellWidget(row_position, 8, label)
но не могу этого решить. должна передаваться позиция именно только что созданной строки с новыми данными.
помогите, пожалуйста, сделать это