2013-07-19 22 views
1

我想將分數顯示在畫布上,但目前爲止無濟於事。我以爲我可以使用:Python:如何在畫布上獲得分數板

self.canvas.create_text(200, 60, fill="darkblue", font="Times 15 italic bold", text="Your score is:",self.score) 

沒有工作不幸,所以我怎麼得到的分數顯示在畫布上?還想知道如何讓消息框彈出「你贏了!」當得分= 10。最後,如何得到一個消息框彈出說:「你輸了,如果分數< 10並沒有在畫布偶數上

到目前爲止的代碼使用Python 3.3:

 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 the text 
       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 

      if self.score == 10: 
       print ("You won") 

     print (self.score) 

回答

1

這是一個有趣的遊戲!我在下面給出的腳本向你展示瞭如何做你想做的一切(顯示當前得分和顯示消息)。與他們上面##線是我補充說:

from tkinter import * 
import random 
## 
from tkinter.messagebox import showinfo 

class BubbleFrame: 

    def __init__(self, root): 
     root.title("Math Bubbles") 
     self.bubbles = {} 
     self.score = 0 
     Button(root, text="Start", width=8, command=self.initialize_bubbles).pack() # This button starts the game, making the bubbles move across the screen 
     Button(root, text="Quit", width=8, 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 multiples of two.") 
     ## 
     self.current_score = self.canvas.create_text(200, 60, fill="darkblue", font="Times 15 italic bold", text="Your score is:") 
     self.canvas.pack() 

    def initialize_bubbles(self): 
     for each_no in range(1, 21): 
      xval = random.randint(5, 765) 
      yval = random.randint(5, 615) 
      oval_id = self.canvas.create_oval(xval, yval, xval + 30, yval + 30,fill="#00ffff", outline="#00bfff", width=5, tags="bubble") 
      text_id = self.canvas.create_text(xval + 15, yval + 15, 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) 

    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: 
       self.bubbles[item_uid] 
      except KeyError: 
       for key, value in self.bubbles.iteritems(): 
        if item_uid == value[5]: 
         if value[4] % 2 == 0: 
          is_even = True 
         self.canvas.delete(key) 
         self.canvas.delete(item_uid) 
      else: 
       if self.bubbles[item_uid][4] % 2 == 0: 
        is_even = True 
       self.canvas.delete(item_uid) 
       self.canvas.delete(self.bubbles[item_uid][5]) 
      if is_even: 
       self.score += 1 
      else: 
       self.score -= 1 

      if self.score == 10: 
       ## 
       showinfo("Winner", "You won!") 
     ## 
     self.canvas.delete(self.current_score) 
     ## 
     self.current_score = self.canvas.create_text(200, 60, fill="darkblue", font="Times 15 italic bold", text="Your score is: %s"%self.score) 

    def loop(self, root): 
     for oval_id, (x, y, dx, dy, each_no, text_id) in self.bubbles.items(): 
      dx += random.randint(-1, 1) 
      dy += random.randint(-1, 1) 
      dx, dy = max(-5, min(dx, 5)), max(-5, min(dy, 5)) 
      if not 0 < x < 770: 
       dx = -dx 
      if not 0 < y < 620: 
       dy = -dy 
      self.canvas.move(oval_id, dx, dy) 
      self.canvas.move(text_id, dx, dy) 
      self.bubbles[oval_id] = (x + dx, y + dy, dx, dy, each_no, text_id) 
     root.after(100, self.loop, root) 

if __name__ == "__main__": 
    root = Tk() 
    frame = BubbleFrame(root) 
    frame.loop(root) 
    root.mainloop() 
+0

+1非常酷。很高興看到這個小項目進一步發展! :-) –

0

http://www.tutorialspoint.com/python/tk_messagebox.htm

import tkMessageBox 

tkMessageBox.showinfo("Winner", "You won!") 

可以使用的地方,而不是包放在畫布上方的元素在同一幀或傳統知識。

Label(root, text="Quit").place() 

地方()

  • RELX,依靠:水平和垂直偏移爲0.0和1.0之間的浮動,作爲父窗口小部件的高度和寬度的幾分之一。

  • x,y:以像素爲單位的水平和垂直偏移量。

http://www.tutorialspoint.com/python/tk_place.htm