Script to click on the canvas.
from krita import Krita
from PyQt5.QtCore import (
Qt,
QPoint,
QPointF,
QEvent)
from PyQt5.QtGui import (
QMouseEvent,
QCursor)
from PyQt5.QtWidgets import (
QWidget,
QApplication)
def find_current_canvas():
application = Krita.instance()
q_window = application.activeWindow().qwindow()
q_stacked_widget = q_window.centralWidget()
q_mdi_area = q_stacked_widget.currentWidget()
q_mdi_sub_window = q_mdi_area.currentSubWindow()
view = q_mdi_sub_window.widget()
for c in view.children():
if c.metaObject().className() == 'KisCanvasController':
viewport = c.viewport()
canvas = viewport.findChild(QWidget)
return canvas
def click_canvas(global_pos=None):
canvas = find_current_canvas()
if global_pos is None:
global_pos = QCursor.pos()# cursor position
global_posF = QPointF(global_pos)
posF = QPointF(canvas.mapFromGlobal(global_pos))
else:
global_pos = QPoint(global_pos)
global_posF = QPointF(global_pos)
posF = QPointF(canvas.mapFromGlobal(global_pos))
button = Qt.LeftButton
buttons = Qt.LeftButton
key_state = Qt.NoModifier
mouse_press = QMouseEvent(
QEvent.MouseButtonPress,
posF,
button,
buttons,
key_state)
mouse_release = QMouseEvent(
QEvent.MouseButtonRelease,
posF,
button,
buttons,
key_state)
if not canvas.isActiveWindow():
canvas.activateWindow()
QApplication.sendEvent(canvas, mouse_press)
QApplication.sendEvent(canvas, mouse_release)
click_canvas()
This is a simplified version of the one taught in this topic.
It can be used to force tools that require manual clicking, such as continuous selection or layer selection, to work programmatically, but it will not be useful in many situations.
Note that if you register this script to a shortcut that includes the Shift key, for example, the result will be a Shift+click situation.