Menampilkan pesan-pesan startup pada layar splash QGIS


15

Selama memulai QGIS, ada pesan status yang ditampilkan di bagian bawah layar splash seperti "memulihkan plugin yang dimuat".

Saya menggunakan fitur startup.py dari mana saya ingin memberi tahu pengguna bagian skrip startup saya yang dijalankan saat ini.

Apakah mungkin untuk menampilkan informasi ini di splashscreen?

masukkan deskripsi gambar di sini

Edit1:

Sebagai solusi, saya berhasil menggunakan splashscreen saya sendiri saat startup:

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

Karena itu saya meletakkan splashscreen di folder qgis-python saya (misalnya https://github.com/webgeodatavore/qgis-splash-screens-birthday/raw/master/resized/qgis_version_2.18.png )

masukkan deskripsi gambar di sini

Tetapi solusi ini sedikit solusi yang cepat dan kotor.

Apakah tidak mungkin untuk mendapatkan akses ke splashscreen yang dibuat saat startup aplikasi QGIS? Saya mencoba mendapatkan akses dengan menggunakan QgsApplication.instance().findChild(QSplashScreen)tetapi tidak dapat mengaksesnya.

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

Jawaban:


3

Saya menemukan solusi lain (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

Ini juga mengaktifkan plugin saya, menunjukkan untuk waktu singkat splasher asli (saya kira, itu adil) dan kemudian splasher yang disesuaikan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.