技术标签: python gui编程 qt 编码 pyside2 pyqt5
烛台图(Candlestick Chart)最常见的应用就是表示诸如股票交易当日成交价格幅度以及开盘及收盘价格的图表。QChart中提供类QCandlestickSeries, QCandlestickSet来实现绘制烛台图。
QCandlestickSeries类将数据表示为烛台样的图形。本类充当单个条目的容器。使用QBarCategoryAxis时,每个条目都绘制到自己的类别中。QDateTimeAxis和QValueAxis可以用来替代QBarCategoryAxis。在这种情况下,每个条目均根据其时间戳值绘制。
QCandlestickSeries常用函数:
QCandlestickSeries常用信号:
QCandlestickSet类表示烛台图中的单个烛台条目。需要五个值来创建烛台条目的图形表示形式:open,high,low,close和timestamp。可以在创建对象时设置,也可以使用setOpen(),setHigh(),setLow(),setClose()和setTimestamp()进行设置。
QCandlestickSet常用函数:
QCandlestickSet常用信号:
参考Qt样例代码,创建类CandlestickDataReader用于读取文本文件,并将其数据设置为QCandlestickSet项,添加到QCandlestickSeries中,然后将QCandlestickSeries对象设置到图表,使用图表视图显示出来。使用的数据文件acme_data.txt的数据如下图:
acme_data.txt
资源文件candlestickdata.qrc:
<RCC>
<qresource prefix="/">
<file alias="acme">acme_data.txt</file>
</qresource>
</RCC>
完整代码如下:
import sys
from PyQt5.QtCore import Qt, QIODevice, QTextStream, QFile, QDateTime
from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from PyQt5.QtChart import (QChartView, QChart, QCandlestickSeries, QCandlestickSet,
QBarCategoryAxis, QValueAxis)
import candlestickdata_rc
#读取文本数据
class CandlestickDataReader(QTextStream):
def __init__(self, device, parent = None):
super(CandlestickDataReader, self).__init__(parent)
self.setDevice(device)
def readFile(self, device):
self.setDevice(device)
#从文本路中读取一行交易数据
def readCandlestickSet(self):
line = self.readLine()
if line.startswith('#') or line=='':
return None
strList = line.split(' ')
if len(strList) != 5:
return None
timestamp = float(strList[0])
open = float(strList[1])
high = float(strList[2])
low = float(strList[3])
close = float(strList[4])
candlestickSet = QCandlestickSet(timestamp)
candlestickSet.setOpen(open)
candlestickSet.setHigh(high)
candlestickSet.setLow(low)
candlestickSet.setClose(close)
return candlestickSet
class DemoChartCandlestick(QMainWindow):
def __init__(self, parent=None):
super(DemoChartCandlestick, self).__init__(parent)
# 设置窗口标题
self.setWindowTitle('实战 Qt for Python: QChart样条曲线演示')
# 设置窗口大小
self.resize(600, 360)
self.createChart()
def createChart(self):
#烛台图
acmeSeries = QCandlestickSeries()
acmeSeries.setName('Acm Ltd')
acmeSeries.setIncreasingColor(QColor(Qt.green))
acmeSeries.setDecreasingColor(QColor(Qt.red))
acmeData = QFile(':acme')
if not acmeData.open(QIODevice.ReadOnly | QIODevice.Text):
QMessageBox.information(self, '读数据', '不合法的数据文件')
return
dataReader = CandlestickDataReader(acmeData)
categories = []
while not dataReader.atEnd():
csSet = dataReader.readCandlestickSet()
if not csSet is None:
acmeSeries.append(csSet)
categories.append(QDateTime.fromMSecsSinceEpoch(csSet.timestamp()).toString('dd'))
#创建图表
chart = QChart()
chart.addSeries(acmeSeries)
chart.setTitle('Acme 公司历史数据 (2015年7月)')
chart.setAnimationOptions(QChart.SeriesAnimations)
#坐标轴设置
chart.createDefaultAxes()
#横轴
axisX = chart.axes(Qt.Horizontal)[0]
axisX.setCategories(categories)
#调整纵坐标轴值的范围
axisY = chart.axes(Qt.Vertical)[0]
axisY.setMax(int(axisY.max() * 1.01))
axisY.setMin(int(axisY.min() * 0.99))
#图例位置
chart.legend().setVisible(True)
chart.legend().setAlignment(Qt.AlignBottom)
#图表视图
chartView = QChartView(chart)
chartView.setRenderHint(QPainter.Antialiasing)
self.setCentralWidget(chartView)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoChartCandlestick()
window.show()
sys.exit(app.exec())
运行结果如下图:
QChart烛台图演示
文章浏览阅读1.6w次。问题描述28-Jul-2020 11:44:56.960 严重 [http-nio-8080-exec-1] org.apache.catalina.core.StandardWrapperValve.invoke 在路径为的上下文中,Servlet[jsp]的Servlet.service()引发了具有根本原因的异常无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core] org.apache.jasper.Ja_在路径为/helloworld的上下文中,servlet[jsp]的servlet.service()引发了具有根本
文章浏览阅读412次。昨天用Python做了一个语音识别,就给大家分享一下心得,需要Python学习资料的小伙伴可以私信我,回复01系统会自动发送学习资料。最为重要的是,在 Python 程序中实现语音识别非常简单。阅读本文章,你将会了解到Python是如何制作语音识别的。你将会学习到:语言识别工作原理概述语音识别的首要部分当然是语音。通过麦克风,语音便从物理声音被转换为电信号,然后通过模数转换器转换为数据。一旦被数字..._语音识别用什么语言编写最简单
文章浏览阅读4.1k次。文章目录项目场景与问题描述:原因分析:解决方案:项目场景与问题描述:调用python deepstream API,改写deepstream_test_3.py,出现如下报错:TypeError: Unable to convert function return value to a Python type! The signature was(self: pyds.NvDsComp_BboxInfo) -> _NvBbox_Coords本次使用的盒子系统配置如下:原因分析:当前_unable to convert function return value to a python type! the signature was
文章浏览阅读2.9k次,点赞2次,收藏5次。元素的边框(border)是围绕元素内容和内边距的一条或多条线CSS border 属性允许你规定边框的样式 宽度和颜色CSS 边框在 HTML 中,我们使用表格来创建文本周围的边框,但是通过使用 CSS 边框属性,我们可以创建出效果出色的边框,并且可以应用于任何元素。元素外边距内就是元素的的边框 (border)。元素的边框就是围绕元素内容和内边据的一条或多条线。每个边框有 3 个方面:宽度、样..._css文本框
文章浏览阅读519次。11-1import unittestdef get_location(country, city): return country.title() + ', ' + city.title();class LocationTestCase(unittest.TestCase): def test_city_country(self): location = ..._python从入门到实践第11章
文章浏览阅读318次,点赞5次,收藏4次。探秘RictyDiminished:一款轻量级的Markdown字体库项目地址:https://gitcode.com/edihbrandon/RictyDiminished项目简介RictyDiminished 是一个专为Markdown阅读和编写优化的开源字体库。该项目旨在提供一种清晰、易读且简洁的字体体验,特别适用于程序员和写作爱好者在日常工作中处理Markdown文档。技术分析R...
文章浏览阅读3.9k次。下面是代码和个人愚见,还没完全搞透,但基本发现以下规律。调试的过程中出现一个问题,就是没有波形输出。原因是刹车和死区的配置中, tim1_BDTR.TIM_Break=TIM_Break_Disable;//TIM_Break_Enable;刹车要失能(Disable),具体原因和MOE相关寄存器配置有关。另外还有个参数疑问,就是oc.TIM_OCIdleState = TIM_OCId..._tim_break_disable
文章浏览阅读991次,点赞14次,收藏19次。设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?5、LVS、Nginx、HAproxy有什么区别?9、讲述一下Tomcat8005、8009、8080三个端口的含义?12、简述DNS进行域名解析的过程?_微服务 spring cloud alibaba 维护复杂吗
文章浏览阅读133次。K 个一组翻转链表难度:困难给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当k= 2 时,应当返回:2->1->4->3->5当k= 3 时,应当返回:3->2->1->4->5说明:你的算法只能使..._给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,
文章浏览阅读5.5k次,点赞8次,收藏36次。作者|李秋键出品|AI科技大本营(ID:rgznai100)引言目标检测是一种与计算机视觉和图像处理有关的计算机技术, 用于检测数字图像和视频中特定类别的语义对象 (例如人、建筑物或汽车等..._out_boxes.reshape
文章浏览阅读7.4k次,点赞2次,收藏12次。在Android开发中我们常常会遇到需要拦截或屏蔽返回键的需求,对拦截后的返回键进行特殊操作。监听返回键有两种方式1、重写OnBackPressed方法@Override public void onBackPressed() { // 完全由自己控制返回键逻辑,系统不再控制,但是有个前提是: // 不要在Activity的onKeyDown或者OnK..._android 返回键拦截
文章浏览阅读9.6k次。设置H5页面中字体大小不跟随手机系统 WebSettings webSettings = webView.getSettings(); webSettings.setTextZoom(100);设置原生APP字体不跟随系统字体而变化在acvitity的父类中重写getResource方法 @Override public Resources getResourc..._软件字体不跟随苹果系统字体