【问题标题】:How to change the coordinates of a shape (i.e. oval) in tkinter?如何在 tkinter 中更改形状(即椭圆)的坐标?
【发布时间】:2016-05-14 15:42:59
【问题描述】:

我正在尝试制作一个程序,当您按下 S 按钮时,它会将形状移动到网格上它下方的正方形。我第一次设法让形状移动,但之后它就变得越来越大。

这是我的代码:

from tkinter import *  
root = Tk()
global y
y = 0
x = 0
def down(event):
    global y
    global x
    y = y+100
    x = x+ 100
    global pirate
    canvas.delete(pirate)
    pirate = canvas.create_oval((x,y), (100,100), fill = 'red')
    print(y)
canvas = Canvas(root, width = 1000, height = 1000)
canvas.pack()
for a in range (10):    
    i = a*100
    canvas.create_line((i,0), (i,1000))
for a in range (10):
    i = a*100
    canvas.create_line((0,i), (1000,i))

pirate = canvas.create_oval((x, y),(100, 100), fill = 'red')

root.bind('<Key - S>', down)
root.mainloop()

【问题讨论】:

  • 你不需要删除和重绘椭圆 - 你可以使用canvas.move(pirate, x, y)。不太确定参数 x 和 y 应该是什么 - 我自己从未使用过该方法。刚刚在文档中看到了。
  • @ArtOfWarfare 嘿,如果这看起来像偷窃,请添加答案。既然你说,你不知道怎么做,我想我应该加一个。我很乐意删除我的赞成票。 :)
  • @Lafexlos - 不,没关系。我投票最多的一些答案是我略微扩展了其他人在 cmets 中所说的内容。你比我付出的更多。我只是看了Canvas 文档,看到了move 方法,我想我会提到它。
  • x 和 y 是增量

标签: python tkinter python-3.5 tkinter-canvas


【解决方案1】:

正如 cmets 中提到的 ArtOfWarfare ,不是每次都创建新的椭圆,而是创建一个和 move 那个东西。

def down(event):
    canvas.move(pirate, 0, 100)

以上代码足以将您的椭圆在代码中向下移动一格。

假设您需要移动椭圆而不只是向下移动,而不是仅将 S 绑定到画布,我认为您应该获取所有关键事件并根据按下的字符执行操作。

def keyPressed(event):
    if event.char.lower() == 's':  #move it down if it's S or s
        canvas.move(pirate, 0, 100)

root.bind('<Key>', keyPressed) #get all key pressed events

【讨论】:

  • 非常感谢,这真的很重要,我通过一年的 gcse 课程获得了 10 英镑的报酬。我在 9 年级,我喜欢计算机科学,如果我在一个月内完成它,我会从我的计算机科学老师那里得到 10 英镑
【解决方案2】:

你有一个问题,在 python-tk 中,椭圆没有指定create_oval(x,y,w,h),而是create_oval(x1,y1,x2,y2)。希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多