【问题标题】:pyqtgraph with PySide 2 and QtDesigner带有 PySide 2 和 QtDesigner 的 pyqtgraph
【发布时间】:2020-06-20 03:40:02
【问题描述】:

是“Promote To...”功能,在 pyqtgraph 0.10.0 文档中有描述:

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

还使用 PySide2 和 pyqtgraph 最近的开发分支?当我使用 QtDesigner 创建一个 .ui 文件并按照“Promote to...”说明进行操作时,小部件中不会显示任何 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】:

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

    git clone -b develop git@github.com:pyqtgraph/pyqtgraph.git
    python setup.py install
    

    另一方面,QUiLoader 不知道 PlotWidget,所以你必须重写 createWidget 方法:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    import os
    import sys
    
    from PySide2 import QtWidgets, QtUiTools, QtCore
    import pyqtgraph as pg
    
    DIR_PATH = os.path.dirname(os.path.realpath(__file__))
    
    
    class UiLoader(QtUiTools.QUiLoader):
        def createWidget(self, className, parent=None, name=""):
            if className == "PlotWidget":
                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(os.path.join(DIR_PATH, "test.ui"))
    
        def show(self):
            self.window.show()
    
    
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        main = First()
        main.show()
        sys.exit(app.exec_())
    

    【讨论】:

    • 不幸的是,小部件中仍然没有 pyqtgraph 图。
    猜你喜欢
    • 2017-10-16
    • 2012-08-15
    • 2011-10-31
    • 2020-03-23
    • 2019-02-01
    • 1970-01-01
    • 2014-05-05
    • 2018-02-12
    • 2015-11-10
    相关资源
    最近更新 更多