该例是实现了 Tinker 嵌入 matplotlib 所绘制的蜡烛图(k 线),数据是从 csv 读入的。花一下午做的,还很粗糙,仅供参考。python 代码如下:

import matplotlib
import matplotlib.dates as mdates import pandas as pd from matplotlib.figure import Figure
from matplotlib.finance import candlestick_ohlc
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.backend_bases import key_press_handler from numpy import arange, sin, pi matplotlib.use('TkAgg') import sys
if sys.version_info[] < :
import Tkinter as Tk
else:
import tkinter as Tk root = Tk.Tk()
root.wm_title("CNY exchange rate")
root.iconbitmap('my_logo.ico') # read data
data = pd.read_csv("data.csv", index_col=, parse_dates=True)
data = data.reset_index()
data['Date2'] = data['Date'].apply(lambda d: mdates.date2num(d.to_pydatetime()))
tuples = [tuple(x) for x in data[['Date2','Open','High','Low','Close']].values] # drawArea setup
drawArea = Figure(figsize=(, ), dpi=)
ax = drawArea.add_axes([0.1, 0.2, 0.85, 0.7])
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.tick_params(axis='both',
direction='out',
width=,
length=,
labelsize=,
pad=)
ax.spines['left'].set_linewidth()
ax.spines['bottom'].set_linewidth() ax.set_xticklabels(data['Date2'], rotation=, horizontalalignment='right')
ax.xaxis_date()
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d")) ax.set_ylabel('Price ($)', size=)
candlestick_ohlc(ax, tuples, width=., colorup='r', colordown='g'); # a tk.canvas
canvas = FigureCanvasTkAgg( drawArea, master=root)
canvas.show()
canvas.get_tk_widget().grid(row=, columnspan=) toolbar = NavigationToolbar2TkAgg(canvas, root)
toolbar.update()
toolbar.grid(row=, columnspan=)
#canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=) def _refresh():
ax.clear() data = pd.read_csv("data2.csv", index_col=, parse_dates=True)
data = data.reset_index()
data['Date2'] = data['Date'].apply(lambda d: mdates.date2num(d.to_pydatetime()))
tuples = [tuple(x) for x in data[['Date2','Open','High','Low','Close']].values] ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.tick_params(axis='both',
direction='out',
width=,
length=,
labelsize=,
pad=)
ax.spines['left'].set_linewidth()
ax.spines['bottom'].set_linewidth() ax.set_xticklabels(data['Date2'], rotation=, horizontalalignment='right')
ax.xaxis_date()
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d")) ax.set_ylabel('Price ($)', size=)
candlestick_ohlc(ax, tuples, width=., colorup='r', colordown='g'); canvas.show() Tk.Label(root,text='Money').grid(row=,column=) defaultVar = Tk.StringVar(root)
defaultVar.set("CNY") # default value
moneyList = Tk.OptionMenu(root, defaultVar, "CNY", "USD", "EUR")
moneyList.grid(row=, column=) btnRefresh = Tk.Button(master=root, text='Refresh', command=_refresh)
btnRefresh.grid(row=, column=) Tk.mainloop()

可以用来调试的数据一例,命名为 data.csv,与上面文件同目录即可:

Date,Open,High,Low,Close
--,30.49,30.64,30.34,30.57
--,30.50,31.64,20.34,25.57
--,30.49,30.64,30.34,30.57
--,30.49,30.64,30.34,30.57
--,30.49,30.64,30.34,30.57
--,30.49,30.64,30.34,30.57
--,,30.64,30.34,30.57
--,20.49,30.64,30.34,30.57
--,10.49,30.64,30.34,30.57

