На изображении вы можете видеть, что пользователь выбирает слой в 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