Mostrando mensagens de inicialização na tela inicial do QGIS

15

Durante a inicialização do QGIS, são exibidas mensagens de status na parte inferior da tela inicial, como "restauração de plugins carregados".

Estou usando um recurso startup.py no qual gostaria de informar ao usuário qual parte do meu script de inicialização é executada no momento.

É possível mostrar essas informações na tela inicial?

insira a descrição da imagem aqui

Edit1:

Como solução alternativa, consegui usar minha própria tela inicial durante a inicialização:

from qgis.gui import *
from qgis.utils import *
from qgis.core import *
from PyQt4.QtGui import *
from qgis.PyQt.QtCore import QSettings, Qt
import time


template=QgsApplication.qgisSettingsDirPath() + "python/"
app=QgsApplication.instance()
splash_pix = QPixmap(template+'splashscreen.png')

splash = QSplashScreen(splash_pix, Qt.WindowStaysOnTopHint)
splash.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
splash.setEnabled(False)

splash.setMask(splash_pix.mask())

progressBar = QProgressBar(splash)
progressBar.setMaximum(10)
progressBar.setGeometry(0, splash_pix.height() - 20, splash_pix.width(), 10)

splash.show()

if QgsApplication.instance().findChild(QSplashScreen):
    QgsMessageLog.logMessage("ja", "gridseen", level=QgsMessageLog.INFO)
else:
    QgsMessageLog.logMessage("nein", "gridseen", level=QgsMessageLog.INFO)

splash.showMessage("<h1><font color='white'>Grid Integration-Check!</font></h1>", Qt.AlignBottom | Qt.AlignCenter, Qt.black)

for i in range(1, 11):
    progressBar.setValue(i)
    t = time.time()
    while time.time() < t + 0.1:
        app.processEvents()

time.sleep(2)
splash.close()

Portanto, coloquei a tela de abertura na minha pasta qgis-python (por exemplo, https://github.com/webgeodatavore/qgis-splash-screens-birthday/raw/master/resized/qgis_version_2.18.png )

insira a descrição da imagem aqui

Mas essas soluções são uma solução rápida e suja.

Não é possível obter acesso à tela inicial criada durante a inicialização do aplicativo QGIS? Tentei obter acesso usando, QgsApplication.instance().findChild(QSplashScreen)mas não consegui acessar.

https://github.com/qgis/QGIS/blob/7bd0285dfdef9456a5929a7b7031270ea0ee2601/src/app/main.cpp#L1286

markgraeflerland
fonte

Respostas:

3

Eu descobri outra solução (QGIS 3.4): startup.py

from PyQt5.QtCore import QSettings,QStandardPaths
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QLabel, QWidget, QSplashScreen,QApplication
import os

try:
    s = QSettings()
    s.setValue("PythonPlugins/BufferSelection",True)
except: pass

try:
    widgets= QApplication.allWidgets()
    for wid in widgets:
        if isinstance(wid, QSplashScreen):
            qgisAppDataPath= QStandardPaths.standardLocations(QStandardPaths.AppDataLocation)[0]
            file = os.path.join(qgisAppDataPath,"splash.png")
            if os.path.isfile(file):
                pixmap = QPixmap(file)
                wid.setPixmap(pixmap)
                app.processEvents()
            break
except: pass

Também ativa o meu plug-in, mostra por um curto período de tempo o splasher original (acho que é justo) e depois o personalizado.

O Coelho
fonte