ткинтер не связывает все указанные ярлыки? - PullRequest
0 голосов
/ 24 апреля 2020

Поэтому я пытался создать приложение Tkinter, в котором при нажатии и перетаскивании мыши оно будет печатать начальную и конечную позиции указателя мыши.

Существует вложенный список, содержащий метки, которые я хочу связать. Сначала я связываю щелчок левой кнопкой мыши на каждой метке, затем, когда щелкаю метку левой кнопкой мыши, я связываю ее выпуск. А когда отпускается левый щелчок, он печатает начальную и конечную позиции указателя мыши относительно метки.

Итак, вот код

from  tkinter import *

class game(Frame):
    def __init__(self,parent):
        Frame.__init__(self,parent)
        self.llist = [[0]*4]*4
        for i in range(4):
            for j in range(4):
                self.llist[i][j] = Label(self,bd = 1, relief = 'ridge',height = 4, width = 8)
                self.llist[i][j].grid(row = i, column = j)
                self.llist[i][j].bind('<Button-1>',lambda event, r = i, c = j: self.click(event,r,c))

    def click(self,event,r,c):
        a,b = event.x,event.y
        self.llist[r][c].bind('<ButtonRelease-1>',lambda event: self.release(event,a,b))

    def release(self,event,a,b):
        print(a,b,event.x,event.y)

r = Tk()
r.geometry('300x300')

f = game(r)
f.pack()

r.mainloop()

Но проблема в том, что работают только последние 4 метки!

Проблема со второй привязкой. Когда я проверяю только первую привязку, все метки работают!

Пожалуйста, помогите !!!

1 Ответ

0 голосов
/ 24 апреля 2020

Это вызвано строкой:

self.llist = [[0]*4]*4

Создан список из 4 списков, которые ссылаются на один и тот же список, т.е. self.llist[r][c] ссылка на тот же self.llist[0][c].

Измените его на self.llist = [[0]*4 for _ in range(4)].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...