Сначала я опишу и покажу, как моя мини-программа работает визуально, поэтому мою проблему легко понять
Описание программы
Ниже приведены две вдовы, которые я использую для программы:
Главное окно
Окно ввода
Главное окно отображается в начале программы , Я использовал QListWidget для списка «Макросы», который показывает заголовки каждой записи, прочитанной из базы данных Sqlite (БД). Новое окно ввода отображается при нажатии кнопки «Создать» в главном окне. Кнопка «Сохранить» в окне ввода сохраняет ввод заголовка и описания в БД и обновляет список «Макросы» в главном окне. Это будет выглядеть примерно так:
Введите информацию в окне ввода
Обновлено главное окно
Моя таблица Sqlite
Моя проблема
Я хотел бы иметь возможность выбрать запись в списке «Макросы», нажать кнопку «Редактировать» и показать окно ввода, заполненное данными из БД. Однако, поскольку QListWidget позволяет вводить только строки, я не могу искать, используя его PK ('id').
Я думаю об использовании QTableWidget вместо QListWidget. Я загружу всю таблицу, но скрою все столбцы, кроме столбца заголовка, чтобы в главном окне в списке «Макросы» отображались только заголовки. Для запросов я буду использовать PK записи, получая доступ к 0-му индексу выбранной записи.
Пожалуйста, дайте мне знать, если это правильный шаг. Если нет, опишите, что вы будете использовать для реализации списка, который показывает только заголовок, но позволяет запрашивать его данные. Я новичок в PyQt / PySide и буду очень признателен за любые рекомендации.
Коды
Ниже приведен код, выполняемый при нажатии кнопки «Сохранить» (плюс его вспомогательные функции)
def save_macro(self):
title = self.lineedit.text()
description = self.textedit.toPlainText()
add_sql_query = ''' INSERT INTO Macros (title,description)
VALUES(?,?) '''
# Helper func that creates connection to db
sqlhelper = SqliteHelper("entry name")
if sqlhelper is not None: # If db is connected:
macro_data = (title, description)
sqlhelper.insert(add_sql_query, macro_data)
self.close()
class SqliteHelper:
def __init__(self, name=None):
self.conn = None
self.cursor = None
if name:
self._create_connection(name)
def _create_connection(self, name):
try:
self.conn = sqlite3.connect(name)
self.cursor = self.conn.cursor()
print(sqlite3.version)
except sqlite3.Error as e:
print(e)
def insert(self, query, inserts): # Insert
c = self.cursor
c.execute(query, inserts)
self.conn.commit()