2013-12-10 207 views
0

我正在研究Lego Mindstorms項目,我們創建了一個可用於控制機器人的GUI。我需要做的是創建一些能夠在每次移動後顯示機器人位置的東西。我正在使用畫布繪製一個矩形,然後顯示一個顯示機器人當前位置的點。我有一大堆代碼,但我只是向你展示了一小部分與我的問題相關的代碼。Tkinter GUI畫布

from Tkinter import * 

class App: 

def __init__(self, master): 

    frame = Frame(master) 
    frame.pack() 

    self.button = Button(frame, text="Move", command=lambda: do_move()) 
    self.button.pack(side=TOP) 

    self.canvas = Canvas(master, width=300, height=450) 
    self.canvas.place(x=250, y=550) 
    self.canvas.create_rectangle(0, 0, 300, 450, fill="white") 
    self.canvas.create_oval(150, 300, 160, 310, fill="blue", tags="Position") 

    x, y = self.canvas.coords("Position") 
    x = int(x) 
    y = int(y) 

    x2 = self.canvas.canvasx(self.x) 
    y2 = self.canvas.canvasy(self.y) 
    x2 = int(x2) 
    y2 = int(y2) 

    def move_forward(): 
     self.canvas.move(Position, x2, y2) 

    def move_backwards(): 
     self.canvas.move(Position, ,) 

    root = Tk() 
    app = App(root) 

    root.title("Mindstorms GUI") 
    root.geometry("800x1200") 

    root.mainloop() 
    root.destroy() 

對於我有一個按鈕的移動功能,我選擇一個值,該值將向前/向後移動機器人。當機器人移動時,我還想在畫布上移動我的藍色圓圈。 X和Y是圓圈當前位置的座標,關於X2和Y2的其餘部分取自另一個位置。我不是很確定爲什麼你必須寫x = int(x),我真的不瞭解X2和Y2的部分。關於如何編寫剩餘代碼的任何解釋和建議?

我在最後定義的第一個新功能將與我的移動按鈕一起使用,以便我有兩個按鈕命令。當我點擊按鈕時,位置圓也將被移動到新的座標。我還需要寫一個地方,我的移動函數使用的單位的具體值等於例如在我的畫布中移動5個座標。有關如何做到這一點的任何提示?

我希望你能理解我的任務和我的配方。任何幫助表示讚賞!

回答

0

你有幾個問題與你的示例代碼,希望這最小的例子可以幫助你走上正軌:

from Tkinter import * 
import random 


class App(Frame): 

    def __init__(self, master): 
     Frame.__init__(self, master) 

     self.move_button = Button(self, text="Move", command=self.do_move) 
     self.move_button.pack() 

     self.random_button = Button(
      self, text="Random!", 
      command=self.random_move) 
     self.random_button.pack() 

     self.canvas = Canvas(self, width=300, height=450) 
     self.canvas.config(
      highlightbackground="grey", 
      borderwidth=2, 
      relief="flat") 
     self.canvas.pack() 
     self.canvas.create_oval(
      150, 300, 160, 310, fill="blue", tag="Oval") 

     self.pack() 

    def do_move(self): 
     self.canvas.move("Oval", 10, 10) 

    def random_move(self): 
     x = random.randint(1, 290) 
     y = random.randint(1, 440) 
     self.canvas.coords("Oval", x, y, x+10, y+10) 

root = Tk() 
root.title("Mindstorms GUI") 
root.geometry("400x600") 

app = App(root) 
root.mainloop() 

注意畫布move方法採用的偏移。或者,如果知道橢圓的新位置,則可以使用帶有座標的coords方法,但請注意座標應該是座標對的列表。我已經添加了一個隨機按鈕來展示如何使用coords。

聽起來像一個很酷的項目,玩得開心!