AttributeError:“事件”对象没有属性“更宽”

2024-06-26 00:16:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序,我在画布上画一个矩形,当我按下<;箭头键或>;关键帧矩形应变宽或变窄。但是当我运行这个程序并按下其中任何一个键时,python外壳会打印出AttributeError:“事件”对象没有属性“更宽”(或“更窄”)。。。我怎样才能解决这个问题?B.为什么会这样

from tkinter import *
root = Tk()
canvas = Canvas(root, width=400, height=300, bg="#000000")
canvas.pack()
x1 = 150
y1 = 100
x2 = 250
y2 = 200
class ResizeRect:
     def __init__(self, x1, y1, x2, y2):
         self.x1 = x1
         self.y1 = y1
         self.x2 = x2
         self.y2 = y2
         self.rect = canvas.create_rectangle(0,0,1,1)
     def draw(self):
         canvas.delete(self.rect)
         self.rect = canvas.create_rectangle(x1, y1, x2, y2,outline="#00B000", width=2)
     def narrower(self):
         self.x1 = self.x1 + 5
         self.x2 = self.x2 - 5
     def wider(self):
         self.x1 = self.x1 - 5
         self.x2 = self.x2 + 5
r = ResizeRect(150, 100, 250, 200)
r.draw()
def left(r):
    r.narrower()
def right(r):
    r.wider()
canvas.bind_all('<KeyPress-Left>', left)
canvas.bind_all('<KeyPress-Right>', right)

我也不知道我是否/何时修复此问题,仍然会出现大量错误。所以如果你能帮我解决这个问题就太好了。但是如果你能告诉我是否/如何修复这次错误之后出现的其他错误,那就更酷了

谢谢


Tags: rectself程序def错误createrootwidth
2条回答

您需要为tkinter在使用bind时发送的事件提供一个参数:

def left(event):
    r.narrower()

这些方法还需要调用canvas.coords;简单地更新数字不会导致显示更改

您的left()right()例程正在接收一个event,而您当前不接受它。您可以将例程更改为如下所示:

def left(e):
    r.narrower()
def right(e):
    r.wider()

这将消除您的错误消息。现在将调用缩小和扩大的例程,但它们不起作用。要调整矩形的大小,需要使用coords()方法。通过更改矩形的坐标,可以有效地移动或调整其大小

current_coords = canvas.coords(rectangleTagId)
# update the coords to new_coords
canvas.coords(rectangleTagId, *new_coords)

相关问题 更多 >