使用 Sqlite 和 PyQT5 制作 TreeView
Make a TreeView with Sqlite and PyQT5
当我向我的 SQLite 数据库添加项目时,我试图在 QTreeWidget 中添加项目。我的问题是我想将项目作为 child 添加到给定的其他项目中。让我在代码中向您展示它。这是我的 Gui 示例:
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(213, 327)
Form.setWindowTitle("Form")
self.treeWidget = QtWidgets.QTreeWidget(Form)
self.treeWidget.setGeometry(QtCore.QRect(0, 10, 211, 311))
self.treeWidget.setObjectName("treeWidget")
self.treeWidget.headerItem().setText(0, "Categories")
self.treeWidget.setSortingEnabled(False)
self.printtree()
QtCore.QMetaObject.connectSlotsByName(Form)
def printtree(self):
rn = readsql_Names()
self.treeWidget.setColumnCount(1)
treeItem = QtWidgets.QTreeWidgetItem([rn])
self.treeWidget.addTopLevelItem(treeItem)
def displaytree():
conn = connect_DB() # Connection to the Database
cursor = conn.cursor()
table = cursor.execute(f"SELECT NAME FROM Test")
for item in table.fetchall():
name = str(item[0])
branch_list = QtWidgets.QTreeWidgetItem([name])
treeItem.addChild(branch_list)
# I guess here should be a if statement.
branch_list.addChild(QtWidgets.QTreeWidgetItem(["name"]))
displaytree()
这就是我的 SQLite 的样子:
def create_testsql(Tree_Table="Test"):
conn = connect_DB()
cursor = conn.cursor()
try:
cursor.execute(f"CREATE TABLE IF NOT EXISTS {Tree_Table} \
(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \
PARENTID INTEGER, \
NAME TEXT NOT NULL)")
conn.commit()
except:
print("Failure! Creating the TEST Table has failed.")
所以我想检查 Parent Id = ID 那么它应该在 QTreeView 中显示为 child。我必须以某种方式更改 printtree 函数,但我不知道如何更改。
当我在 ParentID = item2 的 ID 时添加 item4 时它应该是什么样子。
我的树视图示例
正如@musicamante 所说,在单个 for 循环中是不可能的。所以我创建了一个 General table,其中 Item_Table 中的 Item_ID 和 Tree_Table 中的 Tree_ID 被引用为外键并获得了一个 ID,它是独特。然后我 运行 General table 中的一个 for 循环和一个 if else 语句将它们排序为:
if item_id == "null":
treeWidget.addTopLevelItem
else:
addChild
当我向我的 SQLite 数据库添加项目时,我试图在 QTreeWidget 中添加项目。我的问题是我想将项目作为 child 添加到给定的其他项目中。让我在代码中向您展示它。这是我的 Gui 示例:
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(213, 327)
Form.setWindowTitle("Form")
self.treeWidget = QtWidgets.QTreeWidget(Form)
self.treeWidget.setGeometry(QtCore.QRect(0, 10, 211, 311))
self.treeWidget.setObjectName("treeWidget")
self.treeWidget.headerItem().setText(0, "Categories")
self.treeWidget.setSortingEnabled(False)
self.printtree()
QtCore.QMetaObject.connectSlotsByName(Form)
def printtree(self):
rn = readsql_Names()
self.treeWidget.setColumnCount(1)
treeItem = QtWidgets.QTreeWidgetItem([rn])
self.treeWidget.addTopLevelItem(treeItem)
def displaytree():
conn = connect_DB() # Connection to the Database
cursor = conn.cursor()
table = cursor.execute(f"SELECT NAME FROM Test")
for item in table.fetchall():
name = str(item[0])
branch_list = QtWidgets.QTreeWidgetItem([name])
treeItem.addChild(branch_list)
# I guess here should be a if statement.
branch_list.addChild(QtWidgets.QTreeWidgetItem(["name"]))
displaytree()
这就是我的 SQLite 的样子:
def create_testsql(Tree_Table="Test"):
conn = connect_DB()
cursor = conn.cursor()
try:
cursor.execute(f"CREATE TABLE IF NOT EXISTS {Tree_Table} \
(ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \
PARENTID INTEGER, \
NAME TEXT NOT NULL)")
conn.commit()
except:
print("Failure! Creating the TEST Table has failed.")
所以我想检查 Parent Id = ID 那么它应该在 QTreeView 中显示为 child。我必须以某种方式更改 printtree 函数,但我不知道如何更改。
当我在 ParentID = item2 的 ID 时添加 item4 时它应该是什么样子。
我的树视图示例
正如@musicamante 所说,在单个 for 循环中是不可能的。所以我创建了一个 General table,其中 Item_Table 中的 Item_ID 和 Tree_Table 中的 Tree_ID 被引用为外键并获得了一个 ID,它是独特。然后我 运行 General table 中的一个 for 循环和一个 if else 语句将它们排序为:
if item_id == "null":
treeWidget.addTopLevelItem
else:
addChild