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