首先,我将描述并展示我的迷你程序如何在视觉上工作,这样我的问题就很容易理解
以下是我用于该程序的2个寡妇:
主窗口
输入窗口
程序启动时显示主窗口。我将QListWidget用于“宏”列表,该列表显示了从Sqlite数据库(DB)读取的每个条目的标题。当按下主窗口中的“新建”按钮时,将显示一个新的输入窗口。输入窗口中的“保存”按钮将标题和描述输入保存到数据库,并在主窗口中更新“宏”列表。看起来像这样:
在输入窗口中输入信息
更新的主窗口
我的Sqlite表
我希望能够在“宏”(Macros)列表中选择一个条目,按“编辑”(Edit)按钮,并显示充满来自DB数据的输入窗口。但是,由于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()
答案 0 :(得分:1)
不要重新发明轮子,Qt提供了与数据库交互的类,例如,可以使用QSqlQueryModel,QSqlTableModel等处理表上的信息。要添加一行,您必须创建QSqlRecord并将其添加到模型中,对于该版本,可以使用QDataWidgetMapper来映射和编辑行的信息,要删除该行,必须删除该行并重新加载整个表。要指示应在QListView中显示哪个字段,请使用setModelColumn()方法,该方法应该是“标题”字段的列。
git rm {file1} {file2} ... {fileN}