【发布时间】:2020-02-15 00:23:23
【问题描述】:
首先,我将描述并展示我的小程序是如何工作的,以便我的问题易于理解
节目说明
以下是我用于该计划的 2 个寡妇:
主窗口
输入窗口
主窗口显示在程序的开头。我将 QListWidget 用于“宏”列表,它显示了从 Sqlite 数据库(DB)读取的每个条目的标题。当按下主窗口中的“新建”按钮时,会显示一个新的输入窗口。输入窗口中的“保存”按钮将标题和描述输入保存到数据库并更新主窗口中的“宏”列表。这看起来像这样:
在输入窗口输入信息
更新的主窗口
我的 Sqlite 表
我的问题
我希望能够在“宏”列表中选择一个条目,按“编辑”按钮,然后显示填充了数据库数据的输入窗口。但是,因为 QListWidget 只允许输入字符串,所以我无法使用它的 PK ('id') 进行搜索。
我正在考虑使用 QTableWidget 而不是 QListWidget。我将加载整个表格,但隐藏除标题列之外的所有列,以便只有标题会显示在主窗口的“宏”列表中。对于查询,我将通过访问所选条目的第 0 个索引来使用条目的 PK。
如果这是正确的步骤,请告诉我。如果不是,请描述您将使用什么来实现仅显示标题但允许查询其数据的列表。我是 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()
【问题讨论】: