运行 来自函数的 pyqtgraph
run pyqtgraph from function
我在 pyqtgraph 中创建了下图。它 运行 没问题,可以正常显示。
import numpy as np
import pyqtgraph as pg
import pyqtgraph.exporters
from pyqtgraph.Qt import QtCore, QtGui
import csv
import itertools
from datetime import datetime as dt
app = QtGui.QApplication([])
class TimeAxisItem(pg.AxisItem):
def tickStrings(self, values, scale, spacing):
return [dt.fromtimestamp(value) for value in values]
x_vals = [dt(2018, 7, 1, 13, 6, 38), dt(2018, 7, 1, 12, 46, 38), dt(2018, 7, 1, 12, 36, 38), dt(2018, 7, 1, 12, 26, 38), dt(2018, 7, 1, 12, 16, 38), dt(2018, 7, 1, 12, 6, 38), dt(2018, 7, 1, 11, 56, 38), dt(2018, 7, 1, 11, 46, 38), dt(2018, 7, 1, 11, 36, 38), dt(2018, 7, 1, 11, 26, 38), dt(2018, 7, 1, 10, 56, 38), dt(2018, 7, 1, 10, 46, 38), dt(2018, 7, 1, 10, 36, 38)]
y_vals = [23.5, 20.8, 28.0, 28.1, 28.0, 27.8, 27.3, 27.2, 25.7, 24.7, 25.0, 25.0, 24.9]
date_axis = TimeAxisItem(orientation='bottom')
plt = pg.PlotWidget(axisItems = {'bottom': date_axis})
# set properties
plt.setLabel('left', 'Temperature', units='C')
plt.setWindowTitle('Temperature over time')
plt.plot(x=[x.timestamp() for x in x_vals], y=y_vals, symbol=None, pen='r', symbolPen='r')
plt.show()
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
然而,当我尝试从函数中 运行 它时,它闪烁然后消失,但 pyqt 仍然 运行ning..
import numpy as np
import pyqtgraph as pg
import pyqtgraph.exporters
from pyqtgraph.Qt import QtCore, QtGui
import csv
import itertools
from datetime import datetime as dt
app = QtGui.QApplication([])
class TimeAxisItem(pg.AxisItem):
def tickStrings(self, values, scale, spacing):
return [dt.fromtimestamp(value) for value in values]
def Gshow():
# app = QtGui.QApplication([])
x_vals = [dt(2018, 7, 1, 13, 6, 38), dt(2018, 7, 1, 12, 46, 38), dt(2018, 7, 1, 12, 36, 38), dt(2018, 7, 1, 12, 26, 38), dt(2018, 7, 1, 12, 16, 38), dt(2018, 7, 1, 12, 6, 38), dt(2018, 7, 1, 11, 56, 38), dt(2018, 7, 1, 11, 46, 38), dt(2018, 7, 1, 11, 36, 38), dt(2018, 7, 1, 11, 26, 38), dt(2018, 7, 1, 10, 56, 38), dt(2018, 7, 1, 10, 46, 38), dt(2018, 7, 1, 10, 36, 38)]
y_vals = [23.5, 20.8, 28.0, 28.1, 28.0, 27.8, 27.3, 27.2, 25.7, 24.7, 25.0, 25.0, 24.9]
date_axis = TimeAxisItem(orientation='bottom')
plt = pg.PlotWidget(axisItems = {'bottom': date_axis})
# set properties
plt.setLabel('left', 'Temperature', units='C')
plt.setWindowTitle('Temperature over time')
plt.plot(x=[x.timestamp() for x in x_vals], y=y_vals, symbol=None, pen='r', symbolPen='r')
plt.show()
Gshow()
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
如何 运行 函数的图形而不崩溃?
在 main() 中调用 Gshow()
问题很简单,在函数中创建的变量只存在于函数执行完毕之前,你的情况是plt被没有显示的东西消除了,解决办法是增加那个数据的范围,a这样做的形式是 return 它并将它传递给具有更大范围的变量。
import numpy as np
import pyqtgraph as pg
import pyqtgraph.exporters
from pyqtgraph.Qt import QtCore, QtGui
import csv
import itertools
from datetime import datetime as dt
app = QtGui.QApplication([])
class TimeAxisItem(pg.AxisItem):
def tickStrings(self, values, scale, spacing):
return [dt.fromtimestamp(value) for value in values]
def Gshow():
# app = QtGui.QApplication([])
x_vals = [dt(2018, 7, 1, 13, 6, 38), dt(2018, 7, 1, 12, 46, 38), dt(2018, 7, 1, 12, 36, 38), dt(2018, 7, 1, 12, 26, 38), dt(2018, 7, 1, 12, 16, 38), dt(2018, 7, 1, 12, 6, 38), dt(2018, 7, 1, 11, 56, 38), dt(2018, 7, 1, 11, 46, 38), dt(2018, 7, 1, 11, 36, 38), dt(2018, 7, 1, 11, 26, 38), dt(2018, 7, 1, 10, 56, 38), dt(2018, 7, 1, 10, 46, 38), dt(2018, 7, 1, 10, 36, 38)]
y_vals = [23.5, 20.8, 28.0, 28.1, 28.0, 27.8, 27.3, 27.2, 25.7, 24.7, 25.0, 25.0, 24.9]
date_axis = TimeAxisItem(orientation='bottom')
plt = pg.PlotWidget(axisItems = {'bottom': date_axis})
# set properties
plt.setLabel('left', 'Temperature', units='C')
plt.setWindowTitle('Temperature over time')
plt.plot(x=[x.timestamp() for x in x_vals], y=y_vals, symbol=None, pen='r', symbolPen='r')
plt.show()
return plt # <----
var = Gshow() # <----
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
我在 pyqtgraph 中创建了下图。它 运行 没问题,可以正常显示。
import numpy as np
import pyqtgraph as pg
import pyqtgraph.exporters
from pyqtgraph.Qt import QtCore, QtGui
import csv
import itertools
from datetime import datetime as dt
app = QtGui.QApplication([])
class TimeAxisItem(pg.AxisItem):
def tickStrings(self, values, scale, spacing):
return [dt.fromtimestamp(value) for value in values]
x_vals = [dt(2018, 7, 1, 13, 6, 38), dt(2018, 7, 1, 12, 46, 38), dt(2018, 7, 1, 12, 36, 38), dt(2018, 7, 1, 12, 26, 38), dt(2018, 7, 1, 12, 16, 38), dt(2018, 7, 1, 12, 6, 38), dt(2018, 7, 1, 11, 56, 38), dt(2018, 7, 1, 11, 46, 38), dt(2018, 7, 1, 11, 36, 38), dt(2018, 7, 1, 11, 26, 38), dt(2018, 7, 1, 10, 56, 38), dt(2018, 7, 1, 10, 46, 38), dt(2018, 7, 1, 10, 36, 38)]
y_vals = [23.5, 20.8, 28.0, 28.1, 28.0, 27.8, 27.3, 27.2, 25.7, 24.7, 25.0, 25.0, 24.9]
date_axis = TimeAxisItem(orientation='bottom')
plt = pg.PlotWidget(axisItems = {'bottom': date_axis})
# set properties
plt.setLabel('left', 'Temperature', units='C')
plt.setWindowTitle('Temperature over time')
plt.plot(x=[x.timestamp() for x in x_vals], y=y_vals, symbol=None, pen='r', symbolPen='r')
plt.show()
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
然而,当我尝试从函数中 运行 它时,它闪烁然后消失,但 pyqt 仍然 运行ning..
import numpy as np
import pyqtgraph as pg
import pyqtgraph.exporters
from pyqtgraph.Qt import QtCore, QtGui
import csv
import itertools
from datetime import datetime as dt
app = QtGui.QApplication([])
class TimeAxisItem(pg.AxisItem):
def tickStrings(self, values, scale, spacing):
return [dt.fromtimestamp(value) for value in values]
def Gshow():
# app = QtGui.QApplication([])
x_vals = [dt(2018, 7, 1, 13, 6, 38), dt(2018, 7, 1, 12, 46, 38), dt(2018, 7, 1, 12, 36, 38), dt(2018, 7, 1, 12, 26, 38), dt(2018, 7, 1, 12, 16, 38), dt(2018, 7, 1, 12, 6, 38), dt(2018, 7, 1, 11, 56, 38), dt(2018, 7, 1, 11, 46, 38), dt(2018, 7, 1, 11, 36, 38), dt(2018, 7, 1, 11, 26, 38), dt(2018, 7, 1, 10, 56, 38), dt(2018, 7, 1, 10, 46, 38), dt(2018, 7, 1, 10, 36, 38)]
y_vals = [23.5, 20.8, 28.0, 28.1, 28.0, 27.8, 27.3, 27.2, 25.7, 24.7, 25.0, 25.0, 24.9]
date_axis = TimeAxisItem(orientation='bottom')
plt = pg.PlotWidget(axisItems = {'bottom': date_axis})
# set properties
plt.setLabel('left', 'Temperature', units='C')
plt.setWindowTitle('Temperature over time')
plt.plot(x=[x.timestamp() for x in x_vals], y=y_vals, symbol=None, pen='r', symbolPen='r')
plt.show()
Gshow()
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
如何 运行 函数的图形而不崩溃?
在 main() 中调用 Gshow()
问题很简单,在函数中创建的变量只存在于函数执行完毕之前,你的情况是plt被没有显示的东西消除了,解决办法是增加那个数据的范围,a这样做的形式是 return 它并将它传递给具有更大范围的变量。
import numpy as np
import pyqtgraph as pg
import pyqtgraph.exporters
from pyqtgraph.Qt import QtCore, QtGui
import csv
import itertools
from datetime import datetime as dt
app = QtGui.QApplication([])
class TimeAxisItem(pg.AxisItem):
def tickStrings(self, values, scale, spacing):
return [dt.fromtimestamp(value) for value in values]
def Gshow():
# app = QtGui.QApplication([])
x_vals = [dt(2018, 7, 1, 13, 6, 38), dt(2018, 7, 1, 12, 46, 38), dt(2018, 7, 1, 12, 36, 38), dt(2018, 7, 1, 12, 26, 38), dt(2018, 7, 1, 12, 16, 38), dt(2018, 7, 1, 12, 6, 38), dt(2018, 7, 1, 11, 56, 38), dt(2018, 7, 1, 11, 46, 38), dt(2018, 7, 1, 11, 36, 38), dt(2018, 7, 1, 11, 26, 38), dt(2018, 7, 1, 10, 56, 38), dt(2018, 7, 1, 10, 46, 38), dt(2018, 7, 1, 10, 36, 38)]
y_vals = [23.5, 20.8, 28.0, 28.1, 28.0, 27.8, 27.3, 27.2, 25.7, 24.7, 25.0, 25.0, 24.9]
date_axis = TimeAxisItem(orientation='bottom')
plt = pg.PlotWidget(axisItems = {'bottom': date_axis})
# set properties
plt.setLabel('left', 'Temperature', units='C')
plt.setWindowTitle('Temperature over time')
plt.plot(x=[x.timestamp() for x in x_vals], y=y_vals, symbol=None, pen='r', symbolPen='r')
plt.show()
return plt # <----
var = Gshow() # <----
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()