python - QML 不能很好地与系统主题配合使用
问题描述
我有一个非常基本的 QML 文件:
import QtQuick 2.5
import QtQuick.Controls 1.4
ApplicationWindow {
visible: true
width: 100
height: 100
title: 'Hello World'
Column {
TextField {
id: text
width: parent.width
text: 'Text Field'
}
Button {
text: 'Button'
}
Label {
text: 'Label'
}
}
}
但是,当使用 PyQt5 和 qmlscene 运行它时,我得到了不同的结果:我为我的桌面设置了一个深色主题,并且 qmlscene 可以正常工作。但是 PyQt5 似乎与黑暗主题不一致:文本颜色会发生变化,但背景并非总是如此。TextField
因此,我在and中得到了一些不可读的颜色Button
(在白色背景上显示白色文本)。然而Label
没有问题。
对于 Python 部分,我有:
import sys
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtQml import QQmlApplicationEngine
# Create the application instance and a QML Engine
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load(QUrl('test.qml'))
engine.quit.connect(app.quit)
sys.exit(app.exec_())
这里发生了什么?我该如何解决?
更新
正如建议的那样,我查看了qmlscene的代码并偶然发现了两个区别:首先,它使用QQuickView
而不是QQmlApplicationEngine
,但这似乎在这里没有任何作用。另一种是使用QApplication
而不是QGuiApplication
. 通过这种更改,我得到了正确的行为。
所以问题似乎解决了,但我真的不明白为什么。我只发现那QApplication
是QGuiApplication
. 有人可以解释为什么其中只有一个似乎可以正常工作吗?
另外,我还不知道这是一般的 Qt 问题还是与 Python 有某种关系。虽然 PyQt5 和 PySide2 表现出相同的行为,所以也许是一般的事情?
解决方案
推荐阅读
- javascript - 对 javascript 函数返回多个带有许多粗箭头的函数感到困惑
- c# - 按键将 JSON 反序列化为 C# 对象
- flutter - 使用库中的小部件错误元素类型“{widget}”无法分配给列表类型“小部件”
- pandas - 在维护行的列中第一次出现后替换重复值
- mongodb - 我收到一条错误消息,上面写着“OperationFailure: $sample stage 在使用随机游标时在 100 之后找不到非重复文档”
- python - 计算 Pandas DataFrame 列中字符串中某个位置的字符频率
- html - 我如何 webscrabe 图像链接选项卡
- sqlite - 如何将带有 ROW_NUM、LIMIT 的 Web2Py SQL 代码翻译成 DAL?
- python - 在画布中更改 turtle.home() 位置
- jquery - 未定义值获取带有 id 作为数组的文本框