首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中临时隐藏QCandlestickSeries

在Python中临时隐藏QCandlestickSeries
EN

Stack Overflow用户
提问于 2020-05-08 14:38:08
回答 1查看 182关注 0票数 0

如何在图表上临时隐藏QCandlestickSeries?我试过了:

代码语言:javascript
复制
....

self._cs = QtChart.QCandlestickSeries()
self._ls = QtChart.QLineSeries()

...

self._cs.hide() # does not work
self._ls.hide() # work

...

编辑此处是描述问题的代码示例:

代码语言:javascript
复制
app = QtWidgets.QApplication([])

# data
t = [1557723420.0, 1573102560.0, 1577163360.0]
v = [258, 259, 253]

# candlestick series
candlestick = QtChart.QCandlestickSeries()

# line series
line = QtChart.QLineSeries()

# add data
for _t, _v in zip(t, v):
    _open = _v + 10
    _high = _v + 30
    _low = _v - 20
    _close = _v if _v%2 else _high - 5
    _time = QtCore.QDateTime(datetime.date.fromtimestamp(_t))
    candlestick.append(QtChart.QCandlestickSet(_open, _high, _low, _close, _time.toMSecsSinceEpoch() ))
    line.append(_time.toMSecsSinceEpoch(), _v )

# main window
window = QtWidgets.QMainWindow()

# axises
axis_x = QtChart.QDateTimeAxis()
axis_x.setFormat("yyyy-MM-dd hh:mm:ss")
axis_x.setTitleText("Date")
axis_x.setLabelsAngle(-90)

axis_y = QtChart.QValueAxis()
axis_y.setTitleText("Ratio")

# chart
chart = QtChart.QChart()
chart.addAxis(axis_x, QtCore.Qt.AlignBottom)
chart.addAxis(axis_y, QtCore.Qt.AlignRight)
chart.addSeries(candlestick)
chart.addSeries(line)
chart.setAxisX(axis_x, candlestick)
chart.setAxisX(axis_x, line)
chart.setAxisY(axis_y, candlestick)
chart.setAxisY(axis_y, line)

# chart view
chart_view = QtChart.QChartView()
chart_view.setChart(chart)
chart_view.setRenderHint(QtGui.QPainter.Antialiasing)
window.setCentralWidget(chart_view)
window.show()

# hide
candlestick.hide() # <- does not work
line.hide() # work

sys.exit(app.exec_())

当我使用QLineSeries和hide方法时,这是正确的。我使用PyQT5。

EN

回答 1

Stack Overflow用户

发布于 2020-05-09 03:45:48

这是一个尚未解决的错误:QTBUG-63358

一种可能的解决方法是从图表中删除序列,以创建与hide()方法相同的行为。对于show()方法,必须将序列添加到图表中:

代码语言:javascript
复制
import datetime
import sys

from PyQt5 import QtCore, QtGui, QtWidgets, QtChart

if __name__ == "__main__":

    app = QtWidgets.QApplication([])

    # data
    t = [1557723420.0, 1573102560.0, 1577163360.0]
    v = [258, 259, 253]

    # candlestick series
    candlestick = QtChart.QCandlestickSeries()

    # line series
    line = QtChart.QLineSeries()

    # add data
    for _t, _v in zip(t, v):
        _open = _v + 10
        _high = _v + 30
        _low = _v - 20
        _close = _v if _v % 2 else _high - 5
        _time = QtCore.QDateTime(datetime.date.fromtimestamp(_t))
        candlestick.append(
            QtChart.QCandlestickSet(
                _open, _high, _low, _close, _time.toMSecsSinceEpoch()
            )
        )
        line.append(_time.toMSecsSinceEpoch(), _v)

    # main window
    window = QtWidgets.QMainWindow()

    # axises
    axis_x = QtChart.QDateTimeAxis()
    axis_x.setFormat("yyyy-MM-dd hh:mm:ss")
    axis_x.setTitleText("Date")
    axis_x.setLabelsAngle(-90)

    axis_y = QtChart.QValueAxis()
    axis_y.setTitleText("Ratio")

    # chart
    chart = QtChart.QChart()
    chart.addAxis(axis_x, QtCore.Qt.AlignBottom)
    chart.addAxis(axis_y, QtCore.Qt.AlignRight)
    chart.addSeries(candlestick)
    chart.addSeries(line)
    chart.setAxisX(axis_x, candlestick)
    chart.setAxisY(axis_y, candlestick)

    chart.setAxisX(axis_x, line)
    chart.setAxisY(axis_y, line)

    # chart view
    chart_view = QtChart.QChartView()
    chart_view.setChart(chart)
    chart_view.setRenderHint(QtGui.QPainter.Antialiasing)
    window.setCentralWidget(chart_view)
    window.show()

    state = True

    def on_timeout():
        global state
        state = not state

        line.setVisible(state)
        serie = candlestick
        if state:
            # add == show
            chart.addSeries(serie)
            chart.setAxisX(axis_x, serie)
            chart.setAxisY(axis_y, serie)
            # workaround for repaint
            chart.resize(chart.size() + QtCore.QSizeF(1, 1))
            chart.resize(chart.size() - QtCore.QSizeF(1, 1))
        else:
            # remove == hide
            chart.removeSeries(serie)

    timer = QtCore.QTimer(interval=1000, timeout=on_timeout)
    timer.start()

    sys.exit(app.exec_())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61673448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档