无法在 Python 中显示 TreeView
Posted
技术标签:
【中文标题】无法在 Python 中显示 TreeView【英文标题】:Could not display TreeView in Python 【发布时间】:2020-02-17 07:50:41 【问题描述】:在 Python 中为 Qt 尝试一个非常简单的 TreeView
控件,但由于某种原因,GUI 只是空白。
main.qml
import QtQuick 2.14
import QtQuick.Controls 2.14
import QtQuick.Controls 1.4 as OldControls
ApplicationWindow
visible: true
title: qsTr("Simple Tree View")
OldControls.TreeView
anchors.fill: parent
model: simpleModel
OldControls.TableViewColumn
role: "display"
title: "Name"
width: 100
main.py
import sys
from os.path import abspath, dirname, join
from PySide2.QtGui import QGuiApplication, QStandardItemModel, QStandardItem
from PySide2.QtQml import QQmlApplicationEngine
class SimpleTreeView(QStandardItemModel):
def __init__(self, parent=None):
super().__init__(parent)
self.setColumnCount(1)
root = self.invisibleRootItem()
group1 = QStandardItem("group1")
group1.setText("group1")
value1 = QStandardItem("value1")
value1.setText("value1")
group1.appendRow(value1)
root.appendRow(group1)
if __name__ == '__main__':
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
qmlFile = join(dirname(__file__), 'main.qml')
engine.rootContext().setContextProperty("simpleModel", SimpleTreeView())
engine.load(abspath(qmlFile))
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec_())
Linux 中的输出
【问题讨论】:
【参考方案1】:问题在于,由于 SimpleTreeView 对象没有分配给变量,因此它被销毁了,这可以使用destroyed
信号进行验证。
class SimpleTreeView(QStandardItemModel):
def __init__(self, parent=None):
super().__init__(parent)
self.destroyed.connect(lambda o : print("destroyed:", o))
# ...
输出:
destroyed: <PySide2.QtCore.QObject(0x56377cf050f0) at 0x7ffa20deac40>
解决办法是给那个对象赋值一个变量,这样生命周期就更长了:
qmlFile = join(dirname(__file__), 'main.qml')
model = SimpleTreeView()
engine.rootContext().setContextProperty("simpleModel", model)
# ...
【讨论】:
以上是关于无法在 Python 中显示 TreeView的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Python 中显示来自 Access 的数据(通过 SQL)
Python 中,matplotlib绘图无法显示中文的问题
Python 中,matplotlib绘图无法显示中文的问题