海龟入门学习器核心代码_turtle introduction learning tool core

"""
    海龟入门学习器核心.py
    这个程序自制了一个"编译器",让我们能在文本框里输入代码。
    可以用来进行最基本的海龟画图入门。
    本项目需要使用部分汉化的turtle.py,否则不要输入中文代
    码,并且海龟的形状也不会旋转。
    由于本程序导入了coloradd模块,可以先在命令提示符里输入
    pip install coloradd 进行安装。为了观察演示,本程序的
    的screen的delay为100,可以通过代码动态改变它的值。
    
"""
__author__ = "李兴球"
__blog__ = "http://www.lixingqiu.com"

import os
from coloradd import *
from tkinter.scrolledtext import * 
from turtle import TurtleScreen, RawTurtle, TK

前进右转代码 = """海龟.前进(100)
海龟.右转(90)"""

彩圆盘代码 = """screen.delay(0)
c = (1,0,0)
for x in range(360):
    海龟.前进(100)
    海龟.倒退(100)
    c = coloradd(c,0.01)
    海龟.颜色(c)
    海龟.右转(1)    
    """

正方形代码 = """for x in range(4):
   海龟.前进(100)
   海龟.右转(90)
"""

十字架代码 = """for x in range(4):
   海龟.前进(100)
   海龟.倒退(100)
   海龟.右转(90)
"""

def run():
    """运行文本框内的代码"""
    tip_label.config(text='')
    code_string = editor.get("1.0",'end-1c')    
    "禁用运行按钮"
    runcmd.config(state='disabled')
    try:
       exec(code_string)               # 执行编辑器中代码
    except Exception as e:
        tip_label.config(text=e)       # 显示错误提示信息
    "启用运行按钮"
    runcmd.config(state='normal')
    
def main():
    global editor
    global cat,turtle,海龟
    global screen
    global tip_label
    global runcmd

    default_code = 正方形代码
    width,height = 1020,400
    txtwidth = 400
    root = TK.Tk()
    root.geometry(str(width)+ "x" + str(height+100))
    root.title("海龟入门学习器核心_作者:李兴球")
    cv1 = TK.Canvas(root, width=width-txtwidth+10, height=height)     
    cv1.place(x = txtwidth-10,y = 20)    

    screen = TurtleScreen(cv1)
    screen.bgcolor(1, 1, 1)
    screen.delay(100)
    
    ziti = ("黑体", 16, "normal")
    editor=ScrolledText(root,width=33,height=22,font=ziti)
    editor.insert("1.0",default_code)
    editor.place(x =5,y =20)

    # 给文本编辑器增加右键菜单
    def popup(event):
        try:
            pmenu.tk_popup(event.x_root,event.y_root,0)
        finally:
            pmenu.grab_release()
            
    pmenu = TK.Menu(editor,tearoff=0)
    
    pmenu.add_command(label='剪切',command=
                      lambda: editor.event_generate("<<Cut>>"))
    
    pmenu.add_command(label='复制',command=
                      lambda: editor.event_generate("<<Copy>>"))
    
    pmenu.add_command(label='粘粘',command=
                      lambda: editor.event_generate("<<Paste>>"))
    
    pmenu.add_command(label='全选',command=
                      lambda: editor.tag_add("sel",'1.0','end'))
    
    pmenu.add_command(label='更多',command=
                      lambda: os.system("explorer " + __blog__))
    
    editor.bind("<Button-3>",popup)    

    # 用于提示错误信息的标签
    tip_label = TK.Label(root,text='',font=('宋体',10),fg='red')
    tip_label.place(x = txtwidth+5,y = height+25)

    runcmd = TK.Button(root,text='运行',
                        command=run,font=('黑体',16),fg='navy')
    runcmd.place(x = txtwidth+5,y = height+50)

    def regoto(x,y):
        old_delay = screen.delay()
        cat.ondrag(None)
        screen.delay(0)
        cat.penup()
        cat.goto(x,y)
        cat.pendown()
        screen.delay(old_delay )
        cat.ondrag(regoto)
        
    # 支持png不需注册即可直接使用
    cat = RawTurtle(screen,visible=False) 
    cat.color("navy")
    cat.width(3)
    cat.shape("海龟红.png")
    cat.rotatemode("all")     # 新增旋转模式,角色可360度旋转
    cat.ondrag(regoto)
    cat.st()                  # 显示小猫     
    turtle = cat
    海龟 = cat
    return "EVENTLOOP"

if __name__ == '__main__':
    
    main()
    TK.mainloop()  # 进入事件循环

python海龟入门学习器核心_Turtle Introduction Learning Tool Core