2017-09-15 51 views
3

我已經使用Python中的turtle創建了一個簡單的按鈕程序。 它很可能非常草率,但在IDLE中完美運行。但是,當試圖在沒有IDLE的情況下加載它時,只需繪製兩個按鈕然後退出程序。我仔細查看了代碼,找不到原因。Python龜程序在IDLE中不起作用

此處,我認爲這個問題是(最後幾行):

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

main() 

但是我不能完全肯定。這是完整的程序以防萬一。

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() 

我希望有一個解決方案。

乾杯。

+2

請添加您的代碼,而不是一些Web服務,並提供[MCVE(https://stackoverflow.com/help/mcve) – albert

+1

我強烈建議你停止你唱'從烏龜進口*',而不是'導入烏龜',並通過'turtle.penup()'等使用函數。現在可能會感到愚蠢的反覆寫同樣的事情到處都是,但你的未來自我會感謝你。導入很多像這樣的短名稱會很快變得非常混亂。 –

回答

1

你說的沒錯,問題在於main()功能,嘗試添加一個turtle.mainloop()調用結束:

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

main() 

如果不爲你工作,你也可以試試turtle.done()功能,雖然我建議你先嚐試mainloop():使用一個代碼塊鏈接的

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

main()