2017-09-15 5 views
3

Ich habe ein einfaches Button-Programm mit Turtle in Python erstellt. Es ist sehr wahrscheinlich sehr schlampig, aber funktioniert perfekt in IDLE. Wenn Sie jedoch versuchen, es ohne IDLE zu laden, zeichnet es nur die zwei Schaltflächen und beendet dann das Programm. Ich habe ohne Erfolg über den Code nach der Ursache gesucht.Python Turtle-Programm funktioniert in IDLE nicht

Hier ist, wo ich denke, das Problem ist (die letzten paar Zeilen):

def main(): 
    onscreenclick(Button.clicked,1) 

main() 

Allerdings bin ich nicht ganz sicher. Hier ist das volle Programm nur für den Fall.

from turtle import * 
bgcolor('skyblue') 
penup() 
left(90) 
speed(0) 
hideturtle() 
buttonlist = [] 

class Button: 
    x_click = 0 
    y_click = 0 
    def __init__(self, x, y, size, color, text, fontsize, fixvalue): 
    self.x = x 
    self.y = y 
    self.size = size 
    self.color = color 
    self.text = text 
    self.fontsize = fontsize 
    self.fixvalue = fixvalue 
    def showButton(self): 
    goto(self.x , self.y) 
    pendown() 
    fillcolor(self.color) 
    begin_fill() 
    for i in range(4): 
     forward(self.size) 
     right(90) 
    end_fill() 
    penup() 
    goto((self.x+self.size/2),self.y+self.fixvalue) 
    right(90) 
    write(self.text, move=False, align="center", font=("Arial", self.fontsize, "normal")) 
    left(90) 
    def hideButton(self): 
    goto(self.x, self.y) 
    fillcolor('skyblue') 
    pencolor('skyblue') 
    pendown() 
    begin_fill() 
    for i in range(4): 
     forward(self.size) 
     right(90) 
    end_fill() 
    penup() 
    pencolor('black') 
    def checkClick(self): 
    if self.x < Button.x_click: 
     if Button.x_click < (self.x+self.size): 
     if self.y < Button.y_click: 
      if Button.y_click < (self.y+self.size): 
      return 1 

    def clicked(x, y): 
    Button.x_click = x 
    Button.y_click = y 

    if home_1.checkClick() == 1: 
     home_1.hideButton() 
    if home_2.checkClick() == 1: 
     home_2.hideButton() 

home_1 = Button(10,10,100,'red','←',45,20) 
home_2 = Button(-50,-50,50,'blue','Hello!',10,15) 
Button.showButton(home_1) 
Button.showButton(home_2) 

def main(): 
    onscreenclick(Button.clicked,1) 

main() 

Ich hoffe, es gibt eine Lösung.

Prost.

+2

Bitte fügen Sie Ihren Code, um einen Codeblock anstelle eines Links zu einem gewissen Web-Service und bieten eine [MCVE] (https://stackoverflow.com/help/mcve) unter Verwendung von – albert

+1

Ich empfehle Ihnen dringend, Sie zu stoppen singe den 'from turtle import *' und stattdessen tue einfach 'import turtle' und nutze die Funktionen über' turtle.penup() 'etc. Es könnte sich jetzt blöd anfühlen, überall und immer wieder dasselbe zu schreiben, aber dein zukünftiges Selbst werde ich dir danken. So viele kurze Namen zu importieren wird sehr schnell sehr verwirrend. –

Antwort

1

Du hast Recht, dass das Problem in der main() Funktion liegt, versuchen Sie einen turtle.mainloop() Aufruf zum Ende hinzufügen:

def main(): 
    onscreenclick(Button.clicked,1) 
    mainloop() 

main() 

Wenn das nicht für Sie arbeiten, können Sie auch die Funktion turtle.done() versuchen können, obwohl ich empfehle Ihnen mainloop() zuerst versuchen:

def main(): 
    onscreenclick(Button.clicked,1) 
    done() 

main()