标签: pyside2

PySide2 和支持 addToJavaScriptWindowObject

我正在尝试将 PySide 应用程序版本 #1 移植到 PySide2,并努力寻找移植以下代码片段的解决方案:

class AppManager(QtCore.QObject):
    '''
    methods of AppObject will be available from javascript
    '''
    def __init__(self, webview):
        QtCore.QObject.__init__(self)


class WebView(QWebEngineView):
    def __init__(self, parent=None):
        QWebEngineView.__init__(self, parent)
        self.setPage(WebEnginePage(self))

    def contextMenuEvent(self, event):
        pass


class AppWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.view = WebView(self)
        self.page = self.view.page()
        self.app_manager = AppManager(self.view)
        self.page.mainFrame().addToJavaScriptWindowObject('app_manager', self.app_manager)
        # ERROR in above line !!!
Run Code Online (Sandbox Code Playgroud)

我在文档中找不到必须找到可能的修复方法

python python-3.x pyside2 qwebengineview qtwebchannel

3
推荐指数
1
解决办法
1505
查看次数

使用 QSignalMapper

我尝试制作一个简单的示例来帮助理解 QSignalMapping 的概念如何在 PySide 中工作。我想通过循环迭代来动态创建一系列按钮,当用户按下其中一个按钮时,我可以激活一个方法,为按下的按钮返回适当的标签。

from PySide2 import QtWidgets,QtCore,QtGui

fruit_list = ["apples","oranges","pears"]

def fruit_button_event():
    print "this is the pressed button's label"

def main():
    for fruit in fruit_list:
        fruit_button = QtWidgets.QPushButton(fruit)
        fruit_button.clicked.connect(lambda:fruit_button_event())
main()
Run Code Online (Sandbox Code Playgroud)

python qsignalmapper pyside2

3
推荐指数
1
解决办法
1458
查看次数

禁用 QSpinBox 中的滚轮

我的 PySide 项目中有许多旋转框,我想更改行为,因此用户需要单击字段来更改值,然后按 Enter 键。我想禁用旋转框的滚轮行为。我尝试过设置焦点策略,但没有生效。

    def light_label_event(self,text,checked):
        print("this is the pressed button's label", text)

    def populate_lights(self):
        for light in self.lights:
            light_label = QtWidgets.QSpinBox()
            light_label.setFocusPolicy(QtCore.Qt.StrongFocus)
Run Code Online (Sandbox Code Playgroud)

python pyside2

3
推荐指数
1
解决办法
2747
查看次数

使用 PySide2 将 python 信号连接到 QML ui 插槽

我刚刚开始为即将到来的项目使用 PySide2 和 QML,我立即偶然发现了一个问题:如何将 python 类(继承自 QObject)发出的信号连接到 .qml 文件中的插槽?例如:我有一个 QThread(python 类),每 50 毫秒生成几个 xy 坐标。我想将生成的对添加到 QML 文件中定义的 LineSeries,以生成类似示波器的绘图。

这个问题可能真的很基本而且很愚蠢,但我真的需要一些帮助。

此致

兰多

编辑4:

我找到了解决方案,但我不太喜欢它。你能建议我(如果存在的话)一种更优雅的方法吗?

Python 代码:

class Manager(QObject):

    dataReady = Signal(float,float)

    def __init__(self):
        QObject.__init__(self)
        self._currX = 0
        self._currY = 0
        self._delay = 0.5
        self._multiplier = 1.0
        self._power = 1.0
        self._xIncrement = 1.0
        self._starter = False
        self._threader = None

    @Property(bool)
    def starter(self):
        return self._starter

    @starter.setter
    def setStarter(self, val):
        print("New val: {0}, oldVal: {1}".format(val,self._starter))
        if self._starter == val:
            return

        self._starter = val
        if …
Run Code Online (Sandbox Code Playgroud)

python qml qt-signals pyside2

3
推荐指数
1
解决办法
5467
查看次数

如何使用 PySide2 在 matplotlib 中显示图形?

我正在尝试学习 matplotlib 并尝试测试以下代码。

import matplotlib
from matplotlib.figure import Figure  
import matplotlib
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as     FigureCanvas
import sys
from PySide2 import QtGui   

