天天看點

畫太極圖輔助程式_Python精靈子產品應用執行個體

畫太極圖輔助程式_Python精靈子產品應用執行個體
畫太極圖輔助程式_Python精靈子產品應用執行個體
"""
   畫太極圖教學輔助程式。
   本程式采用Screen(3)把視窗整體分為兩個大區。
   上面的是root.topframe,下面的是root.bottomframe。
   在root.bottomframe架構中,又分為左右兩個架構,
   名稱分别是lframe和rframe。
   其中lframe又分為frameup和framedown兩個架構。
   而rframe又分為rframeleft和rframeright兩個架構。
   為更好的了解,請檢視'程式的視窗分區示意圖.png'圖形。
"""
from sprites import *

def draw_filled_circle():
    """畫填充顔色的圓形"""
    x = int(xvar.get())
    y = int(yvar.get())
    radius = int(radiusvar.get())
    color = colorvar.get()
    angle = int(anglevar.get())
    pdstatus = turtle.isdown()    # 儲存是否落筆狀态    
    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()
    turtle.pencolor(color)
    screen.tracer(0,0)
    for x in range(angle*10):
        turtle.fd(radius)
        turtle.bk(radius)
        turtle.rt(0.1)                
    if pdstatus:
        turtle.pendown()
    else:
        turtle.penup()
    screen.tracer(1,0)
    
    
screen = Screen(3)              # 上下架構結構topframe和bottomframe
screen.bgcolor('#a0aea2')
screen.title('畫太極圖教學輔助程式')

turtle = Sprite(shape='turtle') # 建立一隻海龜
turtle.penup()
turtle.pensize(2)
turtle.shapesize(2,2,2)
turtle.setheading(90)
turtle.color('black','yellow')
turtle.say('你好,請單擊按鈕',10,False)

root = screen._root
root.topframe.pack(expand=1,fill='both')
root.bottomframe.pack(expand=0,fill='both',padx=10)

lframe = TK.Frame(root.bottomframe,bg='yellow')
lframe.pack(side=TK.LEFT)
rframe = TK.Frame(root.bottomframe,bg='pink')
rframe.pack(side=TK.LEFT,expand=1,fill='both')

frameup = TK.Frame(lframe,bg='blue')
frameup.pack(side=TK.TOP,expand=0,fill='both',padx=10)
framedown = TK.Frame(lframe,bg='cyan')
framedown.pack(side=TK.BOTTOM,expand=0,fill='both',padx=10,pady=10)

drawcircle = TK.Button(frameup,text='畫圓形',font=('黑體',13,'normal'),command=draw_filled_circle)
drawcircle.pack(side=TK.LEFT)

xvar = TK.StringVar(value='0')
x_lable = TK.Label(frameup,text='x:')
x_lable.pack(side=TK.LEFT)
x_cor = TK.Entry(frameup,width=5,textvariable=xvar)
x_cor.pack(side=TK.LEFT)

yvar = TK.StringVar(value='0')
y_lable = TK.Label(frameup,text='y:')
y_lable.pack(side=TK.LEFT)
y_cor = TK.Entry(frameup,width=5,textvariable=yvar)
y_cor.pack(side=TK.LEFT)

colorvar = TK.StringVar(value='black')
color_lable = TK.Label(frameup,text='顔色:')
color_lable.pack(side=TK.LEFT)
color = TK.Entry(frameup,width=8,textvariable=colorvar)
color.pack(side=TK.LEFT)

radiusvar = TK.StringVar(value='100')
radius_lable = TK.Label(frameup,text='半徑:')
radius_lable.pack(side=TK.LEFT)
radius = TK.Entry(frameup,width=8,textvariable=radiusvar)
radius.pack(side=TK.LEFT)

anglevar= TK.StringVar(value='180')
angle_lable = TK.Label(frameup,text='角度:')
angle_lable.pack(side=TK.LEFT)
angle = TK.Entry(frameup,width=8,textvariable=anglevar)
angle.pack(side=TK.LEFT)

def cmd1():
    xvar.set('0')
    yvar.set('0')
    colorvar.set('black')
    radiusvar.set('100')
    anglevar.set('180')
    draw_filled_circle()
    
def cmd2():
    xvar.set('0')
    yvar.set('0')
    colorvar.set('white')
    radiusvar.set('100')
    anglevar.set('180')
    draw_filled_circle()
    
def cmd3():
    xvar.set('0')
    yvar.set('50')
    colorvar.set('white')
    radiusvar.set('50')
    anglevar.set('360')
    draw_filled_circle()
    
def cmd4():
    xvar.set('0')
    yvar.set('-50')
    colorvar.set('black')
    radiusvar.set('50')
    anglevar.set('360')
    draw_filled_circle()
    
def cmd5():
    pdstatus = turtle.isdown()    # 儲存是否落筆狀态
    turtle.penup()
    turtle.goto(0,-50)
    turtle.dot(20,'white')    
    if pdstatus:
        turtle.pendown()
    else:
        turtle.penup()
def cmd6():
    pdstatus = turtle.isdown()    # 儲存是否落筆狀态
    turtle.penup()
    turtle.goto(0,50)
    turtle.dot(20,'black')    
    if pdstatus:
        turtle.pendown()
    else:
        turtle.penup()
     
step1 = TK.Button(framedown,text='第一步:在(0,0)坐标向右畫一個半徑為100的黑色半圓',font=('黑體',13,'normal'),command=cmd1)
step1.pack(side=TK.TOP)
step2 = TK.Button(framedown,text='第二步:在(0,0)坐标向右畫一個半徑為100的白色半圓',font=('黑體',13,'normal'),command=cmd2)
step2.pack(side=TK.TOP)
step3 = TK.Button(framedown,text='第三步:在(0,50)坐标向右畫一個半徑為50的白色半圓',font=('黑體',13,'normal'),command=cmd3)
step3.pack(side=TK.TOP)
step4 = TK.Button(framedown,text='第四步:在(0,-50)坐标向右畫一個半徑為50的黑色半圓',font=('黑體',13,'normal'),command=cmd4)
step4.pack(side=TK.TOP)
step5 = TK.Button(framedown,text='第五步:在(0,-50)坐标打一個白色的小圓點',font=('黑體',13,'normal'),command=cmd5)
step5.pack(side=TK.TOP)
step6 = TK.Button(framedown,text='第六步:在(0,50)坐标打一個黑色的小圓點',font=('黑體',13,'normal'),command=cmd6)
step6.pack(side=TK.TOP)


# 在bottomframe的右邊放幾個常用操作按鈕
rframeleft = TK.Frame(rframe,bg='dodger blue')
rframeleft.pack(side=TK.LEFT,expand=1,fill='both')
rframeright = TK.Frame(rframe,bg='green')
rframeright.pack(side=TK.LEFT,expand=1,fill='both')

clearb = TK.Button(rframeleft,text='清除',font=('黑體',13,'normal'),command=lambda:turtle.clear())
clearb.pack(side=TK.TOP)
fd10b = TK.Button(rframeleft,text='前進10',font=('黑體',13,'normal'),command=lambda:turtle.fd(10))
fd10b.pack(side=TK.TOP)
bk10b = TK.Button(rframeleft,text='倒退10',font=('黑體',13,'normal'),command=lambda:turtle.bk(10))
bk10b.pack(side=TK.TOP)
right10b = TK.Button(rframeleft,text='右轉10度',font=('黑體',13,'normal'),command=lambda:turtle.right(10))
right10b.pack(side=TK.TOP)
left10b = TK.Button(rframeleft,text='左轉10度',font=('黑體',13,'normal'),command=lambda:turtle.left(10))
left10b.pack(side=TK.TOP)
pendownb = TK.Button(rframeleft,text='落筆',font=('黑體',13,'normal'),command=lambda:turtle.pendown())
pendownb.pack(side=TK.TOP)
penupb = TK.Button(rframeleft,text='擡筆',font=('黑體',13,'normal'),command=lambda:turtle.penup())
penupb.pack(side=TK.TOP)

def gohome():
    turtle.home()
    turtle.setheading(90)
    
homeb = TK.Button(rframeright,text='回家',font=('黑體',13,'normal'),command=gohome)
homeb.pack(side=TK.TOP)
randomb = TK.Button(rframeright,text='随機位置',font=('黑體',13,'normal'),command=lambda:turtle.randompos())
randomb.pack(side=TK.TOP)

def callaskcolor():
    c = askcolor()
    turtle.color(c[1])    
colorb = TK.Button(rframeright,text='顔色',font=('黑體',13,'normal'),command=callaskcolor)
colorb.pack(side=TK.TOP)

def runcommand():
    c = screen.textinput('運作','海龜名稱為turtle,螢幕名稱為screen,請自行輸入指令:')
    if c=='' or c == None:return
    try:
        exec(c)
    except Exception as e :
        showinfo('錯誤',str(e))
    
runb = TK.Button(rframeright,text='運作',font=('黑體',13,'normal'),command=runcommand)
runb.pack(side=TK.TOP)

screen.mainloop()
           

繼續閱讀