#python #events #tkinter #bind #nameerror
#python #Мероприятия #tkinter #привязать #ошибка имени
Вопрос:
Я получаю эту ошибку :
Обратная трассировка (последний последний вызов): Файл «D:MariomodulesMovingBackground_4.py «, строка 54, в bg = BackgroundImage(холст, событие) Ошибка имени: имя ‘событие’ не определено.
Я новичок в Python и сейчас много читаю о каждом аспекте языка Python и логике, лежащей в его основе, но я еще не знаком с конкретным аргументом ‘event’ и большинством ошибок. После проверки печати (события) я обнаружил, что в нем хранятся позиции, номера ключей и т. Д. Я не знаю, как его определить (заранее?), Поэтому я могу передать его в bg = BackgroundImage(canvas, event) . Кто-нибудь?
from tkinter import *
import tkinter as tk
import time
import keyboard
import random
posOfBackgrImage_X = 500
posOfBackgrImage_Y = -40
tk = Tk()
canvas = Canvas (tk, width = 256, height = 224 )
canvas.pack()
tk.update()
class BackgroundImage:
def __init__(self, canvas, event):
self.canvas = canvas
#self.event = event
self.background = PhotoImage(file = "d:MarioimagesBackgroundssmw-bg-clouds1.png") #loads a background image and makes an instance of that
self.marioBackGround = self.canvas.create_image(posOfBackgrImage_X, posOfBackgrImage_Y , image=self.background, anchor=NE) #loads in the parameters the height, witth and the object 'filename'.
self.x = 0
self.canvas_width = self.canvas.winfo_width()
def move(self):
if event.char == "a":
self.canvas.move(self.marioBackGround, -10, 0)
elif event.char == "d":
self.canvas.move(self.marioBackGround, 10, 0)
tk.bind("<Key>", move)
def draw(self):
self.canvas.move(self.marioBackGround, self.x, 0)
pos = self.canvas.coords(self.marioBackGround)
#canvas.pack()
bg = BackgroundImage(canvas, event)
#g.GameLoop()
while 1:
bg.move()
bg.draw()
tk.update_idletasks()
tk.update()
time.sleep(0.01)
Комментарии:
1. Я не думаю, что вам нужно событие для вашего конструктора. Удалите его и посмотрите, что произойдет.
2. Вы определили свой класс так, чтобы при создании экземпляра требовалось событие, и вы не передаете событие. Ваш класс не использует событие, так зачем вам это требуется? Это ваш код, или вы скопировали его у кого-то другого?
3. прежде чем
bg = BackgroundImage(canvas, event)
вам придется создатьevent = ...
или удалить этоevent
из определения и выполнения, потому что вы не используете этоevent
внутри класса.4. tk.bind() должен быть внутри
__init__
и его следует использоватьself.move()
вместоmove()
.Bind
отправит дополнительную информацию о событии, и функцияmove()
должна ее получитьdef move(self, event)
. Я не знаю, почему в цикле вы запускаете одну и ту же функциюbg.move()
— и если вы хотите ее выполнить, вам нужно выполнить с информацией о событии, потому что вам это нужноdef move(self, event):
в ближайшее время: у вас много мелких ошибок, и вам нужно изучить основы tkinter и объектно-ориентированного программирования (ООП), что означает классы.