Startup-Meldungen auf dem QGIS-Splashscreen anzeigen


15

Während des Starts von QGIS werden im unteren Teil des Begrüßungsbildschirms Statusmeldungen wie "Wiederherstellen geladener Plugins" angezeigt.

Ich verwende eine startup.py-Funktion, mit der ich den Benutzer darüber informieren möchte, welcher Teil meines Startskripts gerade ausgeführt wird.

Ist es möglich, diese Informationen auf dem Startbildschirm anzuzeigen?

Bildbeschreibung hier eingeben

Edit1:

Als Workaround konnte ich beim Start meinen eigenen Splashscreen verwenden:

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()

Deshalb habe ich den Begrüßungsbildschirm in meinen QGIS-Python-Ordner gestellt (zum Beispiel https://github.com/webgeodatavore/qgis-splash-screens-birthday/raw/master/resized/qgis_version_2.18.png ).

Bildbeschreibung hier eingeben

Diese Lösung ist jedoch eine schnelle und schmutzige Umgehung.

Ist es nicht möglich, auf den Begrüßungsbildschirm zuzugreifen, der beim Start der QGIS-App erstellt wurde? Ich habe versucht, mithilfe von Zugriff zu erhalten QgsApplication.instance().findChild(QSplashScreen), konnte jedoch keinen Zugriff darauf erhalten.

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

Antworten:


3

Ich habe eine andere Lösung gefunden (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

Es aktiviert auch mein Plugin, zeigt für kurze Zeit den ursprünglichen Splasher (ich denke, das ist fair) und dann den angepassten Splasher.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.