Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2019 16:04:18

lefmails
Зарегистрирован: 2019-04-15
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT4Создание графика в новом модальном окне

Добрый день!
Python2.7 PyQT4
Не получается создать график в отдельном модальном окне окне.

 class MyModalWingraphik(QtGui.QWidget):
    def __init__(self,parent, flag,  *args, **kwargs):
        QtGui.QWidget.__init__(self, parent, flag, *args, **kwargs)
        self.setWindowFlags(flag|QtCore.Qt.CustomizeWindowHint)
        self.setWindowModality(QtCore.Qt.WindowModal)
        
        #layout = QtGui.QGridLayout(self)
        #self.setLayout(layout)
        #-------------------------------------------
        view = pg.GraphicsLayoutWidget()
        layout.addWidget(view)
       
        #mw.setCentralWidget(view)
        #mw.setWindowTitle('pyqtgraph example: ScatterPlot')
        stringaxis = TimeAxisItem(orientation='bottom')
        w1 = view.addPlot(axisItems={'bottom': stringaxis})
        x = ['0:09:48', '0:09:49', '0:09:50', '0:09:51', '0:09:52', '0:09:53', '0:09:54', '0:09:55', '0:09:56', '0:09:57']
        y = [10, 8, 6, 4, 2, 20, 18, 16, 14, 12]
        time = QtCore.QTime.currentTime()
        QtCore.qsrand(time.msec())
        for xi, yi in zip(x, y):
            s = pg.ScatterPlotItem([QtCore.QTime(0, 0, 0).secsTo(QtCore.QTime.fromString(xi, "h:mm:ss"))], [yi], size=10, pen=pg.mkPen(None))
            s.setBrush(QtGui.QBrush(QtGui.QColor(QtCore.qrand() % 256, QtCore.qrand() % 256, QtCore.qrand() % 256)))
            w1.addItem(s)
 
        #-------------------------------------------
        
##----
        
        self.button3 = QtGui.QPushButton(u"Выход", self)
        self.button3.clicked.connect(self.deleteLater) 
        self.button3.setGeometry(10, 40, 80, 20)
        
    def closeEvent(self, QMesBox):
        #sys.exit(app.exec_())
        pass
    
#=================================================== 
class TimeAxisItem(pg.AxisItem):
    def tickStrings(self, values, scale, spacing):
        return [QtCore.QTime(0, 0, 0).addSecs(value).toString() for value in values]

Модальное окно вызывается:
   def show_modal_wingrafik(self):
window2 = MyModalWingraphik(self, QtCore.Qt.Dialog)
window2.setWindowTitle(u"График")
window2.setGeometry(0, 0, 480, 272)
window2.show()

Задача: есть дата и время (ось x) , а ось y это некоторые данные, нужно построить график по массиву времени и данных.
Подскажите, что можно сделать

Офлайн

#2 Авг. 7, 2019 09:04:28

lefmails
Зарегистрирован: 2019-04-15
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT4Создание графика в новом модальном окне

Ура, получилось
Как говорят надо с мыслью переспать))

..............
layout = QtGui.QGridLayout(self)
self.setLayout(layout)
...............

layout.addWidget(view,1,1)
..........

Вчера так делал но не получалось, видать что то подкосячивал…

Отредактировано lefmails (Авг. 7, 2019 09:04:56)

Офлайн

#3 Авг. 14, 2019 10:23:19

lefmails
Зарегистрирован: 2019-04-15
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT4Создание графика в новом модальном окне

Помогите пожалуйста перевести все в линии, отображается все в точках, ни как не получается сделать линиями

Офлайн

#4 Авг. 14, 2019 14:46:29

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

PyQT4Создание графика в новом модальном окне

Помогите пожалуйста перевести все в линии, отображается все в точках, ни как не получается сделать линиями
Никогда PyQtGraph не использовал, но, поглядев в документацию, предположу, что надо объект pg.ScatterPlotItem заменить на pg.PlotCurveItem.



Офлайн

#5 Авг. 15, 2019 08:33:00

lefmails
Зарегистрирован: 2019-04-15
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQT4Создание графика в новом модальном окне

Striver
PlotCurveItem
Спасибо за наводку, начал делать, получилось с просто данными
         layout = QtGui.QGridLayout(self)
        self.setLayout(layout)
        a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        b = [1, 10, 40, 100, 600, 800, 1100, 1100, 900, 800]     
        w = pg.PlotWindow()
        layout.addWidget(w,1,1)
        stringaxis = TimeAxisItem(orientation='bottom')
        w = view.addPlot(axisItems={'bottom': stringaxis})
        normalcurve = pg.PlotDataItem(a, b, pen=(255, 0, 0))    
        w.addItem(normalcurve) 
        #w.show()
При этом ни как не могу избавиться от дополнительно всплывающего окна.
Если переделать строку
  w = pg.PlotWindow()
на
 w = pg.GraphicsLayoutWidget()
то вообще не запускается.

Так же при попытке заменить значения a на временные значения тоже не получается
  
        layout = QtGui.QGridLayout(self)
        self.setLayout(layout)
       #a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        b = [1, 10, 40, 100, 600, 800, 1100, 1100, 900, 800]
        a = ['0:09:48', '1:09:49', '2:09:50', '3:09:51', '4:09:52', '5:09:53', '6:09:54', '7:09:55', '9:09:56', '10:09:57']
        w = pg.PlotWindow()
        layout.addWidget(w,1,1)
        stringaxis = TimeAxisItem(orientation='bottom')
        w = view.addPlot(axisItems={'bottom': stringaxis})
        time = QtCore.QTime.currentTime()
        QtCore.qsrand(time.msec())
        normalcurve = pg.PlotDataItem([QtCore.QTime(0, 0, 0).secsTo(QtCore.QTime.fromString(a, "h:mm:ss"))], b, pen=(255, 0, 0))    
        w.addItem(normalcurve)

Всю голову сломал

Отредактировано lefmails (Авг. 15, 2019 08:33:38)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version