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

目录
相关文章
|
2月前
|
存储 人工智能 测试技术
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
本文介绍如何使用LangChain结合DeepSeek实现多轮对话,测开人员可借此自动生成测试用例,提升自动化测试效率。
397 125
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
|
2月前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
181 0
|
1月前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
175 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
1月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
276 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
3月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
211 18
|
Python
pip批量安装Python库 requirement.txt 离线环境无互联网环境下pip安装Python库
pip批量安装Python库 requirement.txt 离线环境无互联网环境下pip安装Python库
782 3
|
开发工具 git Python
安装和使用`libnum`是一个用于数字理论函数的Python库
【6月更文挑战第19天】`libnum`是Python的数字理论函数库。安装可通过`git clone`,进入目录后运行`python setup.py install`,也可用`pip install libnum`。示例:使用`int_to_hex`将十进制数42转换为十六进制字符串'2a'。注意,信息可能已过时,应查最新文档以确保准确性。如遇问题,参考GitHub仓库或寻求社区帮助。
328 1
确保你已经安装了`python-barcode`库。如果没有,可以通过pip来安装:
确保你已经安装了`python-barcode`库。如果没有,可以通过pip来安装:
|
Python
Anaconda虚拟环境安装Python库与Spyder
本文介绍在Anaconda中,为Python的虚拟环境安装第三方库与Spyder等配套软件的方法~
708 1
Anaconda虚拟环境安装Python库与Spyder
|
Linux Python
不可出外网的主机如何快速、方便、优雅的安装Python库?
不可出外网的主机如何快速、方便、优雅的安装Python库?
638 0
不可出外网的主机如何快速、方便、优雅的安装Python库?

推荐镜像

更多