我已经安装了开源 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) 位于韦兰Qt6PySide6XOrg 上的( )据了解,这两个窗口是由相同的脚本生成的......
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