if __name__ == "__main__":

    app = QtGui.QApplication(sys.argv)
    wid = QtGui.QWidget()
    wid.resize(250, 150)
    grid = QtGui.QGridLayout()
    wid.setLayout(grid)
    fig = Figure(figsize=(7,5), dpi=65, facecolor=(1,1,1), edgecolor=(0,0,0))
    canvas = FigureCanvas(fig)
    grid.addWidget(canvas)
    wid.show()
Run Code Online (Sandbox Code Playgroud)

然而它似乎无法识别图的签名。

TypeError:使用错误的参数类型调用“PySide2.QtGui.QGridLayout.addWidget”:
PySide2.QtGui.QGridLayout.addWidget(FigureCanvasQTAgg) 支持的签名:
PySide2.QtGui.QGridLayout.addWidget(PySide2.QtGui.QWidget, int, int, PySide2. QtCore.Qt.Alignment = 0)
PySide2.QtGui.QGridLayout.addWidget(PySide2.QtGui.QWidget, int, int, int, int, PySide2.QtCore.Qt.Alignment = 0)

python matplotlib pyside2

3
推荐指数
1
解决办法
2523
查看次数

QML Charts 导致启动时崩溃

我正在尝试制作一个使用 QML QCharts 来可视化数据的应用程序。该程序在启动时甚至在窗口出现之前就崩溃了。我在 macOS 和 Windows 10 上都进行了尝试,结果相同。我在下面提供了一个最低限度的工作示例。

main.py:

import sys

from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine
from PySide2.QtCore import QUrl

import qml_rc

if __name__ == "__main__":
    app = QGuiApplication(sys.argv)

    engine = QQmlApplicationEngine()
    engine.load(QUrl("qrc:/main.qml"))

    if not engine.rootObjects():
        sys.exit(-1)

    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

main.qml:

import QtQuick 2.13
import QtQuick.Controls 2.13
import QtCharts 2.13

