Python Tkinter图形用户界面画布

Python Tkinter图形用户界面画布,python,canvas,tkinter,coordinates,Python,Canvas,Tkinter,Coordinates,我正在做一个乐高头脑风暴项目,我们在那里创建一个GUI,可以用来控制机器人。我需要做的是创建一些东西,在每次移动后显示机器人的位置。我用画布画了一个矩形,然后画了一个点,显示机器人的当前位置。我有一大堆代码,但我只是向您展示一小部分与我的问题相关的代码 from Tkinter import * class App: def __init__(self, master): frame = Frame(master) frame.pack() self.button

我正在做一个乐高头脑风暴项目,我们在那里创建一个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个坐标的移动。有什么建议吗


我希望你理解这项任务和我的表述。感谢您的帮助

您的示例代码有几个问题,希望这个简单的示例能帮助您走上正轨:

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
方法,但是请注意,坐标应该是坐标对的列表。我添加了一个随机按钮来显示如何使用coords

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