2013-12-10 5 views
0

Я работаю над проектом Lego Mindstorms, где мы создаем графический интерфейс, который можно использовать для управления роботом. Мне нужно сделать, чтобы создать что-то, что показывает позицию роботов после каждого хода. Я использую холст, где я рисую прямоугольник, а затем точку, которая показывает текущую позицию робота. У меня есть целая куча кода, но я просто показываю вам небольшую часть, относящуюся к моей проблеме.Tkinter GUI canvas

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. Любые объяснения и предложения о том, как я могу написать остальную часть моего кода?

Первая новая функция, которую я определяю в конце, будет использоваться с моей кнопкой перемещения, так что у меня есть две команды для кнопки. Когда я нажимаю кнопку, окружность Position также будет перемещена в новые координаты. Мне также нужно будет написать где-нибудь, что конкретное значение единицы, которое я использую для моей функции перемещения, равно, например, перемещению 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() 

Обратите внимание, что метод Canvas move принимает смещение. Альтернативно, вы можете использовать метод coords с координатами в качестве аргументов, если знаете новое местоположение овала, однако обратите внимание, что координаты должны быть списком пар координат. Я добавил случайную кнопку, чтобы показать, как использовать координаты.

Звучит как классный проект, получайте удовольствие!