LoginSignup
0
0

More than 3 years have passed since last update.

QGISでカーソルアイコンを変更する

Last updated at Posted at 2020-02-10

方法

方法としては3つあります
* QApplication
* QWidget
* QgsMapTool

検証環境

  • Windows 10
  • QGIS
    • 2.18
    • 3.4
  • Pythonコンソール

QApplication

アプリケーション全体のカーソルを上書きしたい場合は、QApplicationに対してカーソルを変更します。
Qtでの変更方法はQApplicationにカーソルを取得・設定できる関数が準備されています。
QGISでは、QApplicationを継承しているQgsApplicationで変更することができます。

hoge.py
from PyQt5.QtCore import Qt
from qgis.core import QgsApplication

app = QgsApplication.instance()

# 処理中的なカーソルに変更する
app.setOverrideCursor(Qt.BusyCursor)

# 元のカーソルを復元
app.restoreOverrideCursor()

QWidget

Qtでは、QWigetごとに変更することが可能なのでそこに対してカーソルを設定することで変更することができます。
QApplicationの方が権限が強いのとQgsMapToolにも負けるときがあるっぽいです。

hoge.py
from PyQt5.QtCore import Qt

widget = iface.mainWindow()
cursor = widget.cursor()

# 処理中的なカーソルに変更する
widget.setCursor(Qt.WaitCursor)

QMapTool

QgsMapToolのカーソルでは、QGISの地図領域の時のみに変更されます。一番影響範囲が少なく強制力がない変更方法になります。
また既存のマップツール(例えばactionPanQgsMapToolPan)のアイコンを変更した場合、元に戻す方法がありません。
処理中は砂時計、その後に矢印に戻す処理をしたいのですが、QgsMapToolQCursorをPythonで取得できないので元に戻すことができません。

hoge.py
from PyQt5.QtCore import Qt

canvas = iface.mapCanvas()
maptool = canvas.mapTool()

# 処理中的なカーソルに変更する
maptool.setCursor(Qt.BusyCursor)

Qtで準備されたものに変更する

Qtでは, Qt.CursorShapeで基本的なカーソルが準備されているものに変更します。

hoge.py
from PyQt5.QtCore import Qt
from qgis.core import QgsApplication

app = QgsApplication.instance()

# 処理中的なカーソルに変更する
app.setOverrideCursor(Qt.WaitCursor)

print("なんか処理する")

# 元に戻す
app.restoreOverrideCursor()

独自カーソルに変更する

hoge.py
from PyQt5.QtCore import Qt, QImage, QPixmap
from PyQt5.QtGui import QCursor
from qgis.core import QgsApplication

app = QgsApplication.instance()

# カーソルに使用する画像をPixmapにする
path = 'cursor.png'
image = QImage(path)
pixmap = QPixmap.fromImage(image)

# 独自カーソルを作成
cursor = QCursor(pixmap)

# 独自カーソルに変更する
app.setOverrideCursor(cursor)

QCursorのオブジェクトを作成しQApplicationに設定することで変更することができます。
QCursorは、QPixmapQBitmapで画像の入力を受け入れています。

備考

今回は処理中に砂時計にしたいということでカーソルの変更を調べました。
全ての所で止めたいので、QApplicationでやっていこうと思います。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0