Kullanıcı ile iletişim

Bu bölüm Kullanıcı Arayüzdeki sürekliliği sağlamak amacıyla, kullanıcı ile iletişim kurmak için kullanılan metot ve elementleri gösterir.

Showing messages. The QgsMessageBar class

Kullanıcı deneyimi açısından mesaj kutusu kullanmak yanlış olabilir. Küçük bir bilgi veya uyarı/hata mesajı çizgisi göstermek için QGIS mesaj çubuğu kullanmak genellikle en iyi seçenektir.

QGIS arayüz nesnesi için referansı kullanarak bir mesajı, mesaj çubuğundaki sonraki codla gösterebilirsiniz

from qgis.gui import QgsMessageBar
iface.messageBar().pushMessage("Error", "I'm sorry Dave, I'm afraid I can't do that", level=QgsMessageBar.CRITICAL)
../../_images/errorbar.png

QGIS Mesaj çubuğu

Bunu sınırlı bir zamanda göstermek için süre ayarı koyabilirsiniz.

iface.messageBar().pushMessage("Error", "Ooops, the plugin is not working as it should", level=QgsMessageBar.CRITICAL, duration=3)
../../_images/errorbar-timed.png

Sayaçlı QGIS Mesaj çubuğu

The examples above show an error bar, but the level parameter can be used to creating warning messages or info messages, using the QgsMessageBar.WARNING and QgsMessageBar.INFO constants respectively.

../../_images/infobar.png

QGIS Mesaj çubuğu(bilgi için)

Mesaj çubuğuna Widgetlar eklenebilir örneğin daha fazla bilgi göstermek için bir buton

def showError():
    pass

widget = iface.messageBar().createMessage("Missing Layers", "Show Me")
button = QPushButton(widget)
button.setText("Show Me")
button.pressed.connect(showError)
widget.layout().addWidget(button)
iface.messageBar().pushWidget(widget, QgsMessageBar.WARNING)
../../_images/bar-button.png

Butonlu bir QGIS Mesaj çubuğu

Ana QGIS penceresinde bir mesaj kutusu göstermek gereksizse veya pencerenizde mesaj kutusu göstermek istemiyorsanız kendi pencerenizde bir mesaj çubu kullanabilirsiniz.

class MyDialog(QDialog):
    def __init__(self):
        QDialog.__init__(self)
        self.bar = QgsMessageBar()
        self.bar.setSizePolicy( QSizePolicy.Minimum, QSizePolicy.Fixed )
        self.setLayout(QGridLayout())
        self.layout().setContentsMargins(0, 0, 0, 0)
        self.buttonbox = QDialogButtonBox(QDialogButtonBox.Ok)
        self.buttonbox.accepted.connect(self.run)
        self.layout().addWidget(self.buttonbox, 0, 0, 2, 1)
        self.layout().addWidget(self.bar, 0, 0, 1, 1)

    def run(self):
        self.bar.pushMessage("Hello", "World", level=QgsMessageBar.INFO)
../../_images/dialog-with-bar.png

QGIS özel diyalogdaki mesaj çubuğu

İlerleme gösteriliyor

ilerleme çubukları, gördüğümüz gibi, QGIS mesaj çubukları içine de konulabilir olduğundan, widgetları kabul eder. Konsolda deneyebileceğiniz kodları burada bulabilirsiniz.

import time
from PyQt4.QtGui import QProgressBar
from PyQt4.QtCore import *
progressMessageBar = iface.messageBar().createMessage("Doing something boring...")
progress = QProgressBar()
progress.setMaximum(10)
progress.setAlignment(Qt.AlignLeft|Qt.AlignVCenter)
progressMessageBar.layout().addWidget(progress)
iface.messageBar().pushWidget(progressMessageBar, iface.messageBar().INFO)
for i in range(10):
    time.sleep(1)
    progress.setValue(i + 1)
iface.messageBar().clearWidgets()

Also, you can use the built-in status bar to report progress, as in the next example

count = layers.featureCount()
for i, feature in enumerate(features):
    #do something time-consuming here
    ...
    percent = i / float(count) * 100
    iface.mainWindow().statusBar().showMessage("Processed {} %".format(int(percent)))
iface.mainWindow().statusBar().clearMessage()

Kaydoluyor

QGIS kayıt sistemini kodunuzun çalışması hakkındaki görmek istediğiniz tüm bilgileri kaydetmek için kullanabilirsiniz.

# You can optionally pass a 'tag' and a 'level' parameters
QgsMessageLog.logMessage("Your plugin code has been executed correctly", 'MyPlugin', QgsMessageLog.INFO)
QgsMessageLog.logMessage("Your plugin code might have some problems", level=QgsMessageLog.WARNING)
QgsMessageLog.logMessage("Your plugin code has crashed!", level=QgsMessageLog.CRITICAL)