יותר

בעיה בתיבת הנפתחת (QComboBox) בתוסף Python של QGIS 2.6


פיתחתי תוסף הסופר את מספר התכונות לשכבה ב- Qgis2.6. כשאני טוען שכבה אמור 'נמל תעופה' בפעם הראשונה ולוחץ על התיבה הנפתחת בתוסף, היא מפרטת את שדה התעופה פעם אחת. הבעיה היא שאם אני סוגר את התוסף ושוב אם אני משתמש בתוסף ומרחיב את הפופ -תיבה למטה אני יכול לראות את השכבה 'שדה תעופה' מופיעה פעמיים. צר לי שלא הצלחתי לצלם את הקופסה הנפתחת. אני חושב שזה יכול להיות בגלל בעיה בזיכרון. אבל להבין את הבעיה המדויקת. יכול לעזור לי מאוד. צירפתי את המראה הכללי של התוסף שלי. האם יש דרך לנקות את הפריטים בקופסה המשולבת? מקווה שזה עוזר.

מ- qgis.core יבוא QgsMapLayerRegistry, QgsMapLayer מ- PyQt4.QtCore יבוא QSettings, QTranslator, qVersion, QCoreApplication מ- PyQt4.QtGui ייבוא ​​QAction, QIcon, QMessageBox # התחל משאבי Qt מתוך משאבי קבצים. import FeatureCountDialog import os.path class FeatureCount: "" "יישום תוסף QGIS." "" def __init __ (self, iface): "" "Constructor.: param iface: מופע ממשק שיועבר למחלקה זו המספקת את הוו באמצעותו תוכל לתפעל את יישום QGIS בזמן ההפעלה.: הקלד iface: QgsInterface "" " # שמור הפניה לממשק QGIS self.iface = iface # אתחל את ספריית התוספים self.plugin_dir = os.path.dirname (__ קובץ__) # אתחל locale locale = QSettings (). value ('locale/userLocale') [0: 2] locale_path = os.path.join (self.plugin_dir, 'i18n', 'FeatureCount _ {}. qm'.format (locale)) אם os.path.exists (locale_path): self.translator = QTranslator () self.tr anslator.load (locale_path) if qVersion ()> '4.3.3': QCoreApplication.installTranslator (self.translator) # צור את הדו -שיח (לאחר תרגום) ושמור את התייחסות self.dlg = FeatureCountDialog () # הצהיר על תכונות מופע self.actions = [] self.menu = self.tr (u '& FeatureCount') # TODO: אנו הולכים לתת למשתמש להגדיר זאת בעצמי איטרציה self.toolbar = self.iface.addToolBar (u'FeatureCount ') עצמי. toolbar.setObjectName (u'FeatureCount ') # noinspection PyMethodMayBeStatic def tr (self, message): "" "קבל את התרגום למחרוזת באמצעות API לתרגום Qt. אנו מיישמים זאת בעצמנו מכיוון שאיננו יורשים את QObject. : הודעת param: מחרוזת לתרגום. : type message: str, QString: returns: גרסה מתורגמת של ההודעה. : 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 = true, add_to_to None, whats_this = None, parent = None): "" "הוסף סמל סרגל כלים לסרגל הכלים. : param icon_path: נתיב לאייקון של פעולה זו. יכול להיות נתיב משאבים (למשל ': /plugins/foo/bar.png ">


אתה יכול לנקות אQComboBoxבכך שהוא קורא לזהברור()שיטה.

במקרה שלך, זה יהיה הגיוני לערוך אתלָרוּץ()שיטה, כך שבכל פעם שהמשתמש יפעיל את התוסף (לדוגמה, על ידי לחיצה על הכפתור הראשי של התוסף),QComboBoxמתנקה לפני הוספת שכבות אליו:

def run (self): "" "שיטת הפעלה המבצעת את כל העבודה האמיתית" "" # הצג את תיבת הדו -שיח self.dlg.show () # נקה את ה- QComboBox לפני טעינת שכבות self.dlg.featurecombo.clear () שכבות = QgsMapLayerRegistry .instance (). mapLayers (). ערכים () לשכבה בשכבות: if layer.type () == QgsMapLayer.VectorLayer: self.dlg.featurecombo.addItem (layer.name (), שכבה)

נסה להעביר את החלק למטה של ​​הקוד מה- לָרוּץ אל ה initGui פוּנקצִיָה.

שכבות = QgsMapLayerRegistry.instance (). mapLayers (). ערכים () לשכבה בשכבות: if layer.type () == QgsMapLayer.VectorLayer: self.dlg.featurecombo.addItem (layer.name (), שכבה)


צפו בסרטון: Qt - QComboBox для выбора из справочника внешний ключ (אוֹקְטוֹבֶּר 2021).