Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
comboBox w konsoli Pythona
24-04-2016, 21:52,
#1
comboBox w konsoli Pythona
Cześć, za cel postawiłem sobie napisanie wtyczki do Qgisa. W pierwszej kolejności chcę uzyskać działający kod w konsoli i tutaj pojawia się problem z wykorzystaniem rozwijanej listy z comboBox, kod się wykonuje do końca ale fakt wybory z listy jest pomijany (pętla przyjmuje domyślna wartość, czyli pierwszą i dla niej liczy). Może ktoś mnie nakieruje gdzie popełniam błąd, to są moje pierwsze kroki z programowaniem.
fragment kodu...
Kod:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
layer = iface.activeLayer()
#dodaj nowe puste kolumny
layer.dataProvider().addAttributes([QgsField('pow_mat', QVariant.Double),
                                    QgsField('Xgk', QVariant.Double),
                                    QgsField('Ygk', QVariant.Double),
                                    QgsField('v', QVariant.Double),
                                    QgsField('u', QVariant.Double)
                                    ])
layer.updateFields()
#ustaw index
idx_pow_mat = layer.fieldNameIndex('pow_mat')
idx_Xgk = layer.fieldNameIndex('Xgk')
idx_Ygk = layer.fieldNameIndex('Ygk')
idx_v = layer.fieldNameIndex('v')
idx_u = layer.fieldNameIndex('u')
#oblicz powierzchnie i umiesc ja w kolumnie pow_mat
layer.startEditing()
for f in layer.getFeatures():
  area = f.geometry().area()
  layer.changeAttributeValue(f.id(),idx_pow_mat, area)

layer.commitChanges()
#utworz rozwijana liste wyboru strefy
cb = QComboBox()
cb.addItems(['5','6','7','8'])
cb.resize(250,35)
cb.setWindowTitle('Wybierz strefe')
cb.show()
#ustaw zmienna z rozwijanej listy
list = [""]
layer.startEditing()
#wykonaj oblicze w oparciu o wybor z rozwijanej listy
for k in list:
  Pas = int(cb.currentText())
  if Pas == 5:
    for e in layer.getFeatures():
      e2 = QgsExpression("pow_mat+500000")
      e2.prepare(layer.pendingFields())
      value_e2 = e2.evaluate(e)
      layer.changeAttributeValue(e.id(), idx_Xgk, value_e2)
  elif Pas == 6:
    for e in layer.getFeatures():
      e2 = QgsExpression("pow_mat+6000000")
      e2.prepare(layer.pendingFields())
      value_e2 = e2.evaluate(e)
      layer.changeAttributeValue(e.id(), idx_Ygk, value_e2)
  elif Pas == 7:
    for e in layer.getFeatures():
      e2 = QgsExpression("pow_mat+7000000")
      e2.prepare(layer.pendingFields())
      value_e2 = e2.evaluate(e)
      layer.changeAttributeValue(e.id(), idx_Xgk, value_e2)
  elif Pas == 8:
    for e in layer.getFeatures():
      e2 = QgsExpression("pow_mat+8000000")
      e2.prepare(layer.pendingFields())
      value_e2 = e2.evaluate(e)
      layer.changeAttributeValue(e.id(), idx_Ygk, value_e2)
    pass#zajety, poczekaj na nacisniecie klawisza
  layer.commitChanges()

layer.startEditing()
#wyrazenie kolumna razy jakas wartosc
e3 = QgsExpression("Ygk*2")
e4 = QgsExpression("Xgk*4")

e3.prepare(layer.pendingFields())
e4.prepare(layer.pendingFields())

for l in layer.getFeatures():
  value_e3 = e3.evaluate(l)
  layer.changeAttributeValue(l.id(), idx_u, value_e3)

for o in layer.getFeatures():
  value_e4 = e4.evaluate(o)
  layer.changeAttributeValue(o.id(), idx_v, value_e4)

layer.commitChanges()

Aha, kod działa na warstwie poligonowej, docelowo ma tworzyć nowe kolumny w oparciu o kolumny pomocnicze, które na końcu są usuwane. Użytkownik ma jedynie wybrać jedną wartość spośród 4 dostępnych (rozwijana list) w oparciu o którą dokonuje się jedno z obliczeń. Na chwilę obecna wygląda to trochę chaotycznie, ale mam nadzieję że uda mi się to uprościć i zrobić z tego działający skrypt i wtyczkę.


Wiadomości w tym wątku
comboBox w konsoli Pythona - przez sevil37 - 24-04-2016, 21:52

Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Nie wykryto wsparcia pythona aasky 4 4 057 16-11-2021, 22:31
Ostatni post: xmaziax
  input w konsoli pythona Kzyhó 0 3 414 20-03-2019, 12:48
Ostatni post: Kzyhó
  problem z wtyczką pythona i wydrukiem KarolinaDko 2 8 334 06-11-2018, 18:44
Ostatni post: jerresso
  Kadrowanie rastra - błąd kodu Pythona Niebieska 12 42 400 20-10-2016, 20:45
Ostatni post: Niebieska
  Błąd wtyczki MetaSearch (błąd pythona) norek_norek 0 9 334 02-01-2015, 10:28
Ostatni post: norek_norek
  Akcje Pythona - dodawanie warstw do grupy tomalos 17 77 486 23-09-2011, 12:55
Ostatni post: tomalos
  Qgis 1.6 Trunk, błąd Pythona tomalos 2 16 150 28-07-2010, 17:02
Ostatni post: tomalos
  błędy Pythona koralowa 1 15 644 02-06-2010, 19:35
Ostatni post: borys

Skocz do: