根据 QGIS 中加载的图层在列表视图中动态创建复选框
Creating check boxes dynamically inside the listview based on the layers loaded in QGIS
我的 gui 中有两个名为 "Datacheckerlistview1" 和 "Datacheckerlistview2" 的列表视图。现在我已经在 QGIS 中加载了图层。根据加载的层数,我希望使用 "Datacheckerlistview1".. 内的层名称动态创建复选框(例如:如果加载了 4 层,我希望在内部动态创建 4 个复选框Datacheckerlistview1).我还在下面附上了我的代码,我没有在列表视图中找到任何带有下面代码的复选框。我是 Python 和 QGIS 的新手。帮助将不胜感激。
import os
from PyQt4 import QtGui, uic
FORM_CLASS, _ = uic.loadUiType(os.path.join(
os.path.dirname(__file__), 'DataCheckerModule_dialog_base.ui'))
class DataCheckerClassDialog(QtGui.QDialog, FORM_CLASS):
def __init__(self, parent=None):
"""Constructor."""
super(DataCheckerClassDialog, self).__init__(parent)
# Set up the user interface from Designer.
# After setupUI you can access any designer object by doing
# self.<objectname>, and you can use autoconnect slots - see
# http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html
# #widgets-and-dialogs-with-auto-connect
self.setupUi(self)
def dynamicCheckBoxes(self):
""" Adds Checkboxes inside the listview dynamically based on the number of layers loaded in QGIS. """
canvas = qgis.utils.iface.mapCanvas()
allLayers = canvas.layers()
model = QStandardItemModel()
for i in allLayers:
item = QStandardItem('Item %s' % allLayers.name())
check = Qt.checked if randint(0,1) == 1 else Qt.Unchecked
item.setCheckState(check)
item.setCheckable(True)
model.appendRow(item)
return model
DatacheckerlistView1.setModel(model)
DatacheckerlistView1.show()
并且在 Python 主文件中,
class DataCheckerClass:
QObject.connect(self.dlg.DatacheckerlistView1, SIGNAL("clicked()"), self.addLayers)
def addLayers(self):
super(DataCheckerClassDialog, self).dynamicCheckBoxes(self)
我在 python 主文件中进行了以下更改并且有效。感谢您的努力。
def addLayers(self):
""" Adds Checkboxes inside the listview dynamically based on the number of layers loaded in QGIS. """
canvas = qgis.utils.iface.mapCanvas()
allLayers = canvas.layers()
if canvas.layerCount > 0:
model = QStandardItemModel()
for i in allLayers:
item = QStandardItem('%s' % i.name())
item.setCheckable(True)
model.appendRow(item)
self.dlg.DatacheckerlistView1.setModel(model)
self.dlg.DatacheckerlistView1.show()
我的 gui 中有两个名为 "Datacheckerlistview1" 和 "Datacheckerlistview2" 的列表视图。现在我已经在 QGIS 中加载了图层。根据加载的层数,我希望使用 "Datacheckerlistview1".. 内的层名称动态创建复选框(例如:如果加载了 4 层,我希望在内部动态创建 4 个复选框Datacheckerlistview1).我还在下面附上了我的代码,我没有在列表视图中找到任何带有下面代码的复选框。我是 Python 和 QGIS 的新手。帮助将不胜感激。
import os
from PyQt4 import QtGui, uic
FORM_CLASS, _ = uic.loadUiType(os.path.join(
os.path.dirname(__file__), 'DataCheckerModule_dialog_base.ui'))
class DataCheckerClassDialog(QtGui.QDialog, FORM_CLASS):
def __init__(self, parent=None):
"""Constructor."""
super(DataCheckerClassDialog, self).__init__(parent)
# Set up the user interface from Designer.
# After setupUI you can access any designer object by doing
# self.<objectname>, and you can use autoconnect slots - see
# http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html
# #widgets-and-dialogs-with-auto-connect
self.setupUi(self)
def dynamicCheckBoxes(self):
""" Adds Checkboxes inside the listview dynamically based on the number of layers loaded in QGIS. """
canvas = qgis.utils.iface.mapCanvas()
allLayers = canvas.layers()
model = QStandardItemModel()
for i in allLayers:
item = QStandardItem('Item %s' % allLayers.name())
check = Qt.checked if randint(0,1) == 1 else Qt.Unchecked
item.setCheckState(check)
item.setCheckable(True)
model.appendRow(item)
return model
DatacheckerlistView1.setModel(model)
DatacheckerlistView1.show()
并且在 Python 主文件中,
class DataCheckerClass:
QObject.connect(self.dlg.DatacheckerlistView1, SIGNAL("clicked()"), self.addLayers)
def addLayers(self):
super(DataCheckerClassDialog, self).dynamicCheckBoxes(self)
我在 python 主文件中进行了以下更改并且有效。感谢您的努力。
def addLayers(self):
""" Adds Checkboxes inside the listview dynamically based on the number of layers loaded in QGIS. """
canvas = qgis.utils.iface.mapCanvas()
allLayers = canvas.layers()
if canvas.layerCount > 0:
model = QStandardItemModel()
for i in allLayers:
item = QStandardItem('%s' % i.name())
item.setCheckable(True)
model.appendRow(item)
self.dlg.DatacheckerlistView1.setModel(model)
self.dlg.DatacheckerlistView1.show()