Vairāk

Problēma QGIS 2.6 Python spraudņa uznirstošajā lodziņā (QComboBox)

Problēma QGIS 2.6 Python spraudņa uznirstošajā lodziņā (QComboBox)


Es biju izstrādājis spraudni, kas saskaita Qgis2.6 slāņa funkciju skaitu. Kad es pirmo reizi ielādēju slāni, sakiet “Lidosta” un noklikšķiniet uz spraudņa uznirstošā lodziņa, tajā vienreiz tiek uzskaitīta lidosta. Problēma ir tāda, ka, ja es aizveru spraudni un vēlreiz, ja lietoju spraudni un izvērsu -lejup redzamajā lodziņā es redzu, ka slānis “Lidosta” ir norādīts divreiz. Atvainojiet, ka es nevarēju uzņemt uznirstošo lodziņu. Es domāju, ka tas varētu būt saistīts ar kādu atmiņas problēmu. Bet noskaidrot precīzu problēmu var man daudz palīdzēt. Es pievienoju sava spraudņa kopējo izskatu. Vai ir kāds veids, kā notīrīt vienumus kombinētajā lodziņā? Ceru, ka tas palīdz.

no qgis.core importēt QgsMapLayerRegistry, QgsMapLayer no PyQt4.QtCore importēt QSettings, QTranslator, qVersion, QCoreApplication no PyQt4.QtGui importa QAction, QIcon, QMessageBox # Inicializēt Qt resursus no failu resursiem. importēt FeatureCountDialog importēt os.path klasi FeatureCount: "" "QGIS spraudņa ieviešana." "" def __init __ (self, iface): "" "Constructor.: param iface: saskarnes instance, kas tiks nodota šai klasei, kas nodrošina āķi ar kuru jūs varat manipulēt ar QGIS lietojumprogrammu izpildes laikā.: ierakstiet iface: QgsInterface "" " # Saglabāt atsauci uz QGIS saskarni self.iface = iface # initialize plugin directory self.plugin_dir = os.path.dirname (__ file__) # initialize locale locale = QSettings (). vērtība ('locale/userLocale') [0: 2] locale_path = os.path.join (self.plugin_dir, 'i18n', 'FeatureCount _ {}. qm'.format (locale)), ja os.path.exists (locale_path): self.translator = QTranslator () self.tr anslator.load (locale_path), ja qVersion ()> '4.3.3': QCoreApplication.installTranslator (self.translator) # Izveidojiet dialoglodziņu (pēc tulkošanas) un saglabājiet atsauci self.dlg = FeatureCountDialog () # Deklarēt instances atribūtus self.actions = [] self.menu = self.tr (u '& FeatureCount') # TODO: Mēs ļausim lietotājam to iestatīt nākamajā iterācijā self.toolbar = self.iface.addToolBar (u'FeatureCount ') self. toolbar.setObjectName (u'FeatureCount ') # noinspection PyMethodMayBeStatic def tr (self, message): "" "Iegūstiet tulkojumu virknei, izmantojot Qt tulkošanas API. Mēs to ieviešam paši, jo nepārmantojam QObject. : param message: Virkne tulkošanai. : ierakstiet ziņojumu: str, QString: atgriež: ziņojuma tulkotā versija. : rtype: QString "" " # noinspection PyTypeChecker, PyArgumentList, PyCallByClass return QCoreApplication.translate ('FeatureCount', message) def add_action (self, icon_path, text, callback, enabled_flag = True, add_to_menu = status, add Nav, whats_this = Nav, vecāks = Nav): "" "Pievienojiet rīkjoslai ikonu. : param icon_path: ceļš uz šīs darbības ikonu. Var būt resursa ceļš (piemēram, ': /plugins/foo/bar.png ">


Jūs varat notīrīt aQComboBoxzvanot uz toskaidrs ()metodi.

Jūsu gadījumā būtu jēga rediģētpalaist ()metodi, lai katru reizi, kad lietotājs palaidīs spraudni (piemēram, noklikšķinot uz spraudņa galvenās pogas),QComboBoxtiek notīrīts, pirms tam tiek pievienoti slāņi:

def run (self): "" "Run metode, kas veic visu reālo darbu" "" # parāda dialoglodziņu self.dlg.show () # Notīriet QComboBox pirms slāņu ielādes self.dlg.featurecombo.clear () layer = QgsMapLayerRegistry .instance (). mapLayers (). vērtības () slānim slāņos: ja layer.type () == QgsMapLayer.VectorLayer: self.dlg.featurecombo.addItem (layer.name (), layer)

Mēģiniet pārvietot zemāk esošo koda daļu no skriet uz initGui funkciju.

slāņi = QgsMapLayerRegistry.instance (). mapLayers (). vērtības () slānim slāņos: ja layer.type () == QgsMapLayer.VectorLayer: self.dlg.featurecombo.addItem (layer.name (), layer)

Skatīties video: Урок 26 - QComboBox и QListWidget