python 下 tinker、matplotlib 混合编程示例一个的更多相关文章

  1. 使用 ctypes 进行 Python 和 C 的混合编程

    Python 和 C 的混合编程工具有很多,这里介绍 Python 标准库自带的 ctypes 模块的使用方法. 初识 Python 的 ctypes 要使用 C 函数,需要先将 C 编译成动态链接库 ...

  2. python下的复杂网络编程包networkx的安装及使用

    由于py3.x与工具包的兼容问题,这里采用py2.7 1.python下的复杂网络编程包networkx的使用: http://blog.sina.com.cn/s/blog_720448d30101 ...

  3. Python和C++的混合编程(使用Boost编写Python的扩展包)

    想要享受更轻松愉悦的编程,脚本语言是首选.想要更敏捷高效,c++则高山仰止.所以我一直试图在各种通用或者专用的脚本语言中将c++的优势融入其中.原来贡献过一篇<c++和js的混合编程>也是 ...

  4. Fortran与C/C++混合编程示例

    以下例子均来自网络,只是稍作了编辑,方便今后查阅. 子目录 (一) Fortran调用C语言 (二) C语言调用Fortran (三) C++ 调用Fortran (四) Fortran 调用 C++ ...

  5. python下的复杂网络编程包networkx的使用(摘抄)

    原文:http://blog.sciencenet.cn/home.php?mod=space&uid=404069&do=blog&classid=141080&vi ...

  6. python下的MySQL数据库编程

    https://www.tutorialspoint.com/python/python_database_access.htm if you need to access an Oracle dat ...

  7. Matlab与.NET基于类型安全的接口混合编程入门

    原文:[原创]Matlab与.NET基于类型安全的接口混合编程入门 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ...

  8. CUDA+OpenGL混合编程

    CUDA+OpenGL混合编程示例: #include <stdio.h> #include <stdlib.h> #include "GL\glew.h" ...

  9. 用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)

    本文为原创,如有转载,请注明出处:http://www.cnblogs.com/jackybu 前言 章节: 1.需求描述以及c/c++实现日期和月历的基本操作 2.ios实现自绘日期选择控件 3.a ...

随机推荐

  1. 基于Ruby的watir-webdriver自动化测试方案与实施(一)

    基于Ruby的watir-webdriver自动化测试方案与实施(五)   基于Ruby的watir-webdriver自动化测试方案与实施(四)   基于Ruby的watir-webdriver自动 ...

  2. SQL Server中的“最大并行度”的配置建议

    SQL Server中的最大并行度(max degree of parallelism)如何设置呢? 设置max degree of parallelism有什么好的建议和指导方针呢?在微软官方文档R ...

  3. 小心SQL SERVER 2014新特性——基数评估引起一些性能问题

    在前阵子写的一篇博文"SQL SERVER 2014 下IF EXITS 居然引起执行计划变更的案例分享"里介绍了数据库从SQL SERVER 2005升级到 SQL SERVER ...

  4. sql monitor生成不了报告& FFS hint不生效两个问题思考

    事情的发生就是这么偶然,一步步的深入才能汲取到更深入的知识~~ -------------------START------------------------------------------- ...

  5. SQL范式

    第一范式:确保每列的原子性(字段不可分). 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式. 释义: 1.每一列属性都是不可再分的属性值,确保每一列的原子性 ...

  6. [python]爬虫学习(二)

    ---恢复内容开始--- #python2 import urllib2 #python3 import urllib.request html=urllib.request.urlopen('htt ...

  7. eclipse编辑jsp保存的时候特别卡解决办法

    今天eclipse用着用着的时候,每次编辑jsp页面快捷键保存的时候要等半天才保存好,特别的卡.搞的很蛋疼.上网搜了下有解决办法 Window -> Preference -> Gener ...

  8. Vim插件管理

    一.简介 二.管理器 1)Vundle https://github.com/gmarik/vundle.git 2)vim-plug https://github.com/junegunn/vim- ...

  9. 按日子来干活——第一个Blog Day&Happy Day

    今天(周一)看到一位同仁的生活规划,感觉挺适合我,实践一下,就theo&tools day+code day+blog day,间歇性有happy day嘛~ blog day这样做,一篇bl ...

  10. 当我学完Python时我学了些什么

    本文是本人学完Python后的一遍回顾,加深理解而已,Python大神请过~ 学习Python的这几天来,觉得Python还是比较简单,容易上手的,就基本语法而言,但是有些高级特性掌握起来还是有些难度 ...