带有PySide 2和QtDesigner的pyqtgraph

问题描述 投票:0回答:1

是“ Promote To ...”功能,在pyqtgraph 0.10.0 docs中进行了描述:

http://www.pyqtgraph.org/documentation/how_to_use.html#embedding-widgets-inside-pyqt-applications

还与PySide2和pyqtgraph的最新开发分支一起工作吗?当我使用QtDesigner创建.ui文件并按照“升级为...”说明进行操作时,小部件中没有显示pyqtgraph:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import sys

from PySide2 import QtWidgets, QtUiTools, QtCore
import pyqtgraph as pg


def load_ui(fname):
    fd = QtCore.QFile(fname)
    fd.open(QtCore.QFile.ReadOnly)
    loader = QtUiTools.QUiLoader()
    window = loader.load(fd)
    fd.close()
    return window


class First:
    def __init__(self):
        self.window = load_ui('test.ui')

    def show(self):
        self.window.show()


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

    main = First()  
    main.show()

    sys.exit(app.exec_())

在使用PyQt5和pyqtgraph 0.10.0的情况下,此方法确实有效:小部件将显示为空的pyqtgraph图。

编辑:

这是test.ui代码:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="PlotWidget" name="Graph">
    <property name="geometry">
     <rect>
      <x>40</x>
      <y>20</y>
      <width>701</width>
      <height>501</height>
     </rect>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>26</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <customwidgets>
  <customwidget>
   <class>PlotWidget</class>
   <extends>QGraphicsView</extends>
   <header>pyqtgraph</header>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>
python pyside2 pyqtgraph
1个回答
0
投票

PySide2仅适用于develop分支,因此您必须安装它:

git clone -b develop [email protected]:pyqtgraph/pyqtgraph.git
python setup.py install

另一方面,QUiLoader不知道PlotWidget,因此您必须重写createWidget方法:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import sys

from PySide2 import QtWidgets, QtUiTools, QtCore
import pyqtgraph as pg


class UiLoader(QtUiTools.QUiLoader):
    def createWidget(self, className, parent=None, name=""):
        if className == "PlotWidget":
            print(className)
            return pg.PlotWidget(parent=parent)
        return super().createWidget(className, parent, name)


def load_ui(fname):
    fd = QtCore.QFile(fname)
    if fd.open(QtCore.QFile.ReadOnly):
        loader = UiLoader()
        window = loader.load(fd)
        fd.close()
        return window


class First:
    def __init__(self):
        self.window = load_ui("test.ui")

    def show(self):
        self.window.show()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = First()
    main.show()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.