ApplicationWindow {
    visible: true

    // Example taken from: https://doc.qt.io/qt-5/qtcharts-qmlchart-example.html
    ChartView {
        id: chart
        title: "Top-5 car brand shares in Finland"
        anchors.fill: parent
        legend.alignment: Qt.AlignBottom
        antialiasing: true …
Run Code Online (Sandbox Code Playgroud)

python qml python-3.x qtcharts pyside2

3
推荐指数
1
解决办法
1989
查看次数

PyQt 5:扩展窗口时如何保持相对小部件大小

我正在 Maya 2018 中开发一个自定义 ui,它使用 PyQt5(通过 PySide2 - 有一些微小的差异,但它本质上是 PyQt5)。

我有一个QHBoxLayout里面有两个小部件,它们的大小策略都设置为“扩展”。我将其中一个的最小宽度设置为另一个的两倍左右。

每当我扩展窗口时,较小的小部件都会扩展,直到它的大小与较大的小部件相同(这根本不会改变大小)......然后它们都继续以相同的速率扩展 - 都占据了一半的大小窗户。

我希望它们在整个扩展过程中保持相对大小。

有没有一种方法可以做到这一点,我完全忽略了?

这是我为重现该问题而编写的一些简化代码:

import PySide2.QtWidgets as QtWidgets

class TestDialog(QtWidgets.QDialog):
    def __init__(self, *args, **kwargs):
        QtWidgets.QDialog.__init__(self, *args, **kwargs)

        main_layout = QtWidgets.QHBoxLayout()
        self.setLayout(main_layout)
        main_layout.setContentsMargins(5, 5, 5, 5)
        main_layout.setSpacing(5)

        w1 = QtWidgets.QPushButton('small')
        w2 = QtWidgets.QPushButton('large')
        w1.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        w2.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        w2.setMinimumWidth(250)

        main_layout.addWidget(w1)
        main_layout.addWidget(w2)

        self.setMinimumWidth(450)
        self.setMinimumHeight(100)
        self.resize(450, 100)


test = TestDialog()
test.show()
Run Code Online (Sandbox Code Playgroud)

python maya pyqt5 pyside2

3
推荐指数
1
解决办法
4819
查看次数

调用 QScreen.grabWindow() 时输入错误

我正在尝试使用 PySide 截取屏幕截图(并返回 QPixmap)。这是一个更大脚本的一部分。不幸的是,我现在碰壁了。

这是我试图开始工作的简化片段:

from PySide2 import QtGui, QtWidgets

screen = QtWidgets.QApplication.primaryScreen()
winid = QtWidgets.QApplication.desktop().winId()
pixmap = screen.grabWindow(winid)

label = QtWidgets.QLabel("test")
label.setPixmap(pixmap)
label.show()
Run Code Online (Sandbox Code Playgroud)

执行此操作时,会抛出以下错误:

TypeError: 'PySide2.QtGui.QScreen.grabWindow' called with wrong argument types:
PySide2.QtGui.QScreen.grabWindow(int)
Supported signatures:
PySide2.QtGui.QScreen.grabWindow(quintptr, int = 0, int = 0, int = -1, int = -1)
Run Code Online (Sandbox Code Playgroud)

我正在使用 PySide 版本 2.0.0~alpha0 (这是我正在使用的主机应用程序附带的版本)。我已经在使用 PySide2 版本 5.12.2 的新版本主机应用程序中测试了相同的代码,它按预期执行,没有任何错误...但是,我仅限于使用旧版本的主机应用程序。

有谁知道解决方法?

首先想到的是使用 PyQt5 生成 QPixmap,并让 PySide 从那里获取它,但在测试时发现 PyQt QPixmap 与 PySide 不兼容。将整个脚本移植到 PyQt 也不是一个选择。

python pyside2

3
推荐指数
1
解决办法
1981
查看次数

如何使用 setStyleSheet 更改 QLabel 小部件的字体大小(以百分比为单位)?

我正在寻找一种简单的方法来为我的 PySide2 应用程序中的标题标签制作更大的文本大小。这是一个学习项目。我更喜欢使用样式表来更改标签字体。我也不希望使用硬编码点大小,因为这可能无法在不同的显示尺寸上正常工作。

这另一个问题看起来很有趣,但目前对我来说太复杂了。有没有一种简单的方法可以制作更大的字体,例如font-size: 200%?我确实尝试过,但到目前为止它还不起作用。

当我使用%时,字体大小根本没有改变。当我设置特定的大小时,font-size: 20px它会产生预期的结果。

我没有发现 Qt 文档有多大帮助(可能是因为我还不知道如何解决它们。)这是我的代码:

from PySide2 import QtWidgets
from PySide2.QtCore import Qt

class MyWidget(QtWidgets.QWidget):

    def __init__(self, parent=None):

        super(MyWidget, self).__init__(parent)
        mainLayout = QtWidgets.QVBoxLayout(self)
        self.label = QtWidgets.QLabel("My Title")
        self.label.setAlignment(Qt.AlignCenter | Qt.AlignHCenter)
        self.label.setStyleSheet("font-weight: bold; font-size: 200%")
        mainLayout.addWidget(self.label)
Run Code Online (Sandbox Code Playgroud)

css python pyqt5 pyside2

3
推荐指数
1
解决办法
4457
查看次数

QListWidgetItem 对象是不可散列的,这是一个错误还是有原因?

我偶然发现了这一点(显然,这是一个更大的应用程序的摘录):

import sys
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *

if __name__ == '__main__':

    app = QApplication(sys.argv)

    d = {}

    widget = QWidget()
    d[widget] = 'hashable'

    item = QListWidgetItem('abc')
    d[item] = 'unhashable'
Run Code Online (Sandbox Code Playgroud)

如果你运行这个,在最后一行你会得到:

TypeError: unhashable type: 'PySide2.QtWidgets.QListWidgetItem'
Run Code Online (Sandbox Code Playgroud)

据我所知,任何 Qt 对象都可以用作字典键,就像任何用户定义的类实例一样。

我在 Windows 7 上运行 PySide2 5.13.0、Python 3.6.4。我在 Ubuntu 18.04、Python 3.6.9、PySide 5.9.0a1 上遇到相同的错误。

感谢您的任何提示。

python pyside2

3
推荐指数
1
解决办法
883
查看次数