Найти - Пользователи
Полная версия: Функция перестает работать после привязки к событию (Canvas)
Начало » Python для новичков » Функция перестает работать после привязки к событию (Canvas)
1
WoMax
Привет,

застрял, прошу совета:

функция moveRight() работает корректно (выводит print):

def moveRight():
    L = [0, 2, 0, 4, 0]  
    merge = False
    num = 2
    moveX = 0
    moveY = 0                                     
    for i in L:
        if i > num:
            break
        elif i == 0:
            moveX += 124
            continue
        elif i == num:
            moveX += 124
            merge = True
            break
    if moveX > 0:
        print(moveX, moveY, num, merge)
    input()
if __name__ == '__main__':
    moveRight()

Но когда ее запихнуть в клас и привязать к событию щелчка мыши, print после щелчка не выводится. Вообще ноль реакции:
from tkinter import *
class MMain():
    def __init__(self, parent = None):
        canvas = Canvas(width=508, height=508, bg = '#aa9d93')
        canvas.pack(fill = BOTH, expand = YES)
        canvas.bind('<ButtonPress-1>', self.moveRight)
        self.canvas = canvas
        self.photo = PhotoImage(file = 'numbers\\small_2.gif')
        self.canvas.create_image(10, 10, image = self.photo, anchor = NW, tag = 'asd')
    def moveRight(self, event):
        L = [0, 2, 0, 4, 0]  
        merge = False
        num = 2
        moveX = 0
        moveY = 0                                      
        for i in L:
            if i > num:
                break
            elif i == 0:
                moveX += 124
                continue
            elif i == num:
                moveX += 124
                merge = True
                break
        if moveX > 0:
            print(moveX, moveY, num, merge)
if __name__ == '__main__':
    MMain()
    mainloop()

Почему?
4kpt_II
Все работает….

from tkinter import *
class MMain():
    def __init__(self, parent = None):
        canvas = Canvas(width=508, height=508, bg = '#aa9d93')
        canvas.pack(fill = BOTH, expand = YES)
        canvas.bind('<ButtonPress-1>', self.moveRight)
    def moveRight(self, event):
        L = [0, 2, 0, 4, 0]
        merge = False
        num = 2
        moveX = 0
        moveY = 0
        for i in L:
            if i > num:
                break
            elif i == 0:
                moveX += 124
                continue
            elif i == num:
                moveX += 124
                merge = True
                break
        if moveX > 0:
            print(moveX, moveY, num, merge)
if __name__ == '__main__':
    MMain()
    mainloop()

Вывод

(248, 0, 2, True)
WoMax
Оо, у меня реально это не работает, просто не реагирует.

Версия питона 3.4.1?

Спасибо за быстрый отзыв.
4kpt_II
Файл кода. Ждемс…
WoMax
Прикрепил.
py.user.next
В лине в python 3.5.0a0 первый код работает.
WoMax
у мения на вин7 и 3.4.1 не работает.

что ж такое..

upt.: только что заметил что прикрепил файл с кодом где event заменен на ‘<Right>’ вместо ‘<ButtonPress-1>’, но у меня не работает ни так, ни так.
WoMax
Всем спасибо, проблема решена
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB