我已经安装了开源 qt Creator(免费版本)并创建了非常简单的桌面应用程序。我能够创建简单的窗口,但是当我运行时,出现以下错误:
我尝试关注此页面,但无法理解如何解决此问题
https://www.qt.io/blog/qt-for-python-6.1
Environment variable PYSIDE_DESIGNER_PLUGINS is not set, bailing out.
No instance of QPyDesignerCustomWidgetCollection was found.
Run Code Online (Sandbox Code Playgroud)
Python文件
# This Python file uses the following encoding: utf-8
import os
from pathlib import Path
import sys
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtCore import QFile
from PySide6.QtUiTools import QUiLoader
class test(QMainWindow):
def __init__(self):
super(test, self).__init__()
self.load_ui()
def load_ui(self):
loader = QUiLoader()
path = os.fspath(Path(__file__).resolve().parent / "form.ui")
ui_file = QFile(path)
ui_file.open(QFile.ReadOnly)
loader.load(ui_file, self)
ui_file.close()
if __name__ == "__main__":
app = …
Run Code Online (Sandbox Code Playgroud) 对于我的 QTextEdit,我想带来一些非常基本的嵌套突出显示,这是我在W3Schools“尝试一下!”上搞砸时制作的。看起来像这样。
据我所知,我只使用了Qt支持的 HTML 子集中的内容(请参阅下面代码中的 HTML,仅使用填充、边距和背景颜色)。
我无法获得类似的渲染,只有背景颜色似乎有效。
我创建了一个新项目,使用硬编码的 HTML/样式而不是我的程序生成进行简单的测试,但它仍然没有按应有的方式呈现。
这是代码。
import sys
from PySide6.QtWidgets import QApplication, QTextEdit, QMainWindow
app = QApplication(sys.argv)
test_window = QMainWindow()
test_text_edit = QTextEdit()
html = """
<!DOCTYPE html>
<html>
<head>
<style>
span.a {
padding: 2px;
margin: -2px;
background-color: orange;
}
span.b {
background-color: powderblue;
}
</style>
</head>
<body>
<div>volutpat. <span class="a">Aliquam <span class="b">venenatis</span> gravida</span> nisl</div>
</body>
</html>
"""
test_text_edit.setHtml(html)
test_window.setCentralWidget(test_text_edit)
test_window.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
这是结果,缺乏明显的样式,我是疯了还是根据文档看起来不应该基本相同?不缺少让“嵌套”更清晰的填充吗?
看来边距问题并不未知,边距样式在qt富文本标签中没有效果,但也没有人回答这个问题。
有人知道任何修复/解决方法吗?或者在哪里将其记录为 Qt 的已知限制?
我如何使用pyqt5中的QTextEdit来显示html的所有样式(包括css的样式)也相关,但不是重复的,它只是指向它所遵循的CSS的文档,它没有涵盖为什么它不'不遵循,或者如何遵循它所说的遵循的标准。
我正在尝试创建一个抽象基类,它也继承任意 PySide6 类。但是,以下会产生错误TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
。
from abc import ABC, abstractmethod
from PySide6.QtWidgets import QApplication, QWidget
class MyBaseWidget(QWidget, ABC):
def __init__(self, parent=None):
super().__init__(parent=parent)
@abstractmethod
def foo(self):
pass
class MyConcreteWidget(MyBaseWidget):
def __init__(self, parent=None):
super().__init__(parent=parent)
app = QApplication([])
widget = MyConcreteWidget()
widget.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
我尝试使用下面看到的解决方案来解决这个问题(灵感来自解决元类冲突,http://www.phyast.pitt.edu/~micheles/python/metatype.html,多重继承元类冲突等)。
class MyMeta(ABCMeta, type(QWidget)): pass
class MyBaseWidget(QWidget, metaclass=MyMeta):
def __init__(self, parent=None):
super().__init__(parent=parent)
@abstractmethod
def …
Run Code Online (Sandbox Code Playgroud) 考虑以下最小工作示例:
#!/usr/bin/env python3
from PySide6.QtCore import QTimer
from PySide6.QtWidgets import QLabel, QApplication
app = QApplication()
label = QLabel('Label')
x = 0
def timeout():
global x
x += 1
label.setText(str(x))
timer = QTimer()
timer.timeout.connect(timeout)
timer.start(200)
label.show()
app.exec()
Run Code Online (Sandbox Code Playgroud)
它显示一个标签(一个非常小的窗口),其中包含一个递增计数器。这一切正常。但是,我使用 PyLance 扩展在 Visual Studio Code 中进行开发,并且 IDE 不知道以下timeout
信号QTimer
:
公平地说,按下F12打开QtCore.pyi
的定义QTimer
,这实际上不包含成员timeout
:
class QTimer(PySide6.QtCore.QObject):
def __init__(self, parent:Optional[PySide6.QtCore.QObject]=...) -> None: ...
def interval(self) -> int: ...
def isActive(self) -> bool: ... …
Run Code Online (Sandbox Code Playgroud) 最近我买了一台全新的 Raspberry Pi 4B,内存为 8Gb,并安装了 Ubuntu Desktop 21.04。
我的目标是在触摸屏上创建一个 GUI,用于控制 GPIO 引脚(某些硬件设备)。
由于控制 GPIO 是由 Python 完成的,所以我也想用它来编写 GUI。我看了几个教程,决定使用 PySide6 + Qt Quick。这种程序在我的个人笔记本电脑上运行良好,但当尝试下载 Raspberry 上所需的依赖项时,例如:
python3.9 -m pip install PySide6
我收到以下错误:
ERROR: Could not find a version that satisfies the requirement PySide6 (from versions: none)
ERROR: No matching distribution found for PySide6
Run Code Online (Sandbox Code Playgroud)
我认为这个问题可能是由交叉编译引起的。
您知道是否有机会在 Raspberry Pi 4B 上运行 PySide6 和 QtQuick?
更新:
在采用 Manjaro ARM KDE Plasma 21.07 64 位操作系统的 Raspberry Pi 4B 上进行测试
运行以下命令:
* Update the package database …
Run Code Online (Sandbox Code Playgroud) 当我升级到 PySide6 6.2.2 时,MyPy 开始抱怨Qt.AlignmentFlag
. 这是一个小例子:
from PySide6.QtGui import Qt
from PySide6.QtWidgets import QLabel, QApplication
app = QApplication()
label = QLabel("Hello, World!")
label.setAlignment(Qt.AlignCenter)
label.show()
app.exec()
Run Code Online (Sandbox Code Playgroud)
仍然运行良好,但 MyPy 抱怨:
$ mypy foo.py
foo.py:6: error: Argument 1 to "setAlignment" of "QLabel" has incompatible type "AlignmentFlag"; expected "Alignment"
Found 1 error in 1 file (checked 1 source file)
$
Run Code Online (Sandbox Code Playgroud)
好的,我尝试将 转换AlignmentFlag
为Alignment
.
from PySide6.QtGui import Qt
from PySide6.QtWidgets import QLabel, QApplication
app = QApplication()
label = QLabel("Hello, World!") …
Run Code Online (Sandbox Code Playgroud) *** 更新*** 这个问题已由whiteroom 在评论部分解决。问题是需要更改 Python 解释器设置以指向正确的设置。白室问题的回答也非常有帮助。
*** 原始问题 *** 我在我的 MacBook 上安装了 PySide6 并确认它已安装,如所附屏幕截图所示。我对 Python 和 Mac 终端应用程序也很陌生。
pip3 install PySide6
Run Code Online (Sandbox Code Playgroud)
我尝试从 Visual Studio Code 编辑器运行这个简单的应用程序。
from PySide6.QtWidgets import QApplication,QLabel
app = QApplication([])
label = QLabel('hello world')
label.show()
app.exec()
Run Code Online (Sandbox Code Playgroud)
Python 响应此错误:
Traceback (most recent call last):
File "/Users/emad-ud-deen/Development/Python/Practice/PySide6 Test.py", line 1, in <module>
from PySide6.QtWidgets import QApplication,QLabel
ModuleNotFoundError: No module named 'PySide6'
Run Code Online (Sandbox Code Playgroud)
我能够运行使用 PySide6 编写的应用程序而不会出现该错误的唯一方法是从终端中的命令行。
你能告诉我如何让 Visual Studio Code 识别 PySide6 吗?
升级到PySide6.3.0后出现错误ModuleNotFoundError: No module named 'PySide6.QtWidgets'
import sys
from PySide6.QtWidgets import QApplication, QLabel
app = QApplication(sys.argv)
label = QLabel("Hello World!")
label.show()
app.exec()
Run Code Online (Sandbox Code Playgroud)
$ python3.10 test.py
Traceback (most recent call last):
File "test.py", line 2, in <module>
from PySide6.QtWidgets import QApplication, QLabel
ModuleNotFoundError: No module named 'PySide6.QtWidgets'
Run Code Online (Sandbox Code Playgroud)
看来有变化PySide6.3.0
。
如何导入QtWidgets
模块PySide6.3.0
?
很明显它正在导入 PySide6 包,但它没有导入 QtWidgets、QtGui、QtCore 等包
#!/usr/bin/env python3.10
import sys
import PySide6
from PySide6 import QtWidgets
from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget, QPushButton, QVBoxLayout, …
Run Code Online (Sandbox Code Playgroud) 简单的演示应用程序我试图将主题设置为 dark。我更喜欢代码版本(非 QtQuick 首选),但我看到的 Python 唯一方法是使用 QtQuick 配置文件,即使这样也行不通。
from PySide6 import QtWidgets
from PySide6 import QtQuick
if __name__ == '__main__':
app = QtWidgets.QApplication()
app.setApplicationDisplayName("Should be Dark Theme")
app.setStyle("Universal")
view = QtQuick.QQuickView()
view.show()
app.exec()
Run Code Online (Sandbox Code Playgroud)
我在同一目录中有一个qtquickcontrols2.conf 配置文件。(还尝试将 QT_QUICK_CONTROLS_CONF 设置为绝对路径。)
[Controls]
Style=Material
[Universal]
Theme=Dark
[Material]
Theme=Dark
Run Code Online (Sandbox Code Playgroud)
然而,它仍然是亮白色的:
我不在乎它是材质风格还是通用风格,只想为标题栏内置一些深色模式。最后,需要一种方法使标题栏变暗,而无需创建自定义标题栏。
感谢您的指导!
我正在尝试使用 Qt 制作一个非常简单的窗口。
我的目标是获得看起来像本机操作系统窗口的东西(以最少的努力),仅此而已,但如果可能的话也不会少。
为了使它更容易,我使用 Qt python 绑定,并且自从我的第一个组合失败后我尝试了不同的组合。我必须做出的选择是:
PyQt
或者PySide
Qt5
或者Qt6
现在,正如之前所说,我尝试了不同的组合,但第一个选择似乎无关紧要,而第二个选择很重要:
Qt5
窗口在 XOrg 和 Wayland 上看起来相同Qt6
窗口不,无论我使用哪个Python包(PyQt
或PySide
)特别Qt6
是在 Wayland 上,它会覆盖默认的操作系统样式,包括指针(即指针在窗口悬停时发生变化Qt6
),并且它不会在 XOrg 上发生,也不会发生Qt5
(在 Wayland 上和 XOrg 上具有相同的外观)。
这是一个简单示例的几个屏幕截图:
Qt6
( PySide6
) 位于韦兰Qt6
PySide6
XOrg 上的( )据了解,这两个窗口是由相同的脚本生成的......
pyside6 ×10
pyside ×4
python ×4
qt ×3
qt6 ×3
css ×1
html ×1
importerror ×1
installation ×1
pyqt ×1
pyside2 ×1
python-3.10 ×1
python-3.x ×1
qt-creator ×1
qt-quick ×1
qwidget ×1
raspberry-pi ×1
typing ×1
wayland ×1