精华内容
下载资源
问答
  • tkinter动态刷新Canvas显示图片
    千次阅读
    2021-04-24 16:43:42
    from tkinter import *
    
    from PIL import ImageTk
    
    root = Tk()
    
    numIdx = 6
    frames = [ImageTk.PhotoImage(file='./data/'+str(i)+'.jpg') for i in range(1,7)]
    
    
    def update(idx):  # 定时器函数
        frame = frames[idx]
        idx += 1  # 下一帧的序号:在0,1,2,3,4,5之间循环(共6帧)
        label.configure(image=frame)  # 显示当前帧的图片
        root.after(1000, update, idx % numIdx)  # 0.1秒(100毫秒)之后继续执行定时器函数(update)
    
    
    label = Label(root)
    label.pack()
    root.after(1000, update, 0)  # 立即启动定时器函数(update)
    root.mainloop()
    
    更多相关内容
  • 在编程中我们往往会希望能够实现这样的操作:点击Button,选择了图片,然后在窗口中的Label处显示选到的图片。那么这时候就需要如下代码: from tkinter import * from tkinter.filedialog import askopenfilename ...
  • 【python】如何在tkinter动态显示label图片

    万次阅读 多人点赞 2018-01-27 15:08:51
    在编程中我们往往会希望能够实现这样的操作:点击Button,选择了图片,然后在窗口中的Label处显示选到的图片。那么这时候就需要如下代码: from tkinter import * from tkinter.filedialog import askopenfilename ...

    在编程中我们往往会希望能够实现这样的操作:点击Button,选择了图片,然后在窗口中的Label处显示选到的图片。那么这时候就需要如下代码:

    from tkinter import *
    from tkinter.filedialog import askopenfilename
    
    def choosepic():
        path_=askopenfilename()
        path.set(path_)
        img_gif=Tkinter.PhotoImage(file='xxx.gif')
        l1.config(image=img_gif)
        
    root=Tk()
    path=StringVar()
    Button(root,text='选择图片',command=choosepic).pack()
    e1=Entry(root,state='readonly',text=path)
    e1.pack()
    l1=Label(root)
    l1.pack()
    root.mainloop

    而由于tkinter只能识别gif格式的图片,如果我们要添加jpg或者png格式的图片的话就要借用PIL进行处理。这时候代码如下:

    from tkinter import *
    from tkinter.filedialog import askopenfilename
    from PIL import Image,ImageTk
    
    def choosepic():
        path_=askopenfilename()
        path.set(path_)
        img_open = Image.open(e1.get())
        img=ImageTk.PhotoImage(img_open)
        l1.config(image=img)
        
    但这个时候会发现Label并没有如我们所期望的那样变化。

    这时候我去网上查找了相关资料,在 https://stackoverflow.com/questions/14291434/how-to-update-image-in-tkinter-label 下看到了回答者给出的解决办法:

    photo = ImageTk.PhotoImage(self.img)
    self.label1.configure(image = photo)
    self.label1.image = photo # keep a reference!
    于是在他的启发下我将代码进行了修改,之后完美解决了问题。修改后函数部分的代码如下:
    def choosepic():
        path_=askopenfilename()
        path.set(path_)
        img_open = Image.open(e1.get())
        img=ImageTk.PhotoImage(img_open)
        l1.config(image=img)
        l1.image=img #keep a reference

    而由于本人才疏学浅,对于造成这种现象的原因尚不理解。不过那名外国回答者也给出了这样修改的原因,在 http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm 上对于为何要keep a reference做出了详尽的解释。

    原文如下:



    展开全文
  • Tkinter打造GUI开发工具(49)在Tkinter窗口上动态显示matplotlib.pyplot图形 因为要在Tkinter窗口上动态显示matplotlib.pyplot图形,我首先采用了最先能想到的Tkinter的布局方法。 画图,显示到Tkinter窗口,删除...

    用Tkinter打造GUI开发工具(49)在Tkinter窗口上动态显示matplotlib.pyplot图形
    因为要在Tkinter窗口上动态显示matplotlib.pyplot图形,我首先采用了最先能想到的Tkinter的布局方法。
    画图,显示到Tkinter窗口,删除掉绘图,重新画图,并显示到Tkinter窗口。
    实现的程序如下。

    import random
    import numpy as np
    import tkinter as tk
    from tkinter import *
    import matplotlib
    import matplotlib.pyplot as plt
    from matplotlib.backends.backend_tkagg import (
        FigureCanvasTkAgg, NavigationToolbar2Tk)    ##matplotlib 3.0.2 
    from matplotlib.figure import Figure
    #独狼荷蒲qq:2775205
    #通通小白python量化群:524949939
    #电话微信:18578755056
    #通通小白python量化群:524949939
    #tkinter,pyqt,gui,Python学习群:647866213
    
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    global c,a,root
    
    #----------------------------------------------------------------------
    def drawPic():
        global c,a,root
        """
        获取GUI界面设置的参数,利用该参数绘制图片
        """
           
        #获取GUI界面上的参数
        try:
            sampleCount=int(inputEntry.get())
            r=random.randint(0,1000)
            inputEntry.delete(0,END)
            inputEntry.insert(0,str(r))
        except:
            sampleCount=50
            print( '请输入整数')
            inputEntry.delete(0,END)
            inputEntry.insert(0,'50')
               
        #清空图像,以使得前后两次绘制的图像不会重叠
        f.clf()
        a=f.add_subplot(111)
        
        #在[0,100]范围内随机生成sampleCount个数据点
        x=np.random.randint(0,100,size=sampleCount)
        y=np.random.randint(0,100,size=sampleCount)
        color=['b','r','y','g']
    
        #绘制这些随机点的散点图,颜色随机选取
        a.scatter(x,y,s=3,color=color[np.random.randint(len(color))])
        a.set_title('画图演示')
        plt.show()
    
    def drawPic2():
        global c,a,root
        """
        获取GUI界面设置的参数,利用该参数绘制图片
        """
           
        #获取GUI界面上的参数
        try:
            sampleCount=int(inputEntry.get())
            r=random.randint(0,1000)
            inputEntry.delete(0,END)
            inputEntry.insert(0,str(r))
        except:
            sampleCount=50
            print( '请输入整数')
            inputEntry.delete(0,END)
            inputEntry.insert(0,'50')
               
        #清空图像,以使得前后两次绘制的图像不会重叠
        f.clf()
        a=f.add_subplot(111)
        
        #在[0,100]范围内随机生成sampleCount个数据点
        x=np.random.randint(0,100,size=sampleCount)
        y=np.random.randint(0,100,size=sampleCount)
        color=['b','r','y','g']
    
        #绘制这些随机点的散点图,颜色随机选取
        a.scatter(x,y,s=3,color=color[np.random.randint(len(color))])
        a.set_title('画图演示 %d'%sampleCount)
        c.grid_forget()
        c=Canvas(root)
        c.grid(row=0, columnspan=3)    
        canvas = FigureCanvasTkAgg(f, master=c)
        canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1)
        #canvas.show()
        
        
    if __name__ == '__main__':
        global c,a,root
    
        root=Tk()
        #放置标签、文本框和按钮等部件,并设置文本框的默认值和按钮的事件函数
        Label(root,text='请输入样本数量:').grid(row=1,column=0)
        inputEntry=Entry(root)
        inputEntry.grid(row=1,column=1)
        inputEntry.insert(0,'50')
        
        c=Canvas(root)
        c.grid(row=0, columnspan=3)
        
        #在Tk的GUI上放置一个画布,并用.grid()来调整布局
        f = plt.Figure(figsize=(5,4), dpi=100) 
        drawPic()
        canvas = FigureCanvasTkAgg(f, master=c)
        canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1)
        
        Button(root,text='画图',command=drawPic2).grid(row=1,column=2,columnspan=3)
         
        #启动事件循环
        root.mainloop()
    

    程序运行结果如下图。
    在这里插入图片描述
    我们可以看到,快速更换图形,会引起画面的闪烁。这样的话,对用户体验不好。
    这个需要如何解决问题呢?
    我们可以使用matplotlib.animation的模块,来动态显示图形。
    在matplotlib作图中,用的是matplotlib.pyplot模块,这个模块有非常多的属性和方法,简要列举下这次用到的方法:

    matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
    

    返回fig和ax对象!

    下面我们直接给出示例代码,供读者参考。

    # -*- coding: utf-8 -*-
    import random
    import numpy as np
    import tkinter as tk
    from tkinter import *
    import matplotlib
    import matplotlib.pyplot as plt
    from matplotlib.backends.backend_tkagg import (
        FigureCanvasTkAgg, NavigationToolbar2Tk)    ##matplotlib 3.0.2 
    from matplotlib.figure import Figure
    
    #独狼荷蒲qq:2775205
    #通通小白python量化群:524949939
    #电话微信:18578755056
    #通通小白python量化群:524949939
    #tkinter,pyqt,gui,Python学习群:647866213
    
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
    global c,a,root
    
    #----------------------------------------------------------------------
    def drawPic():
        global c,a,root
        """
        获取GUI界面设置的参数,利用该参数绘制图片
        """
           
        #获取GUI界面上的参数
        try:
            sampleCount=int(inputEntry.get())
            r=random.randint(0,1000)
            inputEntry.delete(0,END)
            inputEntry.insert(0,str(r))
        except:
            sampleCount=50
            print( '请输入整数')
            inputEntry.delete(0,END)
            inputEntry.insert(0,'50')
               
        #清空图像,以使得前后两次绘制的图像不会重叠
        f.clf()
        a=f.add_subplot(111)
        
        #在[0,100]范围内随机生成sampleCount个数据点
        x=np.random.randint(0,100,size=sampleCount)
        y=np.random.randint(0,100,size=sampleCount)
        color=['b','r','y','g']
    
        #绘制这些随机点的散点图,颜色随机选取
        a.scatter(x,y,s=3,color=color[np.random.randint(len(color))])
        a.set_title('画图演示')
        plt.show()
    
    def drawPic2():
        global c,a,root
        """
        获取GUI界面设置的参数,利用该参数绘制图片
        """
           
        #获取GUI界面上的参数
        try:
            sampleCount=int(inputEntry.get())
            r=random.randint(0,1000)
            inputEntry.delete(0,END)
            inputEntry.insert(0,str(r))
        except:
            sampleCount=50
            print( '请输入整数')
            inputEntry.delete(0,END)
            inputEntry.insert(0,'50')
               
        #清空图像,以使得前后两次绘制的图像不会重叠
        f.clf()
    
        #在[0,100]范围内随机生成sampleCount个数据点
        x=np.random.randint(0,100,size=sampleCount)
        y=np.random.randint(0,100,size=sampleCount)
        color=['b','r','y','g']
    
        #绘制这些随机点的散点图,颜色随机选取
        a.scatter(x,y,s=3,color=color[np.random.randint(len(color))])
        a.set_title('画图演示 %d'%sampleCount)
        canvas = FigureCanvasTkAgg(f, master=c)
        c.update()
    
    
    import matplotlib.animation as animation
    def plt01():
        f = plt.figure(figsize=(6, 6))
        ax = plt.gca()
        ax.grid()
        ln1, = ax.plot([], [], '-', lw=2)
        ln2, = ax.plot([], [], '-', color='r', lw=2)
        theta = np.linspace(0, 2*np.pi, 100)
        r_out = 1
        r_in = 0.5
        time_template = 'time = %.1fs'
        time_text = ax.text(0.05, 0.9, '', transform=ax.transAxes)
        
        def init():
            ax.set_xlim(-2, 2)
            ax.set_ylim(-2, 2)
            x_out = [r_out*np.cos(theta[i]) for i in range(len(theta))]
            y_out = [r_out*np.sin(theta[i]) for i in range(len(theta))]
            ln1.set_data(x_out, y_out)
            return ln1,
        
        def update(i):
            x_in = [(r_out-r_in)*np.cos(theta[i])+r_in*np.cos(theta[j]) for j in range(len(theta))]
            y_in = [(r_out-r_in)*np.sin(theta[i])+r_in*np.sin(theta[j]) for j in range(len(theta))]
            ln2.set_data(x_in, y_in)
            time_text.set_text(time_template %(0.1*i))
            return ln2,
        
        c=Canvas(root)
        c.grid(row=0, columnspan=3)
        canvas = FigureCanvasTkAgg(f, master=c)
        canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1)
        ani = animation.FuncAnimation(f, update, range(len(theta)), init_func=init, interval=10)
    
        #ani.save('ls.gif', writer='imagemagick', fps=100)
        plt.show()
        plt.close() # 关窗口
    
    if __name__ == '__main__':
        global c,a,root
        #matplotlib.use('TkAgg')
        root=Tk()
        plt01()
         
        #启动事件循环
        root.mainloop()
    

    下面是程序运行的结果。
    在这里插入图片描述
    我们可以看到,现在窗口和图形不再闪烁了。一些朋友说直接用plt窗口就可以直接显示动态图形了,没必要套在一起使用。
    我们这样使用是为了第三代小白量化软件的设计,第三代图将实现实时数据K线或 分时图,需要比较连贯的图形显示方法,下来我们就用这个技术尝试一下。
    下面是我们第三代小白量化软件的截图,还没有开发完成。
    在这里插入图片描述
    可以通过下面方式与我交流:
    #独狼荷蒲qq:2775205
    #通通小白python量化群:524949939
    #电话微信:18578755056
    #通通小白python量化群:524949939
    #tkinter,pyqt,gui,Python学习群:647866213

    欢迎继续关注我的博客。
    超越自己是我的每一步!我的进步就是你的进步!

    展开全文
  • Tkinter界面动态显示变化数值

    千次阅读 热门讨论 2021-04-03 16:34:30
    例举字符串StringVar()和整型IntVar() var = tk.StringVar() 或 var = tk.IntVar() ...import tkinter as tk from tkinter import * import time if __name__=="__main__": top=tk.Tk() top.wm_title("face rec

    例举字符串StringVar()和整型IntVar()
    var = tk.StringVar() 或 var = tk.IntVar()
    var.set() #设置
    var.get() #获取

    1.整型IntVaVar()

    #IntVar() 要配合控件便使用
    import tkinter as tk
    from tkinter import *
    if __name__=="__main__":
    
        top=tk.Tk()
        top.wm_title("测试")
        top.geometry('500x300')
        
        var = tk.IntVar()	#保存为一个int类型的变量
        var.set(0)	#设置初始值
        count = 0	#通过计数来改变var值
        Label(top, text= "测试" , font = ("黑体",14),fg = "red" , width = 12,height = 2).place(x = 20,y = 40,anchor = 'nw') 
        
        while(True):
    
            count += 1
            top.update()  #不断更新
            top.after(10) 
            if count % 50 == 0:
                var.set( var.get() + 1 )#变化的值,此处修改为你的变量
                Label(top, text= str(var.get()) , font = ("黑体",14),fg = "red" , width = 12,height = 2).place(x = 120,y = 40,anchor = 'nw') 
            
        top.mainloop() 
    

    测试效果

    2、字符串类型StringVar()
    用法类似,以下程序的效果同上

    import tkinter as tk
    from tkinter import *
    import time
    if __name__=="__main__":
    
        top=tk.Tk()
        top.wm_title("测试")
        top.geometry('500x300')
        
        var = tk.StringVar()  #保存为一个string类型的变量
        var.set("0")        #设置初始值
        Label(top, text= "测试" , font = ("黑体",14),fg = "red" , width = 12,height = 2).place(x = 20,y = 40,anchor = 'nw') 
        
        while(True):
    
            time.sleep(1)
            top.update()  #不断更新
            top.after(10) 
            var.set(chr(ord(var.get())+ 1))#为了展示处字符串变化的效果,煞费苦心,#变化的值,此处修改为你的变量
            #我的只能停车收费系统用了车牌识别的API,可将不同车牌这一字符串展示界面
            Label(top, text= var.get() , font = ("黑体",14),fg = "red" , width = 12,height = 2).place(x = 120,y = 40,anchor = 'nw') 
            
        top.mainloop() 
    

    通过StringVar()和IntVar()就可以利用传感器等将变量值动态显示在界面啦!
    下面是我的停车场系统(剩余车位是整型变量;识别出的车牌号是字符串变量)
    通过光电传感器检测车位数量;显示当前时间和日期;计算时间戳算出车费;界面左边是实时的视频显示;当有车牌时,ocr文字识别车牌并显示在界面。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 今天小编就为大家分享一篇python 实现在tkinter动态显示label图片的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 在编程中我们往往会希望能够实现这样的操作:点击Button,选择了图片,...
  •  ①修复窗口闪一下问题 ②设置窗口背景图片 ### 第5课 当前时间 ①开发当前时间文本标签 ②实现当前时间的布局和样式 ### 第6课 数字时间 ①开发数字时间文本标签 ②实现数字时间的布局和样式 ③实现实时...
  • 先来看一下该方法的说明 create_image(position, **options) [#] Draws an ... 以上这篇python tkinter canvas 显示图片的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
  • 在python中gui编程有很多中选择,如果是相对简单的gui的话使用python自带的tkinter即可,但是由于tkinter没有详细的API文档,要使用起来比较麻烦,而且不够美观,如果是要求比较高的gui编程,推荐使用PyQt或者...
  • global img_ global laser_map # 地图数据,从服务器收到数据,先解码 laser_map = base64.b64decode(msg) file_image = open('build_map.png', 'wb+') ... file_image.write(laser_map) ...
  • 使用tkinter显示动态gif

    千次阅读 2021-03-05 11:11:14
    import osimport tkinter.messagebox #messagebox是普通windows编程中经常用到的,目的是显示个信息框import base64#要将编码之后的图片数据解码并保存为图片import os#我们删除图片,这个要添加进来from main_w_gif...
  • #==============================================『函库』==============================================import os #操作模块import random #随机模块import time #时间函数import tkinter as tk #GUI模块并备注...
  • Tkinter 模块(Tk 接口)是 Python 的...有时候需要在GUI中展示网络图片,下面介绍如何在tkinter中展示网络图片,以下代码适用于python3.7以上的版本。 需要用到的库如下: tkinter: GUI库 requests: 下载图片数据 io: 存
  • python – 使用Tkinter显示图像

    千次阅读 2020-12-03 23:49:07
    我正在研究一个使用Tkinter和ImageTk显示一系列图像的python程序.我无法显示多个图像.下面是一个重现错误的小型完整程序.程序直接递归搜索当前的jpg文件,并在用户按Enter键时显示它们.import Tkinter, ImageTk,os, ...
  • tkinter画布中显示图像

    千次阅读 2021-01-29 17:37:57
    我在创建画布图像时遇到一些问题,类...在我的代码是这样的from tkinter import *from random import *canvas_width = 800canvas_height = 800master = Tk()canvas = Canvas(master, width=canvas_width, height=can...
  • tkinter 绘制GUI简单明了,制作一些简单的GUI足够,目前遇到的一个问题是不能同时排列显示多幅图片(目前没找到同时显示解决方法),退而求其次,改成增加一个update按钮,每次点下按钮自动更新图片,注释掉的部分是...
  • Python tkinter的grid布局及Text动态显示

    千次阅读 2018-02-20 15:48:57
    Python tkinter的grid布局及Text动态显示 在python中gui编程有很多中选择,如果是相对简单的gui的话使用python自带的tkinter即可,但是由于tkinter没有详细的API文档,要使用起来比较麻烦,而且不够美观,如果是...
  • python Tkinter图片刷新实例

    千次阅读 2020-11-30 13:27:10
    python Tkinter图片刷新实例
  • tkinter图片窗口

    千次阅读 2020-08-28 11:15:05
    tkinter创建图片异型窗口
  • # -*- coding:utf-8 -*-from Tkinter import *from PIL import Image, ImageTkroot = Tk()image_frame = Frame(root)image_file = Image.open("F:\\Pie.jpg")im = ImageTk.PhotoImage(image_file)image_label = Labe...
  • tkinter点击按钮实现图片的切换

    千次阅读 热门讨论 2021-04-07 10:59:45
    tkinter是python的标准Tk GUI...首先先介绍一下,tkinter本身只支持gif等少数几个图片格式,如果图片并不复杂,建议直接右击图片,进入编辑,在画图界面将图片另存为gif格式就可以使用了(连png和jpeg都不支持。。。.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,713
精华内容 685
关键字:

tkinter动态显示图片