2015-05-15 3 views
1

Я проверил эту версию pyqtgraphDateAxisItem иногда становится невидимым

git clone https://github.com/3rdcycle/pyqtgraph.git 
git checkout origin/date-axis-item 
pip uninstall pyqtgraph 
python setup.py install 

я запустить эту программу. Кажется, что он работает нормально, за исключением того, что мои x-оси временных меток входят и исчезают из виду, если я ничего не делаю. Не уверен, что это ошибка в этой программе или в DateAxisItem. Кроме того, миллисекунды всегда кратно 100. Так, например, я вижу 00: 00: 00: 900, 00: 00: 01: 200, но не 00: 00: 00: 042?

# -*- coding: utf-8 -*- 
""" 
Created on Thu May 14 21:09:44 2015 

@author: idf 
""" 

from pyqtgraph.Qt import QtGui, QtCore 
import numpy as np 
import pyqtgraph as pg 
from PySide.QtCore import QTime, QTimer 
from collections import deque 

t = QTime() 
t.start() 
data = deque(maxlen=20) 

class TimeAxisItem(pg.DateAxisItem): 
    def __init__(self, *args, **kwargs): 
     super(TimeAxisItem, self).__init__(*args, **kwargs) 

    def tickStrings(self, values, scale, spacing): 
     return [QTime().addMSecs(value).toString('hh:mm:ss.zzz') for value in values] 

app = QtGui.QApplication([]) 

win = pg.GraphicsWindow(title="Basic time-plotting examples") 
win.resize(1000,600) 

plot = win.addPlot(title='Timed data', axisItems={'bottom': TimeAxisItem(orientation='bottom')}) 
curve = plot.plot() 

def update(): 
    global plot, curve, data 
    data.append({'x': t.elapsed(), 'y': np.random.randint(0, 100)}) 
    x = [item['x'] for item in data] 
    y = [item['y'] for item in data] 
    curve.setData(x=x, y=y) 

tmr = QTimer() 
tmr.timeout.connect(update) 
tmr.start(800) 

if __name__ == '__main__': 
    import sys 
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): 
     QtGui.QApplication.instance().exec_() 
+0

Вы определяете свой собственный AxisItem здесь. Зачем вам нужно наследовать DateAxisItem? –

+0

Потому что я хочу контролировать, сколько десятков мест показывают на частичной части секунды. В противном случае это будет 6 десятичных знаков. – Ivan

ответ

0

Я не уверен, что происходит с вашим DateAxisItem. Как вы знаете, он еще не объединен с основной ветвью разработки PyQtGraph. Однако для вашего конкретного приложения легче начать с нуля и определить свой собственный TimeAxisItem? Если вы начнете со следующего кода, какая функциональность будет отсутствовать?

class TimeAxisItem(AxisItem): 

    def __init__(self, orientation, **kwargs): 
     super().__init__(orientation, **kwargs) 

    def tickStrings(self, values, scale, spacing): 
     return [self.get_tick(v, spacing) for v in values] 

    def get_tick(self, ts, spacing): 
     dt = datetime.datetime.fromtimestamp(ts) 
     # Here you can decide on the accuracy of the time data 
     # displayed depending on the spacing. 
     if spacing > 60: 
      return "%02d:%02d" % (dt.hour, dt.minute) 
     else: 
      return "%02d:%02d:%02d" % (dt.hour, dt.minute, dt.second) 
Смежные вопросы