标签: pyside2

“PySide2.QtWidgets.QApplication”对象没有属性“exec”

我正在阅读有关 Python 和 Qt 上的 Tabwidgets 的教程。我已经了解了它的基础知识。我想编写一个包含多个选项卡的应用程序,其中每个选项卡由多个小部件组成。我发现了一个关于codeloop的很棒的教程,其中使用了 PyQt5。我按照教程进行操作,但我用 PySide 2 替换了 PyQt5。不幸的是,它似乎无法在我的系统上运行。

我收到以下错误:

File "/home/conan/python/advanced/GUI/Qt/tabwidget-advanced.py", line 81, in <module>
    app.exec()
AttributeError: 'PySide2.QtWidgets.QApplication' object has no attribute 'exec'
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

from PySide2 import QtGui
from PySide2.QtWidgets import QApplication, QDialog, QTabWidget, QComboBox, QCheckBox, QGroupBox, QVBoxLayout, QWidget, \
QLabel, QLineEdit, QDialogButtonBox
from PySide2.QtGui import QIcon, QFont
import sys


class Tab(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PyQt5 TabWidget Example")
        self.setWindowIcon(QIcon("icon.png"))
        # self.setStyleSheet('background-color:grey')
        vbox = QVBoxLayout()
        tabWidget = QTabWidget()
        buttonbox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        buttonbox.accepted.connect(self.accept)
        buttonbox.rejected.connect(self.reject) …
Run Code Online (Sandbox Code Playgroud)

python pyside2

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

如何在 PySide2 中使用 QLabel 加载图像

我是编码和 python 的初学者。我读到 tkinter 有点“基础”,如果你想开发一个有点复杂的应用程序,而 PyQt 在许可方面有问题。这就是为什么我选择PySide2来开发这种项目,但发现目前文档相对较少。这是正确的选择吗?

我目前的编码问题如下:我试图用 PySide2 加载图像但没有成功。这是我2次尝试的代码:

尝试 N°1:

import sys
import PySide2
from PySide2.QtWidgets import QApplication, QLabel

app = QApplication(sys.argv)
img = PySide2.QtGui.QImage("/Users/mymac/Downloads/ecg_measure.png")
pixmap=PySide2.QtGui.QPixmap(img)
label = PySide2.QtWidgets.QLabel.setPixmap(pixmap)
label.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)

我收到以下消息:

Traceback (most recent call last):

File "<ipython-input-1-86961df4959d>", line 8, in <module>
label = PySide2.QtWidgets.QLabel.setPixmap(pixmap)

TypeError: descriptor 'setPixmap' requires a 'PySide2.QtWidgets.QLabel' object but received a 'PySide2.QtGui.QPixmap'
Run Code Online (Sandbox Code Playgroud)

使用回溯中的信息,我尝试了以下尝试 N°2:

import sys
import PySide2
from PySide2.QtWidgets import QApplication, QLabel

app = QApplication(sys.argv)
img = PySide2.QtGui.QImage("/Users/mymac/Downloads/ecg_measure.png")
pixmap=PySide2.QtGui.QPixmap(img) …
Run Code Online (Sandbox Code Playgroud)

image qpixmap python-3.x qlabel pyside2

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

带有圆形图像的 Qlabel

我想在 QT/PySide2 应用程序中显示圆形图像。

下面是我试过的代码。

