Я очень плохо знаком с Python, у меня есть некоторый опыт работы с C ++ с подросткового возраста, поэтому, пожалуйста, будьте осторожны.
Что я пытаюсь сделать - щелчок левой кнопкой мыши добавляет точку (к двумерному массиву)и увеличивает переменную pointsCount. Я использую привязку Tkinter следующим образом:
canvas.bind("<Button-1>", lambda event: leftClick(event,pointsCounter,points))
функция левого щелчка определяется следующим образом:
def leftClick(event, numberOfPoints,pointsTable):
print("Left ", event.x ," ", event.y)
x = roundup(event.x, 50)
y = roundup(event.y, 50)
pointsTable.append([x,y])
numberOfPoints = numberOfPoints + 1
print(pointsTable)
print(numberOfPoints)
Хотя добавление точек работает нормально, числоOofPoints увеличивается только послепервый клик. Я понимаю, что Python только передает значение в функцию, поэтому я не могу его изменить. Однако это работает для массива. Можно ли как-нибудь увеличить число очков после щелчка правой кнопкой мыши?
Вот весь код
import array
import math
from tkinter import Canvas
def roundup(x, n=10):
res = math.ceil(x/n)*n
if (x%n < n/2)and (x%n>0):
res-=n
return res
def middleClick(event):
print("Middle ", event.x ," ", event.y)
def rightClick(event):
print("Right ", event.x ," ", event.y)
def leftClick(event, numberOfPoints,pointsTable):
print("Left ", event.x ," ", event.y)
x = roundup(event.x, 50)
y = roundup(event.y, 50)
pointsTable.append([x,y])
numberOfPoints = numberOfPoints + 1
print(pointsTable)
print(numberOfPoints)
for i in range(1, 5):
canvas.create_oval(pointsTable[i][0] - radius, pointsTable[i][1] - radius, pointsTable[i][0] + radius, pointsTable[i][1] + radius, fill="red")
return numberOfPoints
root = Tk()
canvas = Canvas(root, width = 800, height = 800)
radius = 5
points = [[]]
pointsCounter = 1
canvas.bind("<Button-1>", lambda event: leftClick(event,pointsCounter,points))
canvas.bind("<Button-2>",middleClick)
canvas.bind("<Button-3>",rightClick)
canvas.pack()
root.mainloop()```
I'd be really grateful for some pointers.