python动态换图tkinter库的Canvas画布组件

之前做统计彩票程序,然后想做个窗口程序在窗口里动态的想换哪个统计图表就看哪个,结果半天都做不好,网上各种混乱的代码几乎没一个能用的,最后干脆曲线救国,统计完之后统计视图自动保存成图片,这个比较简单,用savefig就行,然后想看哪张图就读取图片显示到窗口的画布上.

但是动态的在画布上换图很不容易,用了我一天的时间试了无数的代码终于找到了合适的,赶紧贴出来供大家分享.

我的代码写的比较烂,大家凑合看吧.

# -*- coding: utf-8 -*-
"""
Created on Mon May 13 22:27:47 2019
引入工具栏按钮
能换图了
把四种统计图都做了上来
@author: Administrator
"""
from PIL import Image, ImageTk
import matplotlib.pyplot as plt
from tkinter import *
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,NavigationToolbar2Tk #NavigationToolbar2TkAgg
import matplotlib
matplotlib.use('Agg')
from matplotlib.pyplot import plot,savefig
from PIL import Image, ImageTk
from tkinter import ttk

plt.rcParams['font.family'] = 'SimHei' ## 设置字体

root = tk.Tk() # 初始化Tk()
root.title("排列3彩票统计程序")    # 设置窗口标题
root.geometry("1920x1010+0+0")    # 设置窗口大小 注意:是x 不是*
root.resizable(width=True, height=True) # 设置窗口是否可以变化长/宽,False不可变,True可变,默认为True
root['background']='white'


def tp(event):
    canvas.create_image(-50,0,anchor=NW,image=img_png)
def tp2(event):
    canvas.create_image(-50,0,anchor=NW,image=img_png2)
def tp3(event):
    canvas.create_image(-50,0,anchor=NW,image=img_png3)
def tp4(event):
    canvas.create_image(-50,0,anchor=NW,image=img_png4)

# 生成工具条
toolframe = tk.Frame(root, height=20, bg='#F7EED6')#, relief=tk.RAISED)
frame = tk.Frame(toolframe, bg='#F7EED6')
canvas = tk.Canvas(root,bg='white')
canvas.pack(fill=tk.BOTH, expand=1)
bt=ttk.Button(frame, width=20,text='0到9出现次数')
bt.bind("",tp)
bt.grid(row=0, column=0, padx=1, pady=1, sticky=tk.E)
img_open = Image.open('0到9出现次数.jpg')
img_png = ImageTk.PhotoImage(img_open)
btk=ttk.Button(frame, width=20,text='K线图')
btk.bind("",tp2)
btk.grid(row=0, column=1, padx=1, pady=1, sticky=tk.E)
img_open2 = Image.open('k线图.jpg')
img_png2 = ImageTk.PhotoImage(img_open2)
btdx=ttk.Button(frame, width=20,text='大小统计')
btdx.bind("",tp3)
btdx.grid(row=0, column=2, padx=1, pady=1, sticky=tk.E)
img_open3 = Image.open('大小走势图.jpg')
img_png3 = ImageTk.PhotoImage(img_open3)
btjo=ttk.Button(frame, width=20,text='奇偶统计')
btjo.bind("",tp4)
btjo.grid(row=0, column=3, padx=1, pady=1, sticky=tk.E)
img_open4 = Image.open('奇偶走势图.jpg')
img_png4 = ImageTk.PhotoImage(img_open4)
frame.pack(side=tk.LEFT)
toolframe.pack(fill=tk.X)


root.mainloop() # 进入消息循环

建立窗口,窗口上有一个画布和几个按钮控件,想看哪张图就点哪个按钮,可以动态给画布换图,感觉精髓就是自定义函数加了个event参数,按钮控件里不要用command命令,读取图片要放在函数外操作,函数里边只放一条create_image命令

python动态换图tkinter库的Canvas画布组件_第1张图片
python动态换图tkinter库的Canvas画布组件_第2张图片
python动态换图tkinter库的Canvas画布组件_第3张图片

你可能感兴趣的:(Python)