如何在Python中点击后隐藏按钮

问题描述:

我想知道如何在点击后隐藏我的开始按钮,以便如果用户不小心点击了快乐,他们不会点击按钮,导致更多的气泡出现在屏幕上。下面是使用Python 3.3编码的一个片段:如何在Python中点击后隐藏按钮

from tkinter import * 
    import random 

    from tkinter.messagebox import showinfo 

    class BFrame: 

     def __init__(self, root, name): 
      self.name = name 
      root.title("Math Bubbles") 
      self.bubbles = {} # this will hold bubbles ids, positions and velocities 
      self.score = 0 
      Button(root, text="Start", width=8, bg="Pink", command=self.make_bubbles).pack() # This button starts the game, making the bubbles move across the screen 
      Button(root, text="Quit", width=8, bg="Yellow",command=quit).pack() 
      self.canvas = Canvas(root, width=800, height=650, bg='#afeeee') 
      self.canvas.create_text(400, 30, fill="darkblue", font="Times 20 italic bold", text="Click the bubbles that are answers in the two times tables.") 
      #Shows score at beginning of the game 
      self.current_score = self.canvas.create_text(200, 60, fill="darkblue", font="Times 15 italic bold", text="Your score is: 0") 
      self.canvas.pack() 



def make_bubbles(self): 
    for each_no in range(1, 21): 
     xval = random.randint(5, 765) 
     yval = random.randint(5, 615) 
     COLOURS = ('#00ff7f', '#ffff00', '#ee82ee', '#ff69b4', '#fff0f5') # CAPS represents a constant variable 
     colour = random.choice(COLOURS) # This picks a colour randomly 
     oval_id = self.canvas.create_oval(xval, yval, xval + 60, yval + 60,fill=colour, outline="#000000", width=5, tags="bubble") 
     text_id = self.canvas.create_text(xval + 30, yval + 30, text=each_no, tags="bubble") 
     self.canvas.tag_bind("bubble", "<Button-1>", lambda x: self.click(x)) 
     self.bubbles[oval_id] = (xval, yval, 0, 0, each_no, text_id) # add bubbles to dictionary 

     def click(self, event): 
      if self.canvas.find_withtag(CURRENT): 
       item_uid = event.widget.find_closest(event.x, event.y)[0] 
       is_even = False 
       try: # clicked oval 
        self.bubbles[item_uid] 
       except KeyError: # clicked oval 
        for key, value in self.bubbles.iteritems(): 
         if item_uid == value[5]: # comparing to text_id 
          if value[4] % 2 == 0: 
           is_even = True 
          self.canvas.delete(key) # deleting oval 
          self.canvas.delete(item_uid) # deleting text 
       else: 
        if self.bubbles[item_uid][4] % 2 == 0: 
         is_even = True 
        self.canvas.delete(item_uid) # deleting oval 
        self.canvas.delete(self.bubbles[item_uid][5]) # deleting text 

       if is_even: 
        self.score += 1 
       else: 
        self.score -= 1 
        showinfo("Oh no!", "%s! You clicked the wrong bubble, please start again." % self.name) 

       if self.score == 10: 
        #Tells user You won! if score is 10 
        showinfo("Winner", "You won %s!" % self.name) 


      self.canvas.delete(self.current_score) 
      #Shows updated score on canvas 
      self.current_score = self.canvas.create_text(200, 60, fill="darkblue", font="Times 15 italic bold", text="Your score is: %s"%self.score) 
+0

您可以让按钮的处理程序将按钮的状态更改为“DISABLED” – mgilson

您可以切换在处理程序的按钮的状态:

(python2.7代码,但它应该翻译成漂亮py3k容易)。