我正在设计一个用于在Python中创建像素艺术的应用程序。我目前拥有它,以便用户可以指定所需的网格大小(宽度*高度),它将创建指定高度的网格,每个网格方块代表2D列表中的一个点。
我使用了Tkinter的canvas小部件和它的create_rectangle方法来绘制网格,如代码摘录所示。
我希望能够点击一个网格方块并拖动我的鼠标,使原始点击的网格正方形和所有被鼠标拖动的网格改变颜色。
一些研究引导我使用canvas tag_bind和bind,但这些似乎都不能让我实现我想要的拖动功能。 event.widget.findclosest方法非常不准确。
这是我必须绘制网格而无需访问onclick函数的代码。
export function fetchVehicle(id) {
return dispatch => {
return dispatch({
type: 'FETCH_VEHICLE',
payload: fetch(`http://swapi.co/api/vehicles/${id}/`)
.then(status)
.then(res => res.json())
.catch(error => {
return Promise.reject()
})
});
};
}
function status(res) {
if (!res.ok) {
throw new Error(res.statusText);
}
return res;
}
答案 0 :(得分:0)
您可以创建在按下按钮时设置标记的绑定,并在按钮释放时释放该标记。您可以设置鼠标移动的绑定,在设置标志时为光标下的项目着色。
它看起来像这样:
class Example(object):
def __init__(self, parent):
...
self._dragging = False
...
self.canvas.bind("<ButtonPress-1>", self.on_click)
self.canvas.bind("<B1-Motion>", self.on_move)
self.canvas.bind("<ButtonRelease-1>", self.on_release)
def on_click(self, event):
self._dragging = True
self.on_move(event)
def on_move(self, event):
if self._dragging:
items = self.canvas.find_closest(event.x, event.y)
if items:
rect_id = items[0]
self.canvas.itemconfigure(rect_id, fill="red")
def on_release(self, event):
self._dragging = False