class TagSelecion(QGroupBox): def __init__(self, parent=None, opc=None): super(TagSelecion, self).__init__() self.opc = opc self.setTitle('Tag Selection') self.layout = QVBoxLayout(self) self.button_refresh = QPushButton('Refresh', self) self.button_refresh.clicked.connect(self._refresh) self.layout.addWidget(self.button_refresh) self.button_all = QPushButton('Select All', self) self.button_all.clicked.connect(self._select_all) self.layout.addWidget(self.button_all) self.button_none = QPushButton('Select None', self) self.button_none.clicked.connect(self._select_none) self.layout.addWidget(self.button_none) self.hbox_pattern = QHBoxLayout(self) self.button_pattern = QPushButton('Toggle Pattern', self) self.button_pattern.clicked.connect(self._toggle_pattern) self._next_toggle = 'select' self.hbox_pattern.addWidget(self.button_pattern) self.le_pattern = QLineEdit(self) self.le_pattern.setPlaceholderText('Pattern') self.hbox_pattern.addWidget(self.le_pattern) self.layout.addLayout(self.hbox_pattern) self.label = QLabel('Select Tags', self) self.layout.addWidget(self.label) self.listw_tags = QListWidget(self) self.listw_tags.setSelectionMode(QAbstractItemView.MultiSelection) self.layout.addWidget(self.listw_tags) self.setLayout(self.layout) def selected_tags(self): return [item.text() for item in self.listw_tags.selectedItems()] def _refresh(self): self.tags_all = opcda.tags(self.opc) self.listw_tags.clear() self.listw_tags.addItems(self.tags_all) def _select_all(self): self.listw_tags.selectAll() def _select_none(self): self.listw_tags.clearSelection() def _toggle_pattern(self): toggle = self._next_toggle if toggle is 'select': self._next_toggle = 'deselect' elif toggle is 'deselect': self._next_toggle = 'select' pattern = self.le_pattern.text().lower() if len(pattern) is 0: matched_tags = [] else: matched_tags = [ tag for tag in self.tags_all if pattern in tag.lower() ] for tag in matched_tags: item = self.listw_tags.findItems(tag, Qt.MatchExactly)[0] if toggle is 'select': item.setSelected(True) elif toggle is 'deselect': item.setSelected(False)