Python tkinter库之Canvas 直线等分圆弧(割圆术)

简介: Python tkinter库之Canvas 直线等分圆弧(割圆术)

直线等分圆周,分隔得越多越接近于圆:

import tkinter as tk
import pyautogui as ag
import random
from time import sleep as Delay
from math import sin
from math import cos
from math import pi
from numpy import arange as np
def Window_Open(W, H):
    X, Y = ag.size()
    winSize = str(W)+"x"+str(H)
    winPos = winSize + "+" + str((X - W) // 2)
    winPos += "+" + str((Y - H) // 2)
    win.geometry(winPos)
    win.resizable(False, False)
    title = u'桌面分辨率:' + str(X) + "x" + str(Y)
    title += ' ' * 5 + u'窗体大小:' + winSize
    win.title(title)
    win.update()
if __name__ == '__main__':
    win = tk.Tk()
    Window_Open(480,480)
    tCanvas = tk.Canvas(win, width=win.winfo_width(), height=480, bg='white')
    tCanvas.pack(side="top")
    Color = ['red','blue','green','magenta','navy','lawngreen','orange']
    Rad = [60,45,30,15,10,5]
    for i in range(len(Rad)):
        step=Rad[i]*pi/180
        for t in np(-pi,pi,step):
            x = 240+200*cos(t)
            y = 240+200*sin(t)
            for r in np(-pi,pi,step):
                x0 = 240+200*cos(r)
                y0 = 240+200*sin(r)
                c = random.choice(Color)
                coord=x,y,x0,y0
                tCanvas.create_line(coord,fill=c)
            tCanvas.update()
        Delay(2)
        if i+1!=len(Rad):
            tCanvas.create_rectangle(0,0,480,480,outline='white',fill='white')
    win.mainloop()

效果图:

image.gif


改进一下代码:只连接相邻分隔点,加快程序速度;分割圆周2^15=32768等份,按照“割圆术”来算pi的话可以精确到3.1415926了。

import tkinter as tk
import pyautogui as ag
from time import sleep as Delay
from math import sin
from math import cos
from math import pi
from numpy import arange as np
def Window_Open(W, H):
    X, Y = ag.size()
    winSize = str(W)+"x"+str(H)
    winPos = winSize + "+" + str((X - W) // 2)
    winPos += "+" + str((Y - H) // 2)
    win.geometry(winPos)
    win.resizable(False, False)
    title = u'桌面分辨率:' + str(X) + "x" + str(Y)
    title += ' ' * 5 + u'窗体大小:' + winSize
    win.title(title)
    win.update()
if __name__ == '__main__':
    win = tk.Tk()
    Window_Open(480,480)
    tCanvas = tk.Canvas(win, width=win.winfo_width(), height=480, bg='white')
    tCanvas.pack(side="top")
    c_txt=tCanvas.create_text((225, 240),text='',anchor=tk.W, font=("宋体",20))
    step = pi
    for i in range(1,15):
        step/=2
        for t in np(-pi+pi/4,pi+pi/4,step):
            x = 240+200*cos(t)
            y = 240+200*sin(t)
            x0 = 240+200*cos(t+step)
            y0 = 240+200*sin(t+step)
            coord=x,y,x0,y0
            tCanvas.create_line(coord)
        tCanvas.itemconfig(c_txt, text=str(2**(i+1)))
        tCanvas.update()
        Delay(0.5)
    tCanvas.create_text((225, 280),text='End!',anchor=tk.W, font=("宋体",20))
    tCanvas.update()
    win.mainloop()



其中:函数 itemconfig( id, text='变更的内容') 可以在后期修改文本内容

 

c_txt = tCanvas.create_text((225, 240),text='变更前的文字',anchor=tk.W, font=("宋体",20))
tCanvas.itemconfig(c_txt, text='变更后的文字')


效果图: (分到256份后已看不出变化了)

20210331211906558.gif

目录
相关文章
|
27天前
|
XML JSON 数据库
Python的标准库
Python的标准库
168 77
|
28天前
|
XML JSON 数据库
Python的标准库
Python的标准库
48 11
|
2月前
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
140 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
28天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
66 8
|
1月前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
36 4
Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Button展示图片事件)
Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Button展示图片事件)
Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Button展示图片事件)
|
存储 区块链 数据安全/隐私保护
Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Listbox/Scrollbar)
Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Listbox/Scrollbar)
Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Listbox/Scrollbar)
Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Entry/Entry的Command)
Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Entry/Entry的Command)
Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Entry/Entry的Command)
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。