【问题标题】:Tkinter GUI canvasTkinter GUI 画布
【发布时间】:2013-12-28 09:15:19
【问题描述】:

我正在开发一个 Lego Mindstorms 项目,我们在该项目中创建了一个可用于控制机器人的 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 个坐标。关于如何做到这一点的任何提示?

我希望你能理解任务和我的表述。任何帮助表示赞赏!

【问题讨论】:

    标签: python canvas tkinter coordinates


    【解决方案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 方法将坐标作为参数,但请注意坐标应该是坐标对列表。我添加了一个随机按钮来显示如何使用坐标。

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

    【讨论】:

      猜你喜欢
      • 2021-01-08
      • 1970-01-01
      • 2022-11-02
      • 2013-05-25
      • 1970-01-01
      • 2020-05-15
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多