Как сделать подписи по оси X строковыми данными (символами)?

Как сделать по оси X строковые данные (символы),
используя библиотеку PyQtGraph и Qt Designer?

Я хочу по оси X прописать текущее системное время.

main.py:

# WARNING: Any manual changes made to this file will be lost when pyuic5 is


from PyQt5 import QtCore, QtGui, QtWidgets
import pyqtgraph as pg

pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.graph = PlotWidget(self.centralwidget)
        self.graph.setGeometry(QtCore.QRect(70, 30, 641, 461))
        self.graph.setObjectName("graph")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
     
        listX = [0, 1, 2, 3, 4, 5]
        listT1 = [0, 1, 2, 3, 4, 5]
        listT2 = ['A1', 'B2', 'C3', '4', '5', '6']

        self.graph.showGrid(x = True, y = True)
        self.graph.addLegend()
        self.graph.setLabel('left', 'Температура', units = '°C')
        self.graph.setLabel('bottom', 'Дата')
        self.graph.plot(listX, listT1, pen = pg.mkPen('b', width=2),  name = 'T1')

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
from pyqtgraph import PlotWidget


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: S. Nick

Я не уверен, что правильно понял вас. Вы писали, что хотите по оси X прописать текущее системное время.
Попробуйте так:

main.py:

from datetime import datetime
from PyQt5 import QtCore, QtGui, QtWidgets
import pyqtgraph as pg


pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 480)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        
        self.graphWidget = PlotWidget(self.centralwidget)
        self.graphWidget.setGeometry(QtCore.QRect(89, 59, 471, 291))
        self.graphWidget.setObjectName("graphWidget")
        
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 631, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
from pyqtgraph import PlotWidget


class TimeAxisItem(pg.AxisItem):
    def tickStrings(self, values, scale, spacing):
        #print(f'{values}')
        return [datetime.fromtimestamp(value) for value in values]
        

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setupUi(self)
        
        grid = QtWidgets.QGridLayout(self.centralwidget)
        grid.setContentsMargins(0, 0, 0, 0)
        
        list_x = [
            datetime(2025, 3, 17, 1, 40, 0), 
            datetime(2025, 3, 17, 3, 40, 0), 
            datetime(2025, 3, 17, 5, 40, 0),
            datetime(2025, 3, 17, 7, 40, 0),
            datetime(2025, 3, 17, 9, 40, 0),
            datetime(2025, 3, 17, 10, 40, 0),
        ] 
        list_y = [0, 1, 2, 3, 4, 5] 
       
        self.date_axis = TimeAxisItem(orientation='bottom')
        
        self.graphWidget = pg.PlotWidget(
            axisItems = {'bottom': self.date_axis},
            title= 'Hello World')
        self.graphWidget.addLegend(offset=(10, 10))
    
        self.graphWidget.plot(
            x=[x.timestamp() for x in list_x], 
            y=list_y, 
            pen=None, 
            name="_name",
            symbol='o'
        )
        grid.addWidget(self.graphWidget, 0, 0)

        self.graphWidget.showGrid(x = True, y = True)
        self.graphWidget.setLabel('left', 'Температура', units = '°C')
        
        self.graphWidget.setLabel(
            'bottom', 
            'Дата/Time',
            units='текущее системное время',
        )
     

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка