Python-Turtle-有效地重建按钮

时间:2014-12-13 17:07:01

标签: python turtle-graphics

我正在使用海龟模块进行任务,我正在创建一个基于文本的游戏。我对一般的代码和python都很陌生,我想模拟使用鼠标按下的按钮。通过查看其他线程,我非常确定可以通过将乌龟移动到鼠标点击然后根据python是否在指定区域内执行操作,这将在视觉上显示为按钮。由于我没有经验,我不确定如何指定坐标并检查乌龟是否在其中。

以下是我的开始:

from turtle import *
import turtle as t
from time import sleep
import time as time

pen= Turtle()
bt=pen.clone()
bt.pu()
bt.setpos(-200,-200)
menu=0

pen.pu()
pen.setpos(0,50)
pen.write("1.Option1",align="center",font=("Chiller",40))
time.sleep(0.5)

pen.setpos(0,-30)
pen.write("2.Option2",align="center",font=("Chiller",40))
time.sleep(0.5)

pen.setpos(0,-110)
pen.write("3.Option3",align="center",font=("Chiller",40))
menu=1

while menu==1:
    screen= Screen()
    screen.onscreenclick(bt.goto)
    bt.getscreen()._root.mainloop()
while menu==1:
    if bt.xcor>(-200) and bt.xcor<(200):
        if bt.ycor>(20) and bt.ycor<(80):
            pen.clear()
            pen.write("option 1")
        elif bt.ycor>(-60) and bt.ycor<(0):
            pen.clear()
            pen.write("option 2")
        elif bt.ycor>(-140) and bt.ycor<(-80):
            pen.clear()
            pen.write("option 3")

正如我所说,白痴语言会受到赞赏;谁能告诉我为什么这不起作用并可能提供解决方案。另外,我不完全确定&#34; screen = Screen()&#34;我确实在不同的线程中找到了它并实现了它......

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:0)

是的,这可以做到。 (是否应该完成另一个问题。)下面是演示代码,当您单击以下三个选项之一时,它会更改屏幕底部的文本:

from turtle import Turtle, Screen

FONTSIZE = 40
FONT = ("Ariel", FONTSIZE, "normal")

turtle = Turtle(visible=False)
turtle.penup()

turtle.setpos(0, FONTSIZE*2 - FONTSIZE/2)
turtle.write("1.Option1", align="center", font=FONT)

turtle.setpos(0, -FONTSIZE/2)
turtle.write("2.Option2", align="center", font=FONT)

turtle.setpos(0, -FONTSIZE*2 - FONTSIZE/2)
turtle.write("3.Option3", align="center", font=FONT)

turtle.setpos(-200, -200)
turtle.write("Select an Option", font=FONT)

def onclick_handler(x, y):
    if -100 < x < 100:
        if FONTSIZE < y < FONTSIZE*3:
            turtle.undo()
            turtle.write("Option 1", font=FONT)
        elif -FONTSIZE < y < FONTSIZE:
            turtle.undo()
            turtle.write("Option 2", font=FONT)
        elif -FONTSIZE*3 < y < -FONTSIZE:
            turtle.undo()
            turtle.write("Option 3", font=FONT)

screen = Screen()
screen.onscreenclick(onclick_handler)
screen.mainloop()

你的原始代码中有一个无限循环,这很复杂 - 你不应该在海龟程序中有无限循环。不要让你的点击处理程序移动乌龟,然后让无限循环检测乌龟的菜单位置,你可以简单地让你的点击处理程序确定点击菜单的位置,避免一些复杂性。

除此之外,硬编码数字总是很麻烦,你应该总是试图避免它们。计算你能做什么,用恒定变量记录你能做什么。