Python 在栅格上移动圆时,坐标不会像图片那样更新

Python 在栅格上移动圆时,坐标不会像图片那样更新,python,tkinter,geometry,Python,Tkinter,Geometry,该程序旨在创建可移动的圆,并显示正在移动的圆的坐标。问题是,当使用关键点向上或向下移动圆时,Xco值会增加10,尽管它基于的坐标不变 from tkinter import * from tkinter import ttk root = Tk() canvas_width = 1000 canvas_height = 1000 w = canvas_width // 2 h = canvas_height // 2

该程序旨在创建可移动的圆,并显示正在移动的圆的坐标。问题是,当使用关键点向上或向下移动圆时,Xco值会增加10,尽管它基于的坐标不变

    from tkinter import *
    from tkinter import ttk
    
    root = Tk()
    
    canvas_width = 1000
    canvas_height = 1000
    w = canvas_width // 2
    h = canvas_height // 2
    canvas = Canvas(root, width=canvas_width, height=canvas_height)
    canvas.grid()
    
    r1 = canvas.create_oval(800, 800,  900,  900)
    r2 = canvas.create_oval(400, 400,  500,  500)
    r3 = canvas.create_oval(400, 400,  500,  500)
    t = canvas.create_text(20, 10, text="Hello")
    actionBtn = Button(root, text="Enter", width=10, height=1, command=quit).place(x=900, y=100) 
     
    def keypress(event): 
        
        gong = canvas.coords(r1)
        if all(i >= 0 for i in gong) and all(i <= 1000 for i in gong):
            print(canvas.coords(r1))
            
            x, y = 0, 0
            if event.char == "a" and gong[0] >= 10:
                x = -10
            if event.char == "d" and gong[2] <= 990:
                x = 10
            if event.char == "w" and gong[1] >= 10:
                y = -10
            if event.char == "s" and gong[3] <= 990:
                y = 10
            canvas.move(r1, x, y)
            Xco = str((gong[0]+gong[2])//2)
            structurelbl= Label(root, text= "X: "+Xco, width=10, height=1).place(x=900, y=100)
           # canvas.move(t, x, y)
                   
    root.bind("<Key>", keypress)
    root.mainloop()
从tkinter导入*
从tkinter导入ttk
root=Tk()
画布宽度=1000
画布高度=1000
w=画布宽度//2
h=画布高度//2
画布=画布(根,宽度=画布宽度,高度=画布高度)
canvas.grid()
r1=画布。创建椭圆(800800900900)
r2=画布。创建椭圆(400400500500)
r3=画布。创建椭圆(400400500500)
t=canvas.create_text(20,10,text=“Hello”)
actionBtn=按钮(root,text=“Enter”,宽度=10,高度=1,命令=quit)。放置(x=900,y=100)
def按键(事件):
gong=canvas.coords(r1)
如果全部(i>=0表示i为龚)和全部(i=10:
x=-10
如果event.char==“d”且gong[2]=10:
y=-10

如果event.char==“s”和gong[3]更改
r1=画布。创建椭圆(800800900900)
r1=画布。创建椭圆(400400500500)
并注释掉r2和r3,这样做仍然存在相同的问题。该程序也需要使用至少3个圆。但是在您的代码中,只有
r1
在移动,并且您正在读取
r1
的坐标,只有这样,您才能移动所有圆并捕获它们的坐标?这没有任何问题ense:“问题是Xco值增加了10…尽管它基于的坐标没有改变。”-您显然正在移动
r1
,然后根据
r1
更新标签。这一切似乎完全按照您的意愿进行。您需要调用
gong=canvas.coords(r1)
再次设置
Xco
。如果不设置,则
Xco
将使用移动前的旧坐标。更改
r1=画布。创建椭圆(800800900900)
r1=画布。创建椭圆(400400500500)
并注释掉r2和r3,这样做仍然存在相同的问题。该程序也需要使用至少3个圆。但是在您的代码中,只有
r1
在移动,并且您正在读取
r1
的坐标,只有这样,您才能移动所有圆并捕获它们的坐标?这没有任何问题ense:“问题是Xco值增加了10…尽管它基于的坐标没有改变。”-您显然正在移动
r1
,然后根据
r1
更新标签。这一切似乎完全按照您的意愿进行。您需要调用
gong=canvas.coords(r1)
再次设置
Xco
。如果不设置,则移动前,
Xco
将使用旧坐标。