标签: pyside2

带有命名参数的信号

我正在尝试使用 PySide2 复制以下示例。

https://evileg.com/en/post/242/

但是由于 PySide2 不支持向 QML 发出带有命名参数的信号,我不知道如何使用 PySide2 做到这一点?

这是我的代码

主文件

from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine
from PySide2.QtCore import QObject, Signal, Slot, Property


class Calculator(QObject):
    def __init__(self):
        QObject.__init__(self)

    sumResult = Signal(int)
    subResult = Signal(int)

    @Slot(int, int)
    def sum(self, arg1, arg2):
        self.sumResult.emit(arg1 + arg2)

    @Slot(int, int)
    def sub(self, arg1, arg2):
        self.subResult.emit(arg1 - arg2)


if __name__ == "__main__":
    import sys

    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine()
    calculator = Calculator()
    engine.rootContext().setContextProperty("calculator", calculator)
    engine.load("/code/QML/calc.qml")

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

python qml pyside2

2
推荐指数
1
解决办法
1453
查看次数

PySide2 在询问时不更新 QLabel 文本

我正在从 Python 2.7 升级到 Python 3.6,并从 PySide 升级到 PySide2。我首先尝试从“入门”站点 ( https://doc-snapshots.qt.io/qtforpython/gettingstarted.html )获取“Hello World” 。它显示小部件、其标签和按钮,但按钮不会更改标签的文本。我添加了一个 print() 来验证按钮确实调用了与点击信号关联的方法,甚至添加了一个 update() 来尝试更多地“鼓励”它。没运气。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copied from:
#   https://doc-snapshots.qt.io/qtforpython/gettingstarted.html
#
# Mac OS X High Sierra (10.13.6)
#
# Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 05:52:31) 
# [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
#
# PySide2 5.11.1 
#

import sys
import random
from PySide2 import QtCore, QtWidgets, QtGui


class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()

        self.hello = …
Run Code Online (Sandbox Code Playgroud)

python-3.6 pyside2 macos-high-sierra

2
推荐指数
1
解决办法
2113
查看次数

尝试让 QProcess 使用队列

我正在尝试使用队列运行多个进程并获取所有进程的输出QProcess,但我遇到了一些问题。我正在使用 aQSpinBox设置同时运行的最大进程,并且我可以让主线程中的一切正常工作,或者如果我使用 a 中的进程运行循环,QObject但我无法让它在 a 中正常工作QThread
我知道不需要使用线程,QProcess但是使用循环我几乎别无选择。当在主线程中运行时,它会暂时冻结,直到进程启动,我宁愿让它运行得更顺畅。除非我使用类似的东西,否则
我只会在尝试运行进程时遇到错误,但问题是进程一次只运行一个。 有没有人有任何建议可以使其正常工作?我目前正在使用 Pyside2,但 Pyside2 或 PyQt5 的答案就可以了。谢谢。 QThread_process.waitForFinished()

import queue
import sys
from PySide2.QtCore import QProcess, QTextCodec, QThread, Qt
from PySide2.QtWidgets import QApplication, QWidget, QSpinBox, \
    QPushButton, QVBoxLayout

class Window(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        self.setAttribute(Qt.WA_DeleteOnClose, True)
        self.queue = queue.Queue()
        layout = QVBoxLayout(self)
        self.startBtn = QPushButton('Start', clicked=self.addToQueue)
        self.spinBox = QSpinBox(value=3)
        layout.addWidget(self.spinBox)
        layout.addWidget(self.startBtn)
        self.taskList = ['my.exe -value','my.exe -value','my.exe -value','my.exe -value',
                         'my.exe -value','my.exe -value','my.exe -value','my.exe -value'] …
Run Code Online (Sandbox Code Playgroud)

python queue qprocess pyqt5 pyside2

2
推荐指数
1
解决办法
1701
查看次数

将 QML 信号连接到 PySide2 插槽

我有一些使用 Qt/C++ 的经验,现在我想切换到 PySide2 + QML。我想将 ui 信号(例如单击按钮)连接到 python 插槽

我见过很多例子,但它们都有所不同,我猜 PyQt/PySide 现在正在快速变化

您能为我提供将 QML 信号连接到 PySide Slot 的现代且简洁的方法吗?例如,单击按钮在 python 控制台中打印一些文本。这是我的简单代码示例

主要.py

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

def test_slot(string): # pseudo slot
    print(string)

if __name__ == "__main__":
    app = QGuiApplication()
    engine = QQmlApplicationEngine('main.qml')
    exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

主.qml

import QtQuick 2.13
import QtQuick.Controls 2.13

ApplicationWindow {
    visible: true

    Button {
        anchors.centerIn: parent
        text: "Example"
        onClicked: test_slot("Test") //pseudo signal
    }
}
Run Code Online (Sandbox Code Playgroud)

python qml pyside2

2
推荐指数
1
解决办法
3305
查看次数

具有动态宽度列的 QML TableView

TableView在 PySide2 Qt 5.13.0 中创建了一个。我想要TableView填充父项的宽度,但除非我拖动表格,否则它不会调整列的大小。从程序开始,我希望列更宽。

在此处输入图片说明

主文件

import sys

from PySide2.QtCore import QUrl
from PySide2.QtQml import QQmlApplicationEngine, qmlRegisterType
from PySide2.QtWidgets import QApplication

from table_model import TableModel

import qml_rc  # noqa: F401


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

    engine = QQmlApplicationEngine()

    qmlRegisterType(TableModel, "TableModel", 1, 0, "TableModel")

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

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

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

主文件

import QtQuick 2.13
import QtQuick.Controls 2.13

import TableModel 1.0

ApplicationWindow {
    visible: true

    Component.onCompleted: {
        showMaximized()
    }

    TableView {
        id: tableView
        clip: true
        anchors.fill: …
Run Code Online (Sandbox Code Playgroud)

python qt qml pyside2

2
推荐指数
1
解决办法
3241
查看次数

使用 Qt Designer 时显示 PySide2 QCharts

我有一个与这里的问题类似的问题:How to insert QChartView in form with Qt Designer?

所以我在 Qt Designer 中创建了我的 UI 的 MainWindow 并且我试图让一个QtChart显示在我的窗口中的一个选项卡中。我正在将 .ui 文件导入 python 程序,到目前为止我可以让主窗口正常显示,但不能正常显示图表。我花了一天的大部分时间尝试按照上述答案中列出的说明进行操作,但到目前为止,我还无法将我升级的小部件正确导入到我的主程序中。我一直在想,部分原因是否是我尝试在 Qt 的 Python 版本(即 PySide2)而不是 C++ 版本中执行此操作,这个答案可能是为之编写的。

我已经尝试使用 aQWidget和推荐QGraphicsView作为我的基础来提升我QChartView的目标,但到目前为止,每次尝试都会给我一个错误: "QFormBuilder was unable to create a custom widget of the class 'QChartView'; defaulting to base class 'QWidget'."我做错了什么?

就像链接的问题/答案状态一样,我将我的升级小部件设置为“升级类名称”QChartView和“头文件” QtCHarts。下面是我的 Python 程序的基本代码(一开始忽略我奇怪的导入,因为这是我正在处理的一个单独的问题,除非我以这种方式格式化它们,否则我的程序将找不到类导入。)

任何帮助将不胜感激!谢谢!

import sys
import PySide2.QtCore as Qt_Core
import PySide2.QtGui as Qt_Gui
import PySide2.QtWidgets as Qt_Widgets
import …
Run Code Online (Sandbox Code Playgroud)

python qt-designer pyside2 qchart qchartview

2
推荐指数
1
解决办法
1665
查看次数

2
推荐指数
1
解决办法
4514
查看次数

仅显示 QTabWidget 中选项卡的工具提示,而不是整个小部件

我正在使用 Qt Designer 和 UI 表单。Qt 的目标版本是最新的 PySide2 (Qt 5.x)。

我已向我的QTabWidget. 此外,我还向每个选项卡(也称为页面)中的多个其他组件添加了工具提示。我注意到,每当我的鼠标悬停在选项卡内的某个区域(没有其他带有工具提示的小部件)上方(有足够的时间来触发工具提示)时,我都会获得该选项卡的工具提示。

我正在寻找的行为是仅当鼠标悬停在选项卡标题上时才显示选项卡工具提示。否则,我最终会遇到奇怪的情况,例如当我悬停时,选项卡的工具提示会弹出,假设该选项卡中的按钮没有自己的工具提示。往好了说是丑陋的,往坏了说是让用户感到困惑。

有没有简单的方法可以防止这种情况发生?我不得不承认,我在以前的项目中很少使用工具提示,但现在我决定更加关注该功能。

python tabs tooltip qtabwidget pyside2

2
推荐指数
1
解决办法
1231
查看次数

如何使用 PySide2 在 OSX 上创建菜单栏?

我正在查看QT 网站上的数据可视化工具教程,其中有一个在以下位置创建菜单栏的示例QMainWindow

self.menu = self.menuBar()
self.file_menu = self.menu.addMenu("File")
Run Code Online (Sandbox Code Playgroud)

这在 OSX 10.13.6 上对我不起作用。我还尝试使用QMenuBar创建自己的菜单栏,而不是使用带有的默认菜单栏QMainWindow

menu_bar = QMenuBar()
menu_bar.addMenu('File')
self.setMenuBar(menu_bar)
Run Code Online (Sandbox Code Playgroud)

这也没有效果。我从未在我的应用程序的菜单栏中看到“文件”选项。我只是得到一个带有单个“python”选项的通用菜单栏。

python pyside2

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

如何将 Pika 与 Qt 集成?

最近,有用户询问如何将 Pika 与 Qt 一起使用,但没想到在我即将发布答案时该用户删除了,这让我有机会通过自动回答提出这个问题,我尝试公开各种解决方案:

python amqp pika pyqt5 pyside2

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