2013-12-10 203 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。

听起来像一个很酷的项目,玩得开心!