Cписок выбора полей на Python

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Cписок выбора полей на Python

Сообщение Максим Дубинин » 30 янв 2009, 08:51

скажем если список полей получается как-то вот так:

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

fProvider = vlayer.dataProvider()
myFields = fProvider.fields()
myFieldsNames={}
i=0
for afield in myFields:
  i+=1
  myFields[i] = afield.name()
то как на python|QT будет выглядеть фрагмент кода для диалогового окошка со списком значений из которого можно выбрать одно? неужели надо форму делать в QT Designer сначала?

PS: прошу учесть, это один из первых опытов на python, пожалейте
пристегивайтесь, турбулентность прямо по курсу

Lynx
Интересующийся
Сообщения: 29
Зарегистрирован: 04 ноя 2008, 00:40
Репутация: 0

Re: Cписок выбора полей на Python

Сообщение Lynx » 31 янв 2009, 02:15

Мне не совсем понятно как работает приведенный код... Для получения списка имен полей, я бы сделал что-нибудь подобное:

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

fProvider = vlayer.dataProvider()
myFields = fProvider.fields()
myFieldsNames= [f.name() for f in myFields.values()]
Далее, графический интерфейс необязательно создавать в дизайнере. Его можно сделать динамически ("на лету"). Вот пример простенького скрипта, в котором создается диалоговое окно с QGroupBox.

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

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class MyDialog(QDialog):
	def __init__(self, parent=None):
		QDialog.__init__(self)
		print "init"
		gr = QGroupBox(self)
		vbox = QVBoxLayout(gr)
		names = ['1','2','3']
		self.rbl = [QRadioButton(name, gr) for name in names]
		self.rbl[0].setChecked(True)
		for rb in self.rbl: vbox.addWidget(rb)
		gr.adjustSize()

		hbox = QHBoxLayout()
		pbnYes = QPushButton('Yes', self)
		pbnNo = QPushButton('No', self)
		hbox.addWidget(pbnYes)
		hbox.addWidget(pbnNo)

		layout = QVBoxLayout(self)
		layout.addWidget(gr)
		layout.addLayout(hbox)

		self.connect(pbnYes, SIGNAL("clicked()"), SLOT("accept()"))
		self.connect(pbnNo, SIGNAL("clicked()"), SLOT("reject()"))
	def selectedAttr(self):
		return [rb.text() for rb in self.rbl if rb.isChecked()]

if __name__ == '__main__':
	print "hello"
	a = QApplication([])
	d = MyDialog()
	if d.exec_():
		print d.selectedAttr()

Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость