""" 海龟入门学习器核心.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() # 进入事件循环
李兴球
李兴球的博客是Python创意编程原创博客