self.statusWidget = QLabel()
img = QImage(":/image.jpg").scaled(49, 49, Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
self.statusWidget.setPixmap(QPixmap.fromImage(img))
self.statusWidget.setStyleSheet("border-radius:20px")
Run Code Online (Sandbox Code Playgroud)

我得到了低于输出。

在此处输入图片说明

我想要像下面这样的 Qlabel。

在此处输入图片说明

python qt pyside pyqt5 pyside2

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

我想向 QVBoxLayout 添加滚动条

如何在 PySide2 中向 QVBoxLayout 添加滚动条。

self.mainWidget = QtWidgets.QWidget()
self.window.setCentralWidget(self.mainWidget)
self.vertical_layout_main = QtWidgets.QVBoxLayout(self.mainWidget)       
scroll = QtWidgets.QScrollArea()
scroll.setWidget(self.vertical_layout_main)
scroll.setFixedHeight(400)
self.vertical_layout_main.addWidget(scroll)
Run Code Online (Sandbox Code Playgroud)

更新:

def populate_lights(self):
    self.vertical_layout_lights = QtWidgets.QVBoxLayout(self.mainWidget)
    self.vertical_layout_main.addLayout(self.vertical_layout_lights)
    for light in self.lights:
        horizontal_layout_light = QtWidgets.QVBoxLayout(self.mainWidget)
        light_label = QtWidgets.QPushButton(light)
        light_label.setCheckable(True)
        light_label.toggled.connect(partial(self.light_label_event,light))
        horizontal_layout_light.addWidget(light_label)
        self.vLayout.addLayout(horizontal_layout_light)

def light_palette_ui(self): 

    self.vertical_layout_main = QtWidgets.QVBoxLayout(self.mainWidget)
    self.scroll_widget = QtWidgets.QWidget()
    self.scroll_widget.setLayout(self.vertical_layout_main)
    self.scroll = QtWidgets.QScrollArea()
    self.scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
    self.scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
    self.scroll.setWidgetResizable(False)
    self.scroll.setWidget(self.scroll_widget)
    self.vLayout = QtWidgets.QVBoxLayout(self.mainWidget)
    self.vLayout.addWidget(self.scroll)
    self.populate_lights()        
    self.window.setAttribute(QtCore.Qt.WA_DeleteOnClose)
    self.window.show()        
Run Code Online (Sandbox Code Playgroud)

python python-2.7 pyside2

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

'PySide2.QtCore.Signal' 对象没有属性 'connect'

我正在尝试为 PySide2 应用程序的 QRunnable 对象创建自定义信号。所有的例子都让我通过以下方式创建了一个信号:

class Foo1(QtCore.QObject):

    def __init__():
        super().__init__()
        self.thread = Foo2()
        self.thread.signal.connect(foo)

    def foo():
        # do something


class Foo2(QtCore.QRunnable):

    signal = QtCore.Signal()
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误self.thread.signal.connect(foo)

'PySide.QtCore.Signal' object has no attribute 'connect'
Run Code Online (Sandbox Code Playgroud)

我应该如何为 QRunnable 对象实现自定义信号?

python pyside2

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

pyside2通过窗口“ X”关闭到自定义退出方法的连接

我将Qt Designer用于GUI布局,并在QUILoader的帮助下将.ui文件加载到python中。

我设法将“退出”按钮连接到我的“ quit_app”方法。

我的问题是在用户尝试使用“ X”关闭窗口的情况下如何连接此方法。

提前致谢!

---> PYTHON CODE <---

import sys
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication
from PySide2.QtCore import QFile

class main_w(object):
    def __init__(self):
        # load ui; create w
        self.file = QFile("simple_quit.ui")
        self.file.open(QFile.ReadOnly)
        self.loader = QUiLoader()
        self.w = self.loader.load(self.file)

        # connections

        # Quit Button
        self.w.QUITButton.clicked.connect(self.quit_app)

        # ??? Window's X Button ???
        # THROWS ERROR:
        self.w.closeEvent.connect(self.quit_app)

    def quit_app(self):
        # some actions to perform before actually quitting:
        print('CLEAN EXIT')
        app.exit()

    def show(self):
        self.w.show()

app = QApplication(sys.argv)
w …
Run Code Online (Sandbox Code Playgroud)

python pyside2

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

在 Pyside2 中将 QAbstractListModel 声明为属性

我正在将 Pyside2 与 QML 一起使用,并尝试对我的代码进行良好的组织。我要揭露一个子类MyModelQAbstractListModel从Python来QML,在使用ListView。如果我MyModel直接在引擎内部声明实例,则代码完美运行:

...
engine = QQmlApplicationEngine()
myModel = MyModel(some_dict)
engine.rootContext().setContextProperty("myModel ", myModel)
...
Run Code Online (Sandbox Code Playgroud)

然后我可以使用它:

ListView {
    model: myModel
    delegate: Row {
        Text { text: name }
        Text { text: type }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将这个元素定义Property为一个类时,为了保持整洁而不是到处注册模型,我似乎无法让它工作。我无法从 qml 恢复良好的调试信息,这也无济于事。

我试图声明以下内容

ListView {
    model: myModel
    delegate: Row {
        Text { text: name }
        Text { text: type }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在qml中使用它

ListView {
    model: modelProvider.myModel
    // or model: modelProvider.myQVariantModel 
    delegate: Row …
Run Code Online (Sandbox Code Playgroud)

python qt qml pyside2

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

如何通过长时间运行的插槽保持 UI 响应

我有一个 python 定义的工作器QObject,它有一个work()由 QML UI 调用的慢速插槽(在我的实际 UI 中,FolderListModel当用户浏览列表时,该方法在每个项目上动态调用,但对于他的示例代码我'我只是在窗口完成时调用它作为示例)。

我想work异步运行慢速以防止 UI 阻塞。我想通过在 QThread 上移动 Worker 实例并在那里调用插槽来做到这一点,但这不起作用,因为 UI 仍然被阻塞,等待结果的work()到来。

这是我迄今为止尝试的代码:

mcve.qml:

import QtQuick 2.13
import QtQuick.Window 2.13

Window {
    id: window
    visible: true
    width: 800
    height: 600
    title: qsTr("Main Window")

    Component.onCompleted: console.log(worker.work("I'm done!")) // not the actual usage, see note in the question
}
Run Code Online (Sandbox Code Playgroud)

mcve.py:

import QtQuick 2.13
import QtQuick.Window 2.13

Window {
    id: window
    visible: true
    width: 800
    height: 600
    title: …
Run Code Online (Sandbox Code Playgroud)

python qt qthread qml pyside2

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

PySide2 QThread 错误:QThread:线程仍在运行时销毁

我是 PySide2 的新手。我只是想启动一个示例应用程序并在应用程序启动时启动一个线程,并希望在应用程序关闭时停止该线程。当我关闭应用程序时,我收到以下错误:QThread:线程仍在运行时已销毁。sample_ui.py 是我从 sample_ui.ui 转换而来的 python 文件

代码:

import time
import sys
import sample_ui
from PySide2 import QtWidgets
from PySide2 import QtCore


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        main_window_ui = sample_ui.Ui_MainWindow()
        main_window_ui.setupUi(self)
        self.custom_thread = CustomThread()
        self.custom_thread.start()

    def closeEvent(self, event):
        self.custom_thread.stop()
        QtWidgets.QMainWindow.closeEvent(self, event)

class CustomThread(QtCore.QThread):
    def __init__(self):
        super(CustomThread, self).__init__()
    def run(self):
        while self.isRunning():
           print("Thread is Running")
           time.sleep(1)
    def stop(self):
        print("Thread Stopped")
        self.quit()




if __name__ == '__main__':
    app = QtWidgets.QApplication()
    main_window = MainWindow()
    main_window.show()
    sys.exit(app.exec_())

Run Code Online (Sandbox Code Playgroud)

输出:

Thread is Running
Thread …
Run Code Online (Sandbox Code Playgroud)

qt pyqt pyqt5 pyside2

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

PySide2 Qt3D 网格不显示

我正在研究 Qt3D 框架并决定复制这个c++ 示例的简化版本

不幸的是,我在应用程序启动时没有看到环面网格。我已经创建了所有必需的实体并在SceneModifier类中启用了一个网格。

它可能有什么问题?我以为我的相机实施不好,但似乎没问题。与点光源相同。

import sys
from PySide2 import QtWidgets, QtCore, QtGui
from PySide2.Qt3DCore import Qt3DCore
from PySide2.Qt3DExtras import Qt3DExtras
from PySide2.Qt3DRender import Qt3DRender


class SceneModifier(QtCore.QObject):
    def __init__(self, root_entity=None):
        super().__init__()

        # Scene entity
        self._m_root_entity = Qt3DCore.QEntity(root_entity)

        # Torus shape data
        self.m_torus = Qt3DExtras.QTorusMesh()
        self.m_torus.setRadius(1.0)
        self.m_torus.setMinorRadius(0.4)
        self.m_torus.setRings(100)
        self.m_torus.setSlices(20)

        # Torus transform
        torus_transform = Qt3DCore.QTransform()
        torus_transform.setScale(2.0)
        torus_transform.setRotation(QtGui.QQuaternion.fromAxisAndAngle(QtGui.QVector3D(0.0, 0.1, 0.0), 25.0))
        torus_transform.setTranslation(QtGui.QVector3D(0.0, 0.0, 0.0))

        # Torus material
        torus_mat = Qt3DExtras.QPhongMaterial()
        torus_mat.setDiffuse(QtGui.QColor(255, 102, 0))

        # Torus mesh
        self.m_torus_entity …
Run Code Online (Sandbox Code Playgroud)

python qt3d pyside2

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

标签 统计

pyside2 ×10

python ×8

qt ×4

pyqt5 ×2

qml ×2

image ×1

pyqt ×1

pyside ×1

python-2.7 ×1

python-3.x ×1

qlabel ×1

qpixmap ×1

qt3d ×1

qthread ×1