【问题标题】:AttributeError: 'Event' object has no attribute 'wider'AttributeError:“事件”对象没有“更宽”属性
【发布时间】:2020-12-18 21:09:15
【问题描述】:

我有这个程序,我在画布上绘制一个矩形,当我按下 键时,矩形应该变宽或变窄。但是当我运行这个程序并按下其中任何一个键时,python shell 会打印出 AttributeError: 'Event' object has no attribute 'wider' (or 'narrower')... A. 我该如何解决这个问题? 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)

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

谢谢

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

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

    def left(event):
        r.narrower()
    

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

    【讨论】:

      【解决方案2】:

      您的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)
      

      【讨论】:

        猜你喜欢
        • 2019-12-17
        • 2019-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-01
        • 2021-04-19
        • 2018-05-12
        • 2021-11-22
        相关资源
        最近更新 更多