Хобрук: Ваш путь к мастерству в программировании

Холст графического интерфейса Tkinter

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

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 координатам на моем холсте. Любые советы о том, как это сделать?

Надеюсь, вы поняли задачу и мои формулировки. Любая помощь приветствуется!


Ответы:


1

У вас есть пара проблем с вашим примером кода, надеюсь, этот минимальный пример поможет вам сориентироваться:

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 с координатами в качестве аргументов, если вы знаете новое местоположение овала, однако обратите внимание, что координаты должны быть списком пар координат. Я добавил случайную кнопку, чтобы показать, как использовать координаты.

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

10.12.2013
Новые материалы

Введение в контекст React
В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

Это оно
Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

Базовое руководство по переносу концепций обучения в глубокое обучение
Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

C в C.R.U.D с использованием React-Redux
Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

5 обязательных элементов современного инструмента конвейера данных
В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..