Плагин QGIS: создание динамических полей со спискомPython

Программы на Python
Anonymous
Плагин QGIS: создание динамических полей со списком

Сообщение Anonymous »

Я создаю плагин QGIS, в котором пользователь может переименовывать столбцы в указанные имена в зависимости от определенной политики.
На изображении вы можете видеть, что пользователь выбирает слой в QGIS, имена полей которого затем будут заполните mFieldCombobox («фактическое имя»), и во втором поле со списком пользователю будет предоставлен список имен, определенных в плагине (и в зависимости от выбранной политики).
Однако количество столбцов в слое, которые следует переименовать, зависит от потребностей пользователя, поэтому я хочу, чтобы он/она мог добавлять столько полей со списком («фактическое имя» и «переименовать в»), сколько необходимо. Для этого я добавил кнопку «+», которая при нажатии должна генерировать новое «фактическое имя»-mFieldCombobox и новое поле со списком «переименовать в».
Возможно ли это , и если да, то как?
Буду очень рад любой помощи!
Мой код на данный момент:

Код: Выделить всё

    def run(self):
"""Run method that performs all the real work"""

# Create the dialog with elements (after translation) and keep reference
# Only create GUI ONCE in callback, so that it will only load when the plugin is started
if self.first_start == True:
self.first_start = False
self.dlg = ReformatToLKNamesDialog()

# Populate Richtlinien Combobox mit Richtliniennamen
self.populateRichtinie()

# Get value from Richtlinie
self.selected_RL = self.dlg.Richtlinie.currentText()
self.dlg.Richtlinie.currentTextChanged.connect(self.populateRLS19)

# Update the combobox with the field names
self.dlg.LayerName.layerChanged.connect(self.updateFields)

# show the dialog
self.dlg.show()

# Run the dialog event loop
result = self.dlg.exec_()
print(type(result))
# See if OK was pressed
if result:
# Write here your code which should run when you hit the button 'OK'
pass

def printRL(self):
self.selected_RL = self.dlg.Richtlinie.currentText()
if self.selected_RL:
print(self.dlg.Richtlinie.currentText())

def updateFields(self):
self.dlg.mFieldComboBox.clear()
selectedLayer = self.dlg.LayerName.currentLayer()
if selectedLayer:
self.dlg.mFieldComboBox.setLayer(selectedLayer)

def populateRichtinie(self):
richtlinien = ['RLS-19', 'BUB', 'RLS-90'] # may be added: 'All'
print(richtlinien)
self.dlg.Richtlinie.addItems([item for item in richtlinien])

def populateRLS19(self):
self.dlg.LKName.clear()
selectedRichtlinie = self.dlg.Richtlinie.currentText()
rlkurz = {'st':'sr', 'b':'ra', 'ls':'la'}
selctedRL_kurzel = rlkurz[selectedRichtlinie]
print(selctedRL_kurzel)
rl_kuerzel = [
'list', 'of', 'names']

rl_f = [selctedRL_kurzel+kuerzel for kuerzel in rl_kuerzel]
self.dlg.LKName.addItems([item for item in rl_f])

Изображение


Подробнее здесь: https://stackoverflow.com/questions/788 ... comboboxes

Вернуться в «Python»