精华内容
下载资源
问答
  • python tkinter实时显示曲线

    千次阅读 2019-05-24 17:09:00
    from tkinter import *from tkinter import ttkimport time#画窗口root = Tk()root.geometry('1000x500')root.resizable(False, False)graph = Canvas(root, width=1000, height=550, background='black')#后面查点...
     
      
    from tkinter import *
    from tkinter import ttk
    import time
    #画窗口
    root = Tk()
    root.geometry('1000x500')
    root.resizable(False, False)
    graph = Canvas(root, width=1000, height=550, background='black')#后面查点和删点的时候需要画布类
    graph.grid()
    #初始化点
    tracePlot=[20,20,30,30,40,50,56,78]
    #实现动态显示
    while True:
    t = time.time()
    time.sleep(1)
    tracePlot[3]=int(t % 100) #动态变化的数据
    traceID = graph.create_line(tracePlot, fill='Red', width=2)
    root.update_idletasks()
    root.update()#更新显示
    graphItems = graph.find_all()
    for n in graphItems:
    graph.delete(n) #如果没有删除操作,旧点不消除,新点也会画在上面
     

     

    转载于:https://www.cnblogs.com/mghhzAnne/p/10919177.html

    展开全文
  • 前一章节,我们解读了tkinter内嵌Matplotlib的教程,了解其内嵌的原理,就是在tkinter创建matplotlib的画布控件,再利用其返回的画布对象进行绘图,其他附加功能,使用tkinter控件实现。 (一)对matplotlib画布的...

    目录

    前言

    前一章节,我们解读了tkinter内嵌Matplotlib的教程,了解其内嵌的原理,就是在tkinter创建matplotlib的画布控件,再利用其返回的画布对象进行绘图,其他附加功能,使用tkinter控件实现。

    (一)对matplotlib画布的封装:

    (1)说明:

    我们希望对官方的实例代码进行封装成一个函数,并返回一个画布对象,外部再调用该函数,并获取画布对象,进行绘制操作。

    (2)封装后的代码:

    """
        画布文件,实现绘图区域的显示,并返回画布的对象。
    """
    import tkinter as tk
    

    # 创建画布需要的库
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
    # 创建工具栏需要的库
    from matplotlib.backends.backend_tkagg import NavigationToolbar2Tk
    # 快捷键需要的库
    from matplotlib.backend_bases import key_press_handler
    # 导入画图常用的库
    from matplotlib.figure import Figure

    def plot_fun(root):
    “”"
    该函数实现的是内嵌画布,不负责画图,返回画布对象。
    :param root:父亲控件对象, 一般是容器控件或者窗体
    :return: 画布对象
    “”"

    # 画布的大小和分别率
    fig = Figure(dpi=100)
    axs = fig.add_subplot(111)

    (二)思路分析:

    1.需求说明:

    (1)背景:

    作为学生的我们,你是否有那么一个场景,唉……,这个数学函数好难求哦,要是知道它的图像这么画就好了。

    (2)需求:

    给出数学表达式,绘制出该数学表达式的函数曲线,一来可以观察函数的变化趋势,二来可以根据两条曲线的交点,来求解出方程的大致结果。

    2.框架的设置:

    (1)说明:

    分模块编程,向来是众人所提倡的,再python里更是很好的实现。

    再动手敲代码之前,我们先来大致的设置一下,小项目的框架。

    (2)框架图解:

    01.png

    3.文件说明:

    (1)main.py

    主程序文件,负责程序的启动与结束和窗体的大致设置。

    (2)widget.py

    控件文件,负责程序控件的创建与布局

    (3)figure.py

    画布文件,实现绘图区域的显示,并返回画布的对象。

    (4)plot.py

    绘图文件,负责函数曲线的绘制

    (三)各文件的源代码

    1.main.py

    """
        主程序文件,负责程序的启动与结束和窗体的大致设置。
    """
    

    import tkinter as tk
    import widget

    def win_w_h(root):
    “”"
    控制窗口的大小和出现的位置
    :param root:
    :return: 窗口的大小和出现的位置
    “”"

    # 设置标题:
    win.title(“数学函数绘图”)
    win = tk.Tk()
    # 大小 位置
    win.geometry("%dx%d+%d+%d" % (win_w_h(win)))

    # 创建一个容器, 没有画布时的背景
    frame1 = tk.Frame(win, bg="#c0c0c0")
    frame1.place(relx=0.00, rely=0.05, relwidth=0.62, relheight=0.89)

    # 控件区
    frame2 = tk.Frame(win, bg="#808080")
    frame2.place(relx=0.62, rely=0.05, relwidth=0.38, relheight=0.89)

    # 调用控件模块
    widget.widget_main(win, frame2)
    win.mainloop()

    2.widget.py

    """
        控件文件,负责程序控件的创建与布局
    """
    import tkinter as tk
    # 对话框所需的库
    import tkinter.messagebox as mb
    # 画布文件
    import figure
    # 绘图文件
    import plot
    

    def widget_main(win, root):
    “”"
    负责程序控件的创建与布局
    :param win: 主窗体的对象。
    :param root: 绘图区的容器对象。
    :return: 无
    “”"

    # 控件区的容器对象
    frame1 = None

    # =功能区==================
    # 绘图的功能函数
    def plot_f():
    string = entry.get()
    # 判断输入框是否为空
    if string “”:
    mb.showerror(“提示”, “没有输入值,请重新输入:”)
    else:
    # 判断是否已经创建画布
    if frame1None:
    mb.showerror(“提示”, “没有创建画布,不能画图,请先创建画布”)
    else:
    axs = figure.plot_fun(frame1)
    plot.plot_main(string, axs)

    # =控件区==========
    # 标签控件
    label = tk.Label(root,
    text=“请输入含x的数学公式:”,
    font=(“微软雅黑”, 18),
    fg=“blue”)
    label.place(relx=0.2, rely=0.1)

    3.figure.py

    """
        画布文件,实现绘图区域的显示,并返回画布的对象。
    """
    import tkinter as tk
    

    # 创建画布需要的库
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
    # 创建工具栏需要的库
    from matplotlib.backends.backend_tkagg import NavigationToolbar2Tk
    # 快捷键需要的库
    from matplotlib.backend_bases import key_press_handler
    # 导入画图常用的库
    from matplotlib.figure import Figure

    def plot_fun(root):
    “”"
    该函数实现的是内嵌画布,不负责画图,返回画布对象。
    :param root:父亲控件对象, 一般是容器控件或者窗体
    :return: 画布对象
    “”"

    # 画布的大小和分别率
    fig = Figure(dpi=100)
    axs = fig.add_subplot(111)

    4.plot.py

    """
        绘图文件,负责函数曲线的绘制
    """
    import numpy as np
    

    def plot_main(string, plt):
    “”"
    负责函数曲线的绘制
    :param string: 数学表达式
    :param plt: 画布的对象
    :return: 无
    “”"

    list_expr = []
    list_expr = string.split(",")
    string1 = []
    for sub_expr in list_expr:
    string1.append(sub_expr)
    x = np.linspace(-10, 10, 100)
    y = []
    num = string.count(‘x’)
    for i in x:
    t = (i, ) * num
    string = string.replace(“x”, “(%f)”)
    i = eval(string % t)
    y.append(i)
    plt.plot(x, y)
    plt.grid(True)
    plt.legend(labels=string1)

    (四)文件结构

    四个文件均处于同一个文件夹下,用main.py来运行。

    展开全文
  • tkinter绘制组件(13)开关

    引言

    开关组件实际上类似于复选框组件,但是两者的用途是有区别的。复选框用于在大部分的选项中选定,而开关组件则是用在开启或关闭功能上,因此有必要在TinUI增加开关组件(OnOffButton)。

    关于开关组件的样式,本来打算仿造如今UWP中的开关组件,但是遇到了一个问题:在Windows平台下,tkinter绘制曲线会产生影响视觉效果的锯齿形状,而且无法消除。然而开关组件的两侧就是半圆形,显然在TinUI中无法使用这个样式。那么我们直接使用新的开关组件样式算了。

    如果你是在Mac或Linux平台上运行,你可以自行修改TinUI在github上绘制开关组件的代码。


    布局

    函数结构

    def add_onoff(self,pos:tuple,fg='#333333',bg='#FFFFFF',onfg='#FFFFFF',onbg='#4258CC',font=('微软雅黑',12),command=None):#绘制开关控件
        '''
        pos::位置
        fg::关闭状态下的文本和边框颜色
        bg::关闭状态下的背景颜色
        onfg::开启状态下的文本颜色
        onbg::开启状态下的边框和背景颜色
        font::字体
        command::响应开关时调用函数,必须接受一个参数:True(开启)或False(关闭)
        '''
    

    样式

    TinUI绘制的开关组件大概是这个样子的:

      _____________________
     /                     \
    /         on            \
    \         off           /
     \                     /
      —————————————————————
    

    因为是文本符号标识,所以有一点粗糙。

    文本绘制

    这个命名很简单,但是为什么要着重强调呢?

    因为文本的绘制,关系到背景样式的绘制。背景样式的绘制需要依靠文本的覆盖尺寸,通过这些数据进行计算,然后才能够得出背景的绘制范围。

    state=self.create_text(pos,anchor='nw',text=state,fill=fg,font=font)
    bbox=self.bbox(state)
    d=int(bbox[3]-bbox[1])#获得绘制半径
    width=bbox[2]-bbox[0]#获取绘制宽度
    #将文本移到最大高度位置
    self.move(state,d,0)
    

    背景绘制

    通过文本的绘制,我们得到并执行了以下数据操作:

    1. 获取背景两侧的各三个关键折点
    2. 将文本移动到符合的位置

    因为背景是一个对称的六边形,因此我们不再使用画布的标准图形绘制的了,我们将直接使用create_polygon函数绘制这一个多边形。

    通过计算得到六个关键点的坐标:

    (pos[0]+d,pos[1],#左上折点
     pos[0],pos[1]+d/2,#左折点
     pos[0]+d,pos[1]+d,#左下折点
     pos[0]+d+width,pos[1]+d,#右下折点
     pos[0]+d*2+width,pos[1]+d/2,#右折点
     pos[0]+d+width,pos[1],#右上这点
     pos[0]+d,pos[1])#重新回到左上折点
    

    接着就是绘制多边形的代码:

    back=self.create_polygon((pos[0]+d,pos[1],pos[0],pos[1]+d/2,pos[0]+d,pos[1]+d,pos[0]+d+width,pos[1]+d,pos[0]+d*2+width,pos[1]+d/2,pos[0]+d+width,pos[1],pos[0]+d,pos[1]),fill=bg,outline=fg,width=2,joinstyle='miter')
    self.tkraise(state)
    

    响应开关

    在开关组件的响应事件中,我们通过三个函数实现开关的响应:

    def __on():
        #开启时响应函数调用
    def __off():
        #关闭时响应函数调用
    def __on_click(event):
        #判断开关状态,并重绘开关样式
    

    主要问题是判断开关的状态,根据之前的经验,我们可以通过画布对象样式判断开关的状态,并且重绘样式和执行相应的操作。

    def __on():
        if command!=None:
            command(True)
    def __off():
        if command!=None:
            command(False)
    def __on_click(event):
        if self.itemcget(state,'fill')==fg:#开关关闭,开启
            self.itemconfig(state,fill=onfg,text='on')
            self.move(state,width//10,0)
            self.itemconfig(back,fill=onbg,outline=onbg)
            __on()
        else:#开关开启,关闭
            self.itemconfig(state,fill=fg,text='off')
            self.move(state,0-width//10,0)
            self.itemconfig(back,fill=bg,outline=fg)
            __off()
    

    然后再为两个画布对象绑定响应事件:

    self.tag_bind(state,'<Button-1>',__on_click)
    self.tag_bind(state,'<Button-1>',__on_click)
    

    完事。

    完整代码函数

    def add_onoff(self,pos:tuple,fg='#333333',bg='#FFFFFF',onfg='#FFFFFF',onbg='#4258CC',font=('微软雅黑',12),command=None):#绘制开关控件
        def __on():
            if command!=None:
                command(True)
        def __off():
            if command!=None:
                command(False)
        def __on_click(event):
            if self.itemcget(state,'fill')==fg:
                self.itemconfig(state,fill=onfg,text='on')
                self.move(state,width//10,0)
                self.itemconfig(back,fill=onbg,outline=onbg)
                __on()
            else:
                self.itemconfig(state,fill=fg,text='off')
                self.move(state,0-width//10,0)
                self.itemconfig(back,fill=bg,outline=fg)
                __off()
        state=self.create_text(pos,anchor='nw',text=state,fill=fg,font=font)
        bbox=self.bbox(state)
        d=int(bbox[3]-bbox[1])#获得绘制半径
        width=bbox[2]-bbox[0]#获取绘制宽度
        self.move(state,d,0)
        back=self.create_polygon((pos[0]+d,pos[1],pos[0],pos[1]+d/2,pos[0]+d,pos[1]+d,pos[0]+d+width,pos[1]+d,pos[0]+d*2+width,pos[1]+d/2,pos[0]+d+width,pos[1],pos[0]+d,pos[1]),fill=bg,outline=fg,width=2,joinstyle='miter')
        self.tkraise(state)
        self.tag_bind(state,'<Button-1>',__on_click)
        self.tag_bind(state,'<Button-1>',__on_click)
        return state,back
    

    效果

    测试代码

    def test(event):
        a.title('TinUI Test')
        b.add_paragraph((50,150),'这是TinUI按钮触达的事件函数回显,此外,窗口标题也被改变、首行标题缩进减小')
        b.coords(m,100,5)
    def test1(word):
        print(word)
    def test2(event):
        ok1()
    def test3(event):
        ok2()
    def test4(event):
        from time import sleep
        for i in range(1,101):
            sleep(0.02)
            progressgoto(i)
    
    if __name__=='__main__':
        a=Tk()
        a.geometry('700x700+5+5')
    
        b=TinUI(a,bg='white')
        b.pack(fill='both',expand=True)
        m=b.add_title((600,0),'TinUI is a test project for futher tin using')
        m1=b.add_title((0,680),'test TinUI scrolled',size=2,angle=24)
        b.add_paragraph((20,290),'''     TinUI是基于tkinter画布开发的界面UI布局方案,作为tkinter拓展和TinEngine的拓展而存在。目前,TinUI尚处于开发阶段。如果想要使用完整的TinUI,敬请期待。''',
        angle=-18)
        b.add_paragraph((20,100),'下面的段落是测试画布的非平行字体显示效果,也是TinUI的简单介绍')
        b.add_button((250,450),'测试按钮',activefg='white',activebg='red',command=test,anchor='center')
        b.add_checkbutton((80,430),'允许TinUI测试',command=test1)
        b.add_label((10,220),'这是由画布TinUI绘制的Label组件')
        b.add_entry((250,300),350,30,'这里用来输入')
        b.add_separate((20,200),600)
        b.add_radiobutton((50,480),300,'sky is blue, water is blue, too. So, what is your heart',('red','blue','black'),command=test1)
        b.add_link((400,500),'TinGroup知识库','http://tinhome.baklib-free.com/')
        _,ok1=b.add_waitbar1((500,220),bg='#CCCCCC')
        b.add_button((500,270),'停止等待动画',activefg='cyan',activebg='black',command=test2)
        bu1=b.add_button((700,200),'停止点状滚动条',activefg='white',activebg='black',command=test3)[1]
        bu2=b.add_button((700,250),'nothing button 2')[1]
        bu3=b.add_button((700,300),'nothing button 3')[1]
        b.add_labelframe((bu1,bu2,bu3),'box buttons')
        _,_,ok2=b.add_waitbar2((600,400))
        b.add_combobox((600,550),text='你有多大可能去珠穆朗玛峰',content=('20%','40%','60%','80%','100%','1000%'))
        b.add_button((600,480),text='测试进度条(无事件版本)',command=test4)
        _,_,_,progressgoto=b.add_progressbar((600,510))
        b.add_table((180,630),data=(('a','space fans over the world','c'),('you\ncan','2','3'),('I','II','have a dream, then try your best to get it!')))
        b.add_paragraph((300,810),text='上面是一个表格')
        b.add_onoff((600,100))
    
        a.mainloop()
    

    最终效果

    在这里插入图片描述


    github项目

    TinUI的github项目地址

    pip下载

    pip install tinui
    

    结语

    TinUI能够实现目前这些组件的绘制已经很不错了,并且TinUI是能够运用到tkinter窗口组件绘制上的。

    下面是TinGroup应用中TinUpgrader使用TinUI绘制前后的差别。

    之前的TinUpgrader
    之前使用tkinter原生组件的TinUpgrader
    使用TinUI的TinUpgrader
    使用TinUI的TinUpgrader
    从对比上也可以看出TinUI对tkinter界面视觉效果有很大改善。

    🔆tkinter创新🔆

    展开全文
  • tkinter绘制组件(11)进度条

    引言

    进度条在程序界面中有特殊的作用,它往往使用在处理耗时操作时,告诉用户目前程序进行的程度到哪。当然,一般的进度条是无法明确告诉用户具体的进度的,因为谁也没有办法第一时间确定处理进度,这样才会发生“卡死在99%”的“尴尬去处”。

    不过,TinUI也要绘制进度条,一个能够让编写者明确设定进度的进度条,甚至能够实现进度条回退。那么,现在开工。


    构思

    为了实现进度条,我们需要解决以下问题:

    1. 能够明确设定0~100之间的整数
    2. 可以在进度条上显示我们想要显示的文本
    3. 能够通过自编函数实现进度条的动画

    其中,第一和第二个功能是滚动条本身需要具备的,第三个功能是要通过创建滚动条返回的接口方法实现的。


    布局

    函数结构

    def add_progressbar(self,pos:tuple,width=250,fg='#3B3B3B',bg='#63ADE5',percentage=True,text=''):#绘制进度条
        '''
        pos::位置
        width::宽度
        fg::文本和边框颜色
        bg::进度条颜色
        percentage::bool值,如果为True,则文本自动显示当前百分比;如果为False,则显示text内容
        text::当percentage为False时,显示的自定的文本
        '''
    

    创建边框与进度条

    不同于之前的组件绘制,因为进度条的主体是进度条本身,而不是在上面显示的文字,因此这次我们将先创建背景边框和进度条,再通过边框的位置绘制文本。

    bbox=(pos[0],pos[1],pos[0]+width,pos[1]+15)
    back=self.create_rectangle((bbox),outline=fg)#边框
    progressbar=self.create_rectangle((pos[0],pos[1],pos[0],pos[1]+15),outline=bg,fill=bg)#进度条
    

    绘制文字

    因为TinUI的进度条文本显示提供两种方法,一种是显示进度,另一种是显示自定义文字。所以,我们需要根据参数percentage来确定绘制哪一种文字。但无论是哪一种,都需要返回进度条显示文本。

    #是否显示默认文本
    if percentage==True:
        text=self.create_text((pos[0]+width//2,pos[1]),anchor='n',text='0%',fill=fg,font='微软雅黑 10')
    else:
        text=self.create_text((pos[0]+width//2,pos[1]),anchor='n',text=text,fill=fg,font='微软雅黑 10')
    

    设定进度

    在TinUI的进度条中,我们需要一个可以设定进度的操作函数,并且该函数只能允许一个参数,就是进度。

    这个参数应该能够表示为x∈[0,100]∩N

     def goto(num:int):
        if not 0<=num<=100:
            return
        #...
    

    Python中,int即整数型,接下来的数值判断即可完成参数范围判定。

    借鉴之前绘制waitbar1waitbar2combobox等组件的经验,我们可以通过函数itemconfig来设定progressbar的样式。

    但是,这有一个棘手的问题,那就是这的进度条需要改变的样式是长度,也就是矩形覆盖范围,但是覆盖范围(bbox)并不在画布对象属性设置中。那么,我们该如何改变progressbar的长度呢?

    方法也不是没有,但是得曲线救国。

    我们可以放弃改变单个画布对象的样式,因为这是不可行的。干脆,每次更新进度,我们就重新绘制进度条。具体做法如下:

    1. 删除现有进度条
    2. 通过进度设定重新绘制新的进度条
    3. 将新的进度条绑定为特定的tag标志

    那么,如何动态更新进度条,就需要用到tag这个标志来绑定我们的进度条矩形了。为了防止出现全捆绑现象,我们会将边框的ID也加入到标志名称中。

    def goto(num:int):
        if not 0<=num<=100:
            return
        pw=width*num//100
        self.delete(pro_tagname)
        new_progressbar=self.create_rectangle((pos[0],pos[1],pos[0]+pw,pos[1]+15),fill=bg,outline=bg)
        self.lower(new_progressbar)
        #将标志名称绑定到新进度条
        self.addtag_withtag(pro_tagname,new_progressbar)
        #是否更新默认文字
        if percentage==True:
            self.itemconfig(text,text=str(num)+'%')
        self.update()
    #...
    #生成唯一tag标识
    pro_tagname='progressbar>'+str(back)
    self.addtag_withtag(progressbar,pro_tagname)
    #...
    

    到此,我们完成了在TinUI中绘制进度条的工作

    完整代码函数

    def add_progressbar(self,pos:tuple,width=250,fg='#3B3B3B',bg='#63ADE5',percentage=True,text=''):#绘制进度条
        def goto(num:int):
            if not 0<=num<=100:
                return
            pw=width*num//100
            self.delete(pro_tagname)
            new_progressbar=self.create_rectangle((pos[0],pos[1],pos[0]+pw,pos[1]+15),fill=bg,outline=bg)
            self.lower(new_progressbar)
            self.addtag_withtag(pro_tagname,new_progressbar)
            if percentage==True:
                self.itemconfig(text,text=str(num)+'%')
            self.update()
        bbox=(pos[0],pos[1],pos[0]+width,pos[1]+15)
        back=self.create_rectangle((bbox),outline=fg)
        progressbar=self.create_rectangle((pos[0],pos[1],pos[0],pos[1]+15),outline=bg,fill=bg)
        pro_tagname='progressbar>'+str(back)
        self.addtag_withtag(progressbar,pro_tagname)
        #是否显示默认文本
        if percentage==True:
            text=self.create_text((pos[0]+width//2,pos[1]),anchor='n',text='0%',fill=fg,font='微软雅黑 10')
        else:
            text=self.create_text((pos[0]+width//2,pos[1]),anchor='n',text=text,fill=fg,font='微软雅黑 10')
        return back,pro_tagname,text,goto
    

    效果

    测试代码

    def test(event):
        a.title('TinUI Test')
        b.add_paragraph((50,150),'这是TinUI按钮触达的事件函数回显,此外,窗口标题也被改变、首行标题缩进减小')
        b.coords(m,100,5)
    def test1(word):
        print(word)
    def test2(event):
        ok1()
    def test3(event):
        ok2()
    def test4(event):
        from time import sleep
        for i in range(1,101):
            sleep(0.02)
            progressgoto(i)
    
    if __name__=='__main__':
        a=Tk()
        a.geometry('700x700+5+5')
    
        b=TinUI(a,bg='white')
        b.pack(fill='both',expand=True)
        m=b.add_title((600,0),'TinUI is a test project for futher tin using')
        m1=b.add_title((0,680),'test TinUI scrolled',size=2,angle=24)
        b.add_paragraph((20,290),'''     TinUI是基于tkinter画布开发的界面UI布局方案,作为tkinter拓展和TinEngine的拓展而存在。目前,TinUI尚处于开发阶段。如果想要使用完整的TinUI,敬请期待。''',
        angle=-18)
        b.add_paragraph((20,100),'下面的段落是测试画布的非平行字体显示效果,也是TinUI的简单介绍')
        b.add_button((250,450),'测试按钮',activefg='white',activebg='red',command=test,anchor='center')
        b.add_checkbutton((80,430),'允许TinUI测试',command=test1)
        b.add_label((10,220),'这是由画布TinUI绘制的Label组件')
        b.add_entry((250,300),350,30,'这里用来输入')
        b.add_separate((20,200),600)
        b.add_radiobutton((50,480),300,'sky is blue, water is blue, too. So, what is your heart',('red','blue','black'),command=test1)
        b.add_link((400,500),'TinGroup知识库','http://tinhome.baklib-free.com/')
        _,ok1=b.add_waitbar1((500,220),bg='lightgreen')
        b.add_button((500,270),'停止等待动画',activefg='cyan',activebg='black',command=test2)
        bu1=b.add_button((700,200),'停止点状滚动条',activefg='white',activebg='black',command=test3)[1]
        bu2=b.add_button((700,250),'nothing button 2')[1]
        bu3=b.add_button((700,300),'nothing button 3')[1]
        b.add_labelframe((bu1,bu2,bu3),'box buttons')
        _,_,ok2=b.add_waitbar2((600,400),fg='blue')
        b.add_combobox((600,550),text='中考成绩预测',content=('730','740','750','760','770','780'))
        b.add_button((600,480),text='测试进度条(无事件版本)',command=test4)
        _,_,_,progressgoto=b.add_progressbar((600,510))
    
        a.mainloop()
    

    函数test4就是实现进度条在指定范围、以指定速度、运转到指定进度的一个动态例子。

    最终效果

    在这里插入图片描述


    2021-8-22新样式

    在这里插入图片描述

    2022-1-22新样式

    在这里插入图片描述


    github项目

    TinUI的github项目地址

    pip下载

    pip install tinui
    

    结语

    TinUI现在能够绘制等待框和进度条等动态样式组件,但是具体使用需要配合多线程和多进程来使用。因为tkinter自身的限制,当after使用多了以后,界面也是会卡住的。

    🔆tkinter创新🔆

    展开全文
  • 关于如何绘制动态的弧形动态的曲线,因为重点是展示数据动态曲线性,一开始时是打算用matplotlib和pyqt5,但是到后面发现没有必要特地加上pyqt5,于是过程中就只用了matplotlab,完成所需要的数据展示了。那么,正题...
  • Python tkinter和Matplotlib绘制3D动态图像

    千次阅读 2020-04-20 07:12:00
    一、目标 1、将Matplotlib绘制的3D图像显示在tkinter定义的界面中,便于设计更友好的程序界面。如下图所示。 2、图像动态更新 3、关闭程序时安全退出 二、实现方法 1、使用tkinter的frame组件作为绘图的容器; 2、...
  • 主要介绍了Python实现在tkinter中使用matplotlib绘制图形的方法,结合实例形式分析了Python使用tkinter与matplotlib进行正弦曲线图形绘制的相关操作技巧,需要的朋友可以参考下
  • 我用Python(Tkinter)写了一个代码,它是绘制一个3度贝塞尔曲线,并且它是工作的。。。。kinda.我的问题是:我如何直接从键盘输入x和y坐标为控制点,而不是先x后y(像我的代码)。第二个问题是关于参数(u或t值。通常它是...
  • 分类目录——tkinter 先看效果 其中蓝色区域为一块画布(Canvas)区域,在画布上放置了图片,画了圆形、方形、扇形;下方的按钮可以调用方法移动左边的矩形 Canvas应用实例 canvas = tk.Canvas(window, bg='blue', ...
  • 将Matplotlib绘制的图显示到Tkinter中(详细教程)

    万次阅读 多人点赞 2019-06-13 20:56:38
    运行环境:win10、python3 用Matplotlib自定义绘制图形 三次贝塞尔曲线有四个控制点,曲线在起始点与1,2两个点相切,在结束点与3,4两个点相切。 from matplotlib.path import Path from matplotlib.patc...
  • 首先我们尝试在弧线的基础上加一道转角度的递归 :import turtleimport mathbob = turtle.Turtle()#创造一个turtle object名为bobprint(bob)#绘制这个objectdef arc(t,r,angle):arc_length = 2 *math.pi ...
  • python绘制动态曲线

    万次阅读 2018-08-13 17:54:34
    从txt种获取数据 并且通过动态曲线显示 import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation import time # Fixing random state for reproducibility np.random....
  • 绘制科赫曲线

    千次阅读 2019-10-14 17:44:57
    绘制科赫曲线,并改变曲线绘制的速度、绘制方向和颜色 阶数:1-6阶 import turtle # 引入决解问题需要的工具——turtle作图包 # 定义turtle画笔和画布的参数 def huabi(i,h): if i==6: turtle.pencolor('red'...
  • python 中使用递归绘制koch曲线koch曲线是由瑞典数学家Helge von Koch,在1904年发表的“从初等几何构造的一条没有切线的连续曲线”的论文中提出的。它的描述如下:1、指定一条线段的长度(L);2、将这条线段三等分...
  • python绘制科赫曲线

    2021-11-13 17:09:26
    关于科赫曲线的变换: 1、将线段分成相等的三部分,ab,bc,cd 2、以bc为底,向内或向外做一个正三角形bcm,擦除bc 3、对ab,bm,mc,cd继续1、2操作 我们可以得出以下规律 可以看出,N阶的都是在N-1阶的基础上...
  • 最近趁闲自学了tkinter,在用canvas中的create_arc画弧线时,一直...create_arc画弧线的机制是在给定的矩形内创造一个椭圆,然后通过start和extent参数来分割出你想要的曲线部分,如: from tkinter import * root =
  • 通常情况下,在Python中可以通过Matplotlib来进行绘制图像。然而该绘制过程是静态的,也就是每次调整完参数需要重新调用绘图语句进行绘图展示。我们的目标是结合GUI组件,实现对模型参数的交互式绘图。这样,可以在...
  • 对于贝塞尔曲线而言,其特点在于第一个控制点恰好是曲线的起点,最后一个控制点是曲线的终点,其他控制点并不在曲线上,而是起到控制曲线形状的作用。另外,曲线的起点处与前两个控制点构成的线段相切,而曲线的终点...
  • [Tkinter 教程08] Canvas 图形绘制

    万次阅读 多人点赞 2017-03-06 22:03:15
    小练习简介Canvas 为 Tkinter 提供了绘图功能. 其提供的图形组件包括 线形, 圆形, 图片, 甚至其他控件. Canvas 控件为绘制图形图表, 编辑图形, 自定义控件提供了可能. 在第一个例子里, 我们将演示如何画一条直线. ...
  • 基本概念科赫曲线:科赫曲线是一种像雪花的几何曲线,所以又称为雪花曲线,它是de Rham曲线的特例。科赫曲线是出现在海里格·冯·科赫的论文《关于一条连续而无切线,可由初等几何构作的曲线》(1904年,法语原题:...
  • plt.xlabel('Date') plt.ylabel('Number') plt.show() 到此这篇关于利用python绘制数据曲线图的实现的文章就介绍到这了,更多相关python 数据曲线图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家...
  • python画曲线图-python画曲线

    千次阅读 2020-10-28 22:54:00
    广告关闭腾讯云双11爆品提前享,...桃心形曲线的方程如下 matlab绘制效果如下:? matlab程序如下。 clccleart = -10:0.01:10x = 16*(sin(t)). ^3y = 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)%ylim()%xlim()grid ...
  • 使用Python的tkinter和matplotlib模块在GUI界面中绘制PID交互曲线,用以观察各参数对PID控制的影响 最近学PID控制,想要直观的观察PID各部分参数对PID控制的影响,就用Python写了一个界面,如下: pid_GUI.py #!/...
  • 三次贝塞尔曲线有四个控制点,曲线在起始点与1,2两个点相切,在结束点与3,4两个点相切。 from matplotlib.path import Path from matplotlib.patches import PathPatch from matplotlib import pyplot as plt f...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 844
精华内容 337
关键字:

tkinter绘制曲线