是“ 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>
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_())