def make_row(self, state, title): item = QStandardItem(title) if title else QStandardItem() item.setFlags( Qt.ItemIsUserCheckable | Qt.ItemIsTristate | Qt.ItemIsEnabled | Qt.ItemIsEditable) item.setData(self.state_to_check_state(state), Qt.CheckStateRole) return [item]
def addSelection(self, selection, name=""): self._selections.append(selection) item = QStandardItem(selection.name) item.setFlags(item.flags() ^ Qt.ItemIsDropEnabled) self._listModel.appendRow(item) self.setSelectionModified(False) return item
def rowFromData(self, data): row = [] for c in data: item = QStandardItem(unicode(c)) item.setFlags( (item.flags() | Qt.ItemIsEditable) if self.editable else (item.flags() & ~Qt.ItemIsEditable) ) row.append( item ) return row
def _append_to_standard_item(self, item, checklist): if checklist is not None: for child_checklist in checklist: childitem = QStandardItem(child_checklist.name) childitem.setFlags( Qt.ItemIsEnabled ) item.appendRow([childitem]) self._append_to_standard_item(childitem, child_checklist.children)
def sum_item(value): item = QStandardItem() item.setData(value, Qt.DisplayRole) item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setFlags(Qt.ItemIsEnabled) item.setFont(bold_font) return item
def _cat_desc_to_std_item(self, desc): """ Create a QStandardItem for the category description. """ item = QStandardItem() item.setText(desc.name) if desc.icon: icon = desc.icon else: icon = "icons/default-category.svg" icon = icon_loader.from_description(desc).get(icon) item.setIcon(icon) if desc.background: background = desc.background else: background = DEFAULT_COLOR background = NAMED_COLORS.get(background, background) brush = QBrush(QColor(background)) item.setData(brush, self.BACKGROUND_ROLE) tooltip = desc.description if desc.description else desc.name item.setToolTip(tooltip) item.setFlags(Qt.ItemIsEnabled) item.setData(desc, self.CATEGORY_DESC_ROLE) return item
def _cat_desc_to_std_item(self, desc): """ Create a QStandardItem for the category description. """ item = QStandardItem() item.setText(desc.name) if desc.icon: icon = desc.icon else: icon = "icons/default-category.svg" icon = icon_loader.from_description(desc).get(icon) item.setIcon(icon) if desc.background: background = desc.background else: background = DEFAULT_COLOR background = NAMED_COLORS.get(background, background) brush = QBrush(QColor(background)) item.setData(brush, self.BACKGROUND_ROLE) tooltip = desc.description if desc.description else desc.name item.setToolTip(tooltip) item.setFlags(Qt.ItemIsEnabled) item.setData(QVariant(desc), self.CATEGORY_DESC_ROLE) return item
def setupChecklist(widget, names, checks = None): tp = type(widget) # Prepare checks if checks is None: checks = [] for name in names: checks.append(Qt.Unchecked) else: newChecks = [] for check in checks: if check: newChecks.append(Qt.Checked) else: newChecks.append(Qt.Unchecked) checks = newChecks ## QListView if tp is QListView: model = QStandardItemModel() for i in xrange(len(names)): item = QStandardItem(names[i]) item.setCheckable(True) item.setCheckState(checks[i]) model.appendRow(item) widget.setModel(model) ## QListWidget elif tp is QListWidget: for i in xrange(len(names)): item = QListWidgetItem(names[i]) item.setFlags(Qt.ItemFlags(48)) # 48 = checkable(16), enabled(32) item.setCheckState(checks[i]) widget.addItem(item) ## NOT SUPPORTED else: raise TypeError('Class ' + str(tp) + ' is not supported.')
def addParentItem(self, category): item = QStandardItem(category) item.setFlags(item.flags() & ~(Qt.ItemIsEnabled | Qt.ItemIsSelectable)) item.setData("parent", Qt.AccessibleDescriptionRole) font = item.font() font.setBold(True) item.setFont(font) self.model().appendRow(item)
def update_model(self, model, schema, profile): """ Update the model by retrieving the profile given in database """ menudict = {} with self.transaction(): cur = self.connection.cursor() select = """ select name, profile, model_index, datasource_uri from {}.{} where profile = '{}' """.format(schema, self.table, profile) cur.execute(select) rows = cur.fetchall() model.clear() for name, profile, model_index, datasource_uri in self.sortby_modelindex( rows): menu = model.invisibleRootItem() indexes = json.loads(model_index) parent = '' for idx, subname in indexes[:-1]: parent += '{}-{}/'.format(idx, subname) if parent in menudict: # already created entry menu = menudict[parent] continue # create menu item = QStandardItem(subname) uri_struct = QgsMimeDataUtils.Uri(datasource_uri) item.setData(uri_struct) item.setIcon( QIcon(':/plugins/MenuBuilder/resources/menu.svg')) item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsUserCheckable | Qt.ItemIsEnabled | Qt.ItemIsDropEnabled | Qt.ItemIsEditable) item.setWhatsThis("menu") menu.appendRow(item) menudict[parent] = item # set current menu to the new created item menu = item # add leaf (layer item) item = QStandardItem(name) uri_struct = QgsMimeDataUtils.Uri(datasource_uri) # fix layer name instead of table name # usefull when the layer has been renamed in menu uri_struct.name = name if uri_struct.providerKey in ICON_MAPPER: item.setIcon(QIcon(ICON_MAPPER[uri_struct.providerKey])) item.setData(uri_struct) # avoid placing dragged layers on it item.setDropEnabled(False) if uri_struct.providerKey == 'postgres': # set tooltip to postgres comment comment = self.get_table_comment(uri_struct.uri) item.setToolTip(comment) menudict[parent].appendRow(item)
def _sum_item(value, border=""): item = QStandardItem() item.setData(value, Qt.DisplayRole) item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setFlags(Qt.ItemIsEnabled) item.setFont(bold_font) item.setData(border, BorderRole) item.setData(QColor(192, 192, 192), BorderColorRole) return item
def rowFromData(self, data): row = [] for c in data: item = QStandardItem(unicode(c)) item.setFlags((item.flags() | Qt.ItemIsEditable) if self.editable else ( item.flags() & ~Qt.ItemIsEditable)) row.append(item) return row
def update_model(self, model, schema, profile): """ Update the model by retrieving the profile given in database """ menudict = {} with self.transaction(): cur = self.connection.cursor() select = """ select name, profile, model_index, datasource_uri from {}.{} where profile = '{}' """.format(schema, self.table, profile) cur.execute(select) rows = cur.fetchall() model.clear() for name, profile, model_index, datasource_uri in self.sortby_modelindex(rows): menu = model.invisibleRootItem() indexes = json.loads(model_index) parent = '' for idx, subname in indexes[:-1]: parent += '{}-{}/'.format(idx, subname) if parent in menudict: # already created entry menu = menudict[parent] continue # create menu item = QStandardItem(subname) uri_struct = QgsMimeDataUtils.Uri(datasource_uri) item.setData(uri_struct) item.setIcon(QIcon(':/plugins/MenuBuilder/resources/menu.svg')) item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsUserCheckable | Qt.ItemIsEnabled | Qt.ItemIsDropEnabled | Qt.ItemIsEditable) item.setWhatsThis("menu") menu.appendRow(item) menudict[parent] = item # set current menu to the new created item menu = item # add leaf (layer item) item = QStandardItem(name) uri_struct = QgsMimeDataUtils.Uri(datasource_uri) # fix layer name instead of table name # usefull when the layer has been renamed in menu uri_struct.name = name if uri_struct.providerKey in ICON_MAPPER: item.setIcon(QIcon(ICON_MAPPER[uri_struct.providerKey])) item.setData(uri_struct) # avoid placing dragged layers on it item.setDropEnabled(False) if uri_struct.providerKey == 'postgres': # set tooltip to postgres comment comment = self.get_table_comment(uri_struct.uri) item.setToolTip(comment) menudict[parent].appendRow(item)
def set_dict(self, dict): self._dict = dict self.clear() self.setHorizontalHeaderLabels(["Key", "Value"]) for key, value in sorted(dict.items()): key_item = QStandardItem(str(key)) value_item = QStandardItem(str(value)) key_item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) value_item.setFlags(value_item.flags() | Qt.ItemIsEditable) self.appendRow([key_item, value_item])
def _update(self): # Update the displayed confusion matrix if self.results is not None and self.selected_learner: index = self.selected_learner[0] cmatrix = confusion_matrix(self.results, index) colsum = cmatrix.sum(axis=0) rowsum = cmatrix.sum(axis=1) total = rowsum.sum() if self.selected_quantity == 0: value = lambda i, j: int(cmatrix[i, j]) elif self.selected_quantity == 1: priors = numpy.outer(rowsum, colsum) / total value = lambda i, j: \ "{} / {:5.3f}".format(cmatrix[i, j], priors[i, j]) elif self.selected_quantity == 2: value = lambda i, j: \ ("{:2.1f} %".format(100 * cmatrix[i, j] / colsum[i]) if colsum[i] else "N/A") elif self.selected_quantity == 3: value = lambda i, j: \ ("{:2.1f} %".format(100 * cmatrix[i, j] / rowsum[i]) if colsum[i] else "N/A") else: assert False model = self.tablemodel for i, row in enumerate(cmatrix): for j, _ in enumerate(row): item = model.item(i, j) if item is None: item = QStandardItem() item.setData(value(i, j), Qt.DisplayRole) item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) model.setItem(i, j, item) font = model.invisibleRootItem().font() bold_font = QFont(font) bold_font.setBold(True) def sum_item(value): item = QStandardItem() item.setData(value, Qt.DisplayRole) item.setTextAlignment(Qt.AlignRight | Qt.AlignVCenter) item.setFlags(Qt.ItemIsEnabled) item.setFont(bold_font) return item N = len(colsum) for i in range(N): model.setItem(N, i, sum_item(int(colsum[i]))) model.setItem(i, N, sum_item(int(rowsum[i]))) model.setItem(N, N, sum_item(int(total)))
def __init__(self, engine, gui_parent, parent=None): """ Constructor @param parent reference to the parent widget (QWidget) """ super().__init__(parent) self.setupUi(self) self.setWindowTitle("Enregistrement d'une formation") self.engine = engine self.dateEdit.setDate(pendulum.now('Europe/Paris')) self.cmr_bdd = Bdd_Cmr(self.engine) gen_cmr = self.cmr_bdd.recup_cmr_en_activite() self.remplir_tableau_cmr(next(gen_cmr)) # self.threadpool = QThreadPool() self.gui_parent = gui_parent ####Threads self.thread_finish = False # self.affectation_lancement_threads() init_domaine = Insertion_Domaine(self.engine) areas = init_domaine.recuperation_domaine() # print(areas) self.model = QStandardItemModel((len(areas) + 1), 1) # 5 rows, 1 col firstItem = QStandardItem("---- Select domaine(s) ----") firstItem.setBackground(QBrush(QColor(200, 200, 200))) firstItem.setSelectable(False) self.model.setItem(0, 0, firstItem) for i, area in enumerate(areas): item = QStandardItem(area) item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) item.setData(Qt.Unchecked, Qt.CheckStateRole) self.model.setItem(i + 1, 0, item) self.comboBox_domaine.setModel(self.model) self.gui_parent.formation_a_modifier.connect( self.reaffectation_formation)
def addGroup(self, name = None, metadata = None): model = self.model() group_item = QStandardItem(name or 'New Group') group_item.setFlags(Qt.ItemIsSelectable|Qt.ItemIsEditable) group_item.setEnabled(True) if metadata: group_item.setText('Metadata') group_item.setDropEnabled(True) group_item.setDragEnabled(True) group_item.setCheckable(True) group_item.setCheckState(Qt.Checked) group_item.setIcon(QIcon(os.path.join(os.path.dirname(__file__),"group.png"))) model.appendRow([group_item]) if not name: self.setCurrentIndex(model.indexFromItem(group_item)) return group_item
def add_parameters(root, parameter): if parameter.is_scope: name_node = QStandardItem(parameter.name) name_node.setFlags(Qt.NoItemFlags | Qt.ItemIsEnabled) name_node.setData(parameter, Qt.UserRole + 1) for obj in parameter.objects: add_parameters(name_node, obj) root.appendRow(name_node) elif parameter.is_definition: name_node = QStandardItem(parameter.name) name_node.setFlags(Qt.NoItemFlags | Qt.ItemIsEnabled) name_node.setData(parameter, Qt.UserRole + 1) value_node = QStandardItem(str(parameter.extract())) value_node.setData(parameter, Qt.UserRole + 1) root.appendRow([name_node, value_node]) else: raise RuntimeError('Handle This!')
def put_stream(self, stream): self.stream_history.append([]) client_ip, client_port = stream.client.getpeername() server_ip, server_port = stream.server.getpeername() proto = stream.proto_name ts = datetime.fromtimestamp(time()).strftime('%Y-%m-%d %H:%M:%S') vals = [client_ip, client_port, server_ip, server_port, proto, ts] items = [] for val in vals: item = QStandardItem(str(val)) item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) items.append(item) self.streammodel.appendRow(items) self.streamtable.resizeColumnsToContents()
def run(self): """rempli le combobox domaine et cree la possibilité de checked des items""" init_domaine = Insertion_Domaine(self.engine) areas = init_domaine.recuperation_domaine() self.model = QStandardItemModel((len(areas) + 1), 1) # 5 rows, 1 col firstItem = QStandardItem("---- Select domaine(s) ----") firstItem.setBackground(QBrush(QColor(200, 200, 200))) firstItem.setSelectable(False) self.model.setItem(0, 0, firstItem) for i, area in enumerate(areas): item = QStandardItem(area) item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) item.setData(Qt.Unchecked, Qt.CheckStateRole) self.model.setItem(i + 1, 0, item) self.signals.signalmodel_dispo.emit(self.model)
def _widget_desc_to_std_item(self, desc, category): """ Create a QStandardItem for the widget description. """ item = QStandardItem(desc.name) item.setText(desc.name) if desc.icon: icon = desc.icon else: icon = "icons/default-widget.svg" icon = icon_loader.from_description(desc).get(icon) item.setIcon(icon) # This should be inherited from the category. background = None if desc.background: background = desc.background elif category.background: background = category.background else: background = DEFAULT_COLOR if background is not None: background = NAMED_COLORS.get(background, background) brush = QBrush(QColor(background)) item.setData(brush, self.BACKGROUND_ROLE) tooltip = tooltip_helper(desc) style = "ul { margin-top: 1px; margin-bottom: 1px; }" tooltip = TOOLTIP_TEMPLATE.format(style=style, tooltip=tooltip) item.setToolTip(tooltip) item.setWhatsThis(whats_this_helper(desc)) item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) item.setData(QVariant(desc), self.WIDGET_DESC_ROLE) # Create the action for the widget_item action = self.create_action_for_item(item) item.setData(QVariant(action), self.WIDGET_ACTION_ROLE) return item
def _widget_desc_to_std_item(self, desc, category): """ Create a QStandardItem for the widget description. """ item = QStandardItem(desc.name) item.setText(desc.name) if desc.icon: icon = desc.icon else: icon = "icons/default-widget.svg" icon = icon_loader.from_description(desc).get(icon) item.setIcon(icon) # This should be inherited from the category. background = None if desc.background: background = desc.background elif category.background: background = category.background else: background = DEFAULT_COLOR if background is not None: background = NAMED_COLORS.get(background, background) brush = QBrush(QColor(background)) item.setData(brush, self.BACKGROUND_ROLE) tooltip = tooltip_helper(desc) style = "ul { margin-top: 1px; margin-bottom: 1px; }" tooltip = TOOLTIP_TEMPLATE.format(style=style, tooltip=tooltip) item.setToolTip(tooltip) item.setWhatsThis(whats_this_helper(desc)) item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) item.setData(desc, self.WIDGET_DESC_ROLE) # Create the action for the widget_item action = self.create_action_for_item(item) item.setData(action, self.WIDGET_ACTION_ROLE) return item
def addCategory( self, category, items ): # Items root = QStandardItem( category ) root.setFlags( Qt.ItemIsEnabled | Qt.ItemIsSelectable ) self._model.appendRow( root ) # Styling root.setFlags( Qt.ItemIsEnabled ) f = root.font() f.setPointSize( 10 ) f.setBold( True ) root.setFont( f ) for item in items: ins = item() child = QStandardItem( QIcon.fromTheme( ins.iconname ), ins.description ) child.setData( QVariant( item ), Qt.UserRole ) child.setFlags( Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled ) if ins.__doc__ is not None and len( ins.__doc__ ) > 0: child.setWhatsThis( ins.__doc__ ) root.appendRow( child )
def addCategory(self, category, items): # Items root = QStandardItem(category) root.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) self._model.appendRow(root) # Styling root.setFlags(Qt.ItemIsEnabled) f = root.font() f.setPointSize(10) f.setBold(True) root.setFont(f) for item in items: ins = item() child = QStandardItem(QIcon.fromTheme(ins.iconname), ins.description) child.setData(QVariant(item), Qt.UserRole) child.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled) if ins.__doc__ is not None and len(ins.__doc__) > 0: child.setWhatsThis(ins.__doc__) root.appendRow(child)
def setupUi(self, MainWindow): self.centralwidget = QtGui.QWidget(MainWindow) self.qbox = QBoxLayout(QBoxLayout.TopToBottom, self.centralwidget) self.centralwidget.setLayout(self.qbox) #####Mots-clés### self.keywords_label = QtGui.QLabel(self.centralwidget) self.keywords_label.setText(_translate("AdminWindow", "Mots-clés de recherche", None)) self.keywords_help = QtGui.QPushButton(self.centralwidget) self.keywords_help.setIcon(QIcon('./share/icon/point interrogation.png')) self.keywords_help.setIconSize(QSize(10,10)) self.hbox_keywords = QtGui.QHBoxLayout() self.hbox_keywords.addWidget(self.keywords_label) self.hbox_keywords.addWidget(self.keywords_help) self.hbox_keywords.setContentsMargins(0, 0, 120, 0) self.keywords_entry = QtGui.QLineEdit(self.centralwidget) self.vbox_keywords = QtGui.QVBoxLayout() self.vbox_keywords.addLayout(self.hbox_keywords) self.vbox_keywords.addWidget(self.keywords_entry) self.vbox_keywords.setContentsMargins(0, 0, 0, 5) ###Région### self.region_label = QtGui.QLabel(self.centralwidget) self.region_label.setText(_translate("AdminWindow", "Région (5 choix maximum)", None)) self.region_list = QtGui.QListView(self.centralwidget) self.vbox_region = QtGui.QVBoxLayout() self.vbox_region.addWidget(self.region_label) self.vbox_region.addWidget(self.region_list) self.vbox_region.setContentsMargins(0, 0, 0, 5) ###Mobilité### self.mobilite_label = QtGui.QLabel(self.centralwidget) self.mobilite_label.setText(_translate("AdminWindow", "Mobilité", None)) self.mobilite_combobox = QtGui.QComboBox(self.centralwidget) self.vbox_mobilite = QtGui.QVBoxLayout() self.vbox_mobilite.addWidget(self.mobilite_label) self.vbox_mobilite.addWidget(self.mobilite_combobox) self.vbox_mobilite.setContentsMargins(0, 0, 0, 5) ###Salaire### self.salaire_label = QtGui.QLabel(self.centralwidget) self.salaire_label.setText(_translate("AdminWindow", "Salaire", None)) self.salaire_combobox = QtGui.QComboBox(self.centralwidget) self.vbox_salaire = QtGui.QVBoxLayout() self.vbox_salaire.addWidget(self.salaire_label) self.vbox_salaire.addWidget(self.salaire_combobox) self.vbox_salaire.setContentsMargins(0, 0, 0, 5) ###Disponibilité### self.disponibilite_label = QtGui.QLabel(self.centralwidget) self.disponibilite_label.setText(_translate("AdminWindow", "Disponibilité", None)) self.disponibilite_list = QtGui.QListView(self.centralwidget) self.vbox_disponibilite = QtGui.QVBoxLayout() self.vbox_disponibilite.addWidget(self.disponibilite_label) self.vbox_disponibilite.addWidget(self.disponibilite_list) self.vbox_disponibilite.setContentsMargins(0, 0, 0, 5) ###Fraîcheur### self.fraicheur_label = QtGui.QLabel(self.centralwidget) self.fraicheur_label.setText(_translate("AdminWindow", "Fraîcheur", None)) self.fraicheur_combobox = QtGui.QComboBox(self.centralwidget) self.vbox_fraicheur = QtGui.QVBoxLayout() self.vbox_fraicheur.addWidget(self.fraicheur_label) self.vbox_fraicheur.addWidget(self.fraicheur_combobox) self.vbox_fraicheur.setContentsMargins(0, 0, 0, 5) ###Nombre de CVs### self.cv_number_label = QtGui.QLabel(self.centralwidget) self.cv_number_label.setText(_translate("AdminWindow", "Nombre de CV", None)) self.cv_number_entry = QtGui.QLineEdit(self.centralwidget) self.cv_number_entry.setInputMethodHints(QtCore.Qt.ImhNone) self.cv_number_entry.setText("50") self.vbox_cv_number = QtGui.QVBoxLayout() self.vbox_cv_number.addWidget(self.cv_number_label) self.vbox_cv_number.addWidget(self.cv_number_entry) self.vbox_cv_number.setContentsMargins(0, 0, 0, 5) ###Progression### self.progression_label = QtGui.QLabel(self.centralwidget) self.progression_label.setText(_translate("AdminWindow", "Progression", None)) self.progression_text = QtGui.QTextBrowser(self.centralwidget) self.vbox_progression = QtGui.QVBoxLayout() self.vbox_progression.addWidget(self.progression_label) self.vbox_progression.addWidget(self.progression_text) self.vbox_progression.setContentsMargins(0, 0, 0, 5) ###Bouton de lancement### self.run_button = QtGui.QPushButton(self.centralwidget) self.run_button.setText(_translate("AdminWindow", "Lancer la recherche", None)) ###Ajout a la fenetre principale### self.qbox.addLayout(self.vbox_keywords) self.qbox.addLayout(self.vbox_region) self.qbox.addLayout(self.vbox_mobilite) self.qbox.addLayout(self.vbox_salaire) self.qbox.addLayout(self.vbox_disponibilite) self.qbox.addLayout(self.vbox_fraicheur) self.qbox.addLayout(self.vbox_cv_number) self.qbox.addLayout(self.vbox_progression) self.qbox.addWidget(self.run_button) MainWindow.setCentralWidget(self.centralwidget) ###Barre de menu### MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) self.menuFichier = QtGui.QMenu(self.menubar) self.menuEdition = QtGui.QMenu(self.menubar) self.menuAide = QtGui.QMenu(self.menubar) MainWindow.setMenuBar(self.menubar) self.about_action = QtGui.QAction(MainWindow) self.admin_action = QtGui.QAction(MainWindow) self.exit_action = QtGui.QAction(MainWindow) self.menuFichier.addAction(self.admin_action) self.menuFichier.addAction(self.exit_action) self.menuAide.addAction(self.about_action) self.menubar.addAction(self.menuFichier.menuAction()) self.menubar.addAction(self.menuAide.menuAction()) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) # Values for combobox staticsxmlfile = "statics.xml" region_list = tuple(toolbox.xml_reader(staticsxmlfile, "regions").split(',')) mobilite_list = tuple(toolbox.xml_reader(staticsxmlfile, "mobilite").split(',')) salaire_list = tuple(toolbox.xml_reader(staticsxmlfile, "salaire").split(',')) disponibilite_list = tuple(toolbox.xml_reader(staticsxmlfile, "disponibilite").split(',')) fraicheur_list = tuple(toolbox.xml_reader(staticsxmlfile, "fraicheur").split(',')) self.model = QStandardItemModel(self.region_list) for region in region_list: item = QStandardItem(region) item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) item.setData(QVariant(Qt.Unchecked), Qt.CheckStateRole) self.model.appendRow(item) self.region_list.setModel(self.model) self.model2 = QStandardItemModel(self.disponibilite_list) for disponibilite in disponibilite_list: item = QStandardItem(disponibilite) item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) item.setData(QVariant(Qt.Unchecked), Qt.CheckStateRole) self.model2.appendRow(item) self.disponibilite_list.setModel(self.model2) for element in mobilite_list: self.mobilite_combobox.addItem(element) for element in salaire_list: self.salaire_combobox.addItem(element) for element in fraicheur_list: self.fraicheur_combobox.addItem(element) # Action attached to buttons #################################################################### self.about_action.triggered.connect(self.about_window) self.admin_action.triggered.connect(self.admin_window) self.exit_action.triggered.connect(self.close) self.run_button.clicked.connect(self.run_program) self.keywords_help.clicked.connect(self.ouvrirDialogue)
def set_items(self, items): self.__items = items model = self.__model model.clear() model.setHorizontalHeaderLabels(["", "Name", "Version", "Action"]) for item in items: if isinstance(item, Installed): installed = True ins, dist = item name = dist.project_name summary = get_dist_meta(dist).get("Summary", "") version = ins.version if ins is not None else dist.version else: installed = False (ins,) = item dist = None name = ins.name summary = ins.summary version = ins.version updatable = is_updatable(item) item1 = QStandardItem() item1.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsUserCheckable | (Qt.ItemIsTristate if updatable else 0)) if installed and updatable: item1.setCheckState(Qt.PartiallyChecked) elif installed: item1.setCheckState(Qt.Checked) else: item1.setCheckState(Qt.Unchecked) item2 = QStandardItem(name) item2.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) item2.setToolTip(summary) item2.setData(item, Qt.UserRole) if updatable: version = "{} < {}".format(dist.version, ins.version) item3 = QStandardItem(version) item3.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) item4 = QStandardItem() item4.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) model.appendRow([item1, item2, item3, item4]) self.__view.resizeColumnToContents(0) self.__view.setColumnWidth( 1, max(150, self.__view.sizeHintForColumn(1))) self.__view.setColumnWidth( 2, max(150, self.__view.sizeHintForColumn(2))) if self.__items: self.__view.selectionModel().select( self.__view.model().index(0, 0), QItemSelectionModel.Select | QItemSelectionModel.Rows )
def _onAddAction(self): item = QStandardItem("") item.setFlags(item.flags() ^ Qt.ItemIsDropEnabled) self._listView.model().appendRow(item) self._listView.setCurrentIndex(item.index()) self._listView.edit(item.index())
def addItem(self, *args): """ Add a new entry in the list """ item = QStandardItem(*args) item.setFlags(item.flags() ^ Qt.ItemIsDropEnabled) self._listView.model().appendRow(item)
def set_groups(self, keys, groups, relevant_keys, relevant_items, all_values, uniquepos): """Set the current data groups and update the Group widget """ layout = QVBoxLayout() header_widths = [] header_views = [] palette = self.palette() all_values = all_values.keys() def for_print(rd): attrs = [] for d in rd: attr = Orange.data.ContinuousVariable(next(inactive_name_gen)) attr.attributes.update(d) attrs.append(attr) return Orange.data.Domain(attrs, None) for separatev, domain in [(None, for_print(relevant_items))] + groups: label = None if separatev is not None: ann_vals = " <b>|</b> ".join(["<b>{0}</ b> = {1}".format(key,val) \ for key, val in zip(keys, separatev)]) label = QLabel(ann_vals) model = QStandardItemModel() for i, attr in enumerate(domain.attributes): item = QStandardItem() if separatev is not None: isunique = uniquepos[separatev][i] else: isunique = all(a[i] for a in uniquepos.values()) if str(attr.name).startswith("!!missing "): # TODO: Change this to not depend on name header_text = ["{0}={1}".format(key, attr.attributes.get(key, "?")) \ for key in all_values if key not in relevant_items[i]] header_text = "\n".join(header_text) if header_text else "Empty" item.setData(header_text, Qt.DisplayRole) item.setFlags(Qt.NoItemFlags) item.setData(QColor(Qt.red), Qt.ForegroundRole) item.setData(palette.color(QPalette.Disabled, QPalette.Window), Qt.BackgroundRole) item.setData("Missing feature.", Qt.ToolTipRole) elif str(attr.name).startswith("!!inactive "): header_text = ["{0}={1}".format(key, attr.attributes.get(key, "?")) \ for key in all_values if key in relevant_items[i]] header_text = "\n".join(header_text) if header_text else "No descriptor" item.setData(header_text, Qt.DisplayRole) item.setData(palette.color(QPalette.Disabled, QPalette.Window), Qt.BackgroundRole) else: header_text = ["{0}={1}".format(key, attr.attributes.get(key, "?")) \ for key in all_values if key not in relevant_items[i]] header_text = "\n".join(header_text) if header_text else "Empty" item.setData(header_text, Qt.DisplayRole) item.setData(attr.name, Qt.ToolTipRole) if not isunique: item.setData(QColor(Qt.red), Qt.ForegroundRole) model.setHorizontalHeaderItem(i, item) attr_count = len(domain.attributes) view = MyHeaderView(Qt.Horizontal) view.setResizeMode(QHeaderView.Fixed) view.setModel(model) hint = view.sizeHint() view.setMaximumHeight(hint.height()) widths = [view.sectionSizeHint(i) for i in range(attr_count)] header_widths.append(widths) header_views.append(view) if label: layout.addWidget(label) layout.addWidget(view) layout.addSpacing(8) # Make all header sections the same width width_sum = 0 max_header_count = max([h.count() for h in header_views]) for i in range(max_header_count): max_width = max([w[i] for w in header_widths if i < len(w)] or [0]) for view in header_views: if i < view.count(): view.resizeSection(i, max_width) width_sum += max_width + 2 for h in header_views: h.setMinimumWidth(h.length() + 4) widget = QWidget() widget.setLayout(layout) widget.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Maximum) layout.activate() max_width = max(h.length() for h in header_views) + 20 left, _, right, _ = self.getContentsMargins() widget.setMinimumWidth(width_sum) widget.setMinimumWidth(max_width + left + right) self.groups_scroll_area.setWidget(widget)
def set_groups(self, keys, groups, relevant_keys, relevant_items, all_values, uniquepos): """Set the current data groups and update the Group widget """ layout = QVBoxLayout() header_widths = [] header_views = [] palette = self.palette() all_values = all_values.keys() def for_print(rd): attrs = [] for d in rd: attr = Orange.data.ContinuousVariable(next(inactive_name_gen)) attr.attributes.update(d) attrs.append(attr) return Orange.data.Domain(attrs, None) for separatev, domain in [(None, for_print(relevant_items))] + groups: label = None if separatev is not None: ann_vals = " <b>|</b> ".join(["<b>{0}</ b> = {1}".format(key,val) \ for key, val in zip(keys, separatev)]) label = QLabel(ann_vals) model = QStandardItemModel() for i, attr in enumerate(domain.attributes): item = QStandardItem() if separatev is not None: isunique = uniquepos[separatev][i] else: isunique = all(a[i] for a in uniquepos.values()) if str(attr.name).startswith( "!!missing " ): # TODO: Change this to not depend on name header_text = ["{0}={1}".format(key, attr.attributes.get(key, "?")) \ for key in all_values if key not in relevant_items[i]] header_text = "\n".join( header_text) if header_text else "Empty" item.setData(header_text, Qt.DisplayRole) item.setFlags(Qt.NoItemFlags) item.setData(QColor(Qt.red), Qt.ForegroundRole) item.setData( palette.color(QPalette.Disabled, QPalette.Window), Qt.BackgroundRole) item.setData("Missing feature.", Qt.ToolTipRole) elif str(attr.name).startswith("!!inactive "): header_text = ["{0}={1}".format(key, attr.attributes.get(key, "?")) \ for key in all_values if key in relevant_items[i]] header_text = "\n".join( header_text) if header_text else "No descriptor" item.setData(header_text, Qt.DisplayRole) item.setData( palette.color(QPalette.Disabled, QPalette.Window), Qt.BackgroundRole) else: header_text = ["{0}={1}".format(key, attr.attributes.get(key, "?")) \ for key in all_values if key not in relevant_items[i]] header_text = "\n".join( header_text) if header_text else "Empty" item.setData(header_text, Qt.DisplayRole) item.setData(attr.name, Qt.ToolTipRole) if not isunique: item.setData(QColor(Qt.red), Qt.ForegroundRole) model.setHorizontalHeaderItem(i, item) attr_count = len(domain.attributes) view = MyHeaderView(Qt.Horizontal) view.setResizeMode(QHeaderView.Fixed) view.setModel(model) hint = view.sizeHint() view.setMaximumHeight(hint.height()) widths = [view.sectionSizeHint(i) for i in range(attr_count)] header_widths.append(widths) header_views.append(view) if label: layout.addWidget(label) layout.addWidget(view) layout.addSpacing(8) # Make all header sections the same width width_sum = 0 max_header_count = max([h.count() for h in header_views]) for i in range(max_header_count): max_width = max([w[i] for w in header_widths if i < len(w)] or [0]) for view in header_views: if i < view.count(): view.resizeSection(i, max_width) width_sum += max_width + 2 for h in header_views: h.setMinimumWidth(h.length() + 4) widget = QWidget() widget.setLayout(layout) widget.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Maximum) layout.activate() max_width = max(h.length() for h in header_views) + 20 left, _, right, _ = self.getContentsMargins() widget.setMinimumWidth(width_sum) widget.setMinimumWidth(max_width + left + right) self.groups_scroll_area.setWidget(widget)
def main(icon_spec): app = QApplication(sys.argv) main_window = QMainWindow() def sigint_handler(*args): main_window.close() signal.signal(signal.SIGINT, sigint_handler) # the timer enables triggering the sigint_handler signal_timer = QTimer() signal_timer.start(100) signal_timer.timeout.connect(lambda: None) tool_bar = QToolBar() main_window.addToolBar(Qt.TopToolBarArea, tool_bar) table_view = QTableView() table_view.setSelectionBehavior(QAbstractItemView.SelectRows) table_view.setSelectionMode(QAbstractItemView.SingleSelection) table_view.setSortingEnabled(True) main_window.setCentralWidget(table_view) proxy_model = QSortFilterProxyModel() proxy_model.setFilterCaseSensitivity(Qt.CaseInsensitive) proxy_model.setFilterKeyColumn(1) table_view.setModel(proxy_model) proxy_model.layoutChanged.connect(table_view.resizeRowsToContents) item_model = QStandardItemModel() proxy_model.setSourceModel(item_model) # get all icons and their available sizes QIcon.setThemeName("gnome") icons = [] all_sizes = set([]) for context, icon_names in icon_spec: for icon_name in icon_names: icon = QIcon.fromTheme(icon_name) sizes = [] for size in icon.availableSizes(): size = (size.width(), size.height()) sizes.append(size) all_sizes.add(size) sizes.sort() icons.append({ 'context': context, 'icon_name': icon_name, 'icon': icon, 'sizes': sizes, }) all_sizes = list(all_sizes) all_sizes.sort() # input field for filter def filter_changed(value): proxy_model.setFilterRegExp(value) table_view.resizeRowsToContents() filter_line_edit = QLineEdit() filter_line_edit.setMaximumWidth(200) filter_line_edit.setPlaceholderText('Filter name') filter_line_edit.setToolTip('Filter name optionally using regular expressions (' + QKeySequence(QKeySequence.Find).toString() + ')') filter_line_edit.textChanged.connect(filter_changed) tool_bar.addWidget(filter_line_edit) # actions to toggle visibility of available sizes/columns def action_toggled(index): column = 2 + index table_view.setColumnHidden(column, not table_view.isColumnHidden(column)) table_view.resizeColumnsToContents() table_view.resizeRowsToContents() signal_mapper = QSignalMapper() for i, size in enumerate(all_sizes): action = QAction('%dx%d' % size, tool_bar) action.setCheckable(True) action.setChecked(True) tool_bar.addAction(action) action.toggled.connect(signal_mapper.map) signal_mapper.setMapping(action, i) # set tool tip and handle key sequence tool_tip = 'Toggle visibility of column' if i < 10: digit = ('%d' % (i + 1))[-1] tool_tip += ' (%s)' % QKeySequence('Ctrl+%s' % digit).toString() action.setToolTip(tool_tip) signal_mapper.mapped.connect(action_toggled) # label columns header_labels = ['context', 'name'] for width, height in all_sizes: header_labels.append('%dx%d' % (width, height)) item_model.setColumnCount(len(header_labels)) item_model.setHorizontalHeaderLabels(header_labels) # fill rows item_model.setRowCount(len(icons)) for row, icon_data in enumerate(icons): # context item = QStandardItem(icon_data['context']) item.setFlags(item.flags() ^ Qt.ItemIsEditable) item_model.setItem(row, 0, item) # icon name item = QStandardItem(icon_data['icon_name']) item.setFlags(item.flags() ^ Qt.ItemIsEditable) item_model.setItem(row, 1, item) for index_in_all_sizes, size in enumerate(all_sizes): column = 2 + index_in_all_sizes if size in icon_data['sizes']: # icon as pixmap to keep specific size item = QStandardItem('') pixmap = icon_data['icon'].pixmap(size[0], size[1]) item.setData(pixmap, Qt.DecorationRole) item.setFlags(item.flags() ^ Qt.ItemIsEditable) item_model.setItem(row, column, item) else: # single space to be sortable against icons item = QStandardItem(' ') item.setFlags(item.flags() ^ Qt.ItemIsEditable) item_model.setItem(row, column, item) table_view.resizeColumnsToContents() # manually set row heights because resizeRowsToContents is not working properly for row, icon_data in enumerate(icons): if len(icon_data['sizes']) > 0: max_size = icon_data['sizes'][-1] table_view.setRowHeight(row, max_size[1]) # enable focus find (ctrl+f) and toggle columns (ctrl+NUM) def main_window_keyPressEvent(self, event, old_keyPressEvent=QMainWindow.keyPressEvent): if event.matches(QKeySequence.Find): filter_line_edit.setFocus() return if event.modifiers() == Qt.ControlModifier and event.key() >= Qt.Key_0 and event.key() <= Qt.Key_9: index = event.key() - Qt.Key_1 if event.key() == Qt.Key_0: index += 10 action = signal_mapper.mapping(index) if action: action.toggle() return old_keyPressEvent(self, event) main_window.keyPressEvent = new.instancemethod(main_window_keyPressEvent, table_view, None) # enable copy (ctrl+c) name of icon to clipboard def table_view_keyPressEvent(self, event, old_keyPressEvent=QTableView.keyPressEvent): if event.matches(QKeySequence.Copy): selection_model = self.selectionModel() if selection_model.hasSelection(): index = selection_model.selectedRows()[0] source_index = self.model().mapToSource(index) item = self.model().sourceModel().item(source_index.row(), 1) icon_name = item.data(Qt.EditRole) app.clipboard().setText(icon_name.toString()) return old_keyPressEvent(self, event) table_view.keyPressEvent = new.instancemethod(table_view_keyPressEvent, table_view, None) print 'Icon Theme: ', QIcon.themeName() print 'Theme Search Paths:' for item in QIcon.themeSearchPaths(): print item main_window.showMaximized() return app.exec_()
class DataTypeKeysWidget(QWidget): dataTypeKeySelected = pyqtSignal(str) def __init__(self): QWidget.__init__(self) layout = QVBoxLayout() self.model = DataTypeKeysListModel() self.filter_model = DataTypeProxyModel(self.model) self.search_box = SearchBox() self.search_box.filterChanged.connect(self.setSearchString) layout.addWidget(self.search_box) data_type_model = QStandardItemModel(0, 1) item = QStandardItem("Select data types...") data_type_model.appendRow(item) self.__summary_item = QStandardItem("Summary") self.__summary_item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) self.__summary_item.setData(Qt.Checked, Qt.CheckStateRole) data_type_model.appendRow(self.__summary_item) self.__block_item = QStandardItem("Block") self.__block_item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) self.__block_item.setData(Qt.Checked, Qt.CheckStateRole) data_type_model.appendRow(self.__block_item) data_type_model.itemChanged.connect(self.onItemChanged) combo = QComboBox() combo.setModel(data_type_model) layout.addWidget(combo) self.data_type_keys_widget = QListView() self.data_type_keys_widget.setModel(self.filter_model) self.data_type_keys_widget.selectionModel().selectionChanged.connect(self.itemSelected) layout.addSpacing(15) layout.addWidget(self.data_type_keys_widget, 2) layout.addWidget(Legend("Default types", DataTypeKeysListModel.DEFAULT_DATA_TYPE)) layout.addWidget(Legend("Observations available", DataTypeKeysListModel.HAS_OBSERVATIONS)) self.setLayout(layout) def onItemChanged(self, item): assert isinstance(item, QStandardItem) checked = item.checkState()==Qt.Checked if item == self.__block_item: self.filter_model.setShowBlockKeys(checked) elif item == self.__summary_item: self.filter_model.setShowSummaryKeys(checked) def itemSelected(self): selected_item = self.getSelectedItem() if selected_item is not None: self.dataTypeKeySelected.emit(selected_item) def getSelectedItem(self): """ @rtype: str """ index = self.data_type_keys_widget.currentIndex() source_index = self.filter_model.mapToSource(index) item = self.model.itemAt(source_index) return item def selectDefault(self): self.data_type_keys_widget.setCurrentIndex(self.filter_model.index(0, 0)) def setSearchString(self, filter): self.filter_model.setFilterFixedString(filter)
def __init__(self, Minerals=None, string=None, flag=None): super(Regression_PLOT_PyQt, self).__init__() if string is not None: self.stringK, self.stringG, self.stringRho, self.user_input = string else: self.stringK = None self.stringG = None self.stringRho = None self.user_input = False self.resize(1400, 600) self.Minerals = Minerals self.dirty = False #self.user_input = user_input self.Minerals.original_flag() self.Minerals.read_data() self.table = QTableView() self.model = QStandardItemModel(25, 7, self) self.model.setHorizontalHeaderLabels([ 'flag', 'Water Content', 'Iron Content', 'K (Gpa)', 'G (Gpa)', 'Rho (g/cm³)', 'Reference' ]) for i in range(len(self.Minerals.Flag)): a = self.Minerals.Return_original_data(i) for j in range(0, 7): item = QStandardItem(str(a[j])) self.model.setItem(i, j, item) if j != 0: item.setFlags(Qt.ItemIsEnabled) item.setBackground(QColor(211, 211, 211)) if flag is not None: self.Minerals.change_flag(flag) for i in range(len(self.Minerals.Flag)): item = QStandardItem(str(self.Minerals.Flag[i])) self.model.setItem(i, 0, item) self.table.setModel(self.model) self.button = QPushButton('Update and use in thermoelastic model') self.button.clicked.connect(self.Update) self.button.setAutoDefault(False) self.button1 = QPushButton('Add data file ') self.button1.clicked.connect(self.Export) self.button1.setAutoDefault(False) self.layout = QGridLayout() self.label = QLabel() self.label.setText(''' Please input equation, Water: water content (wt%) and Fe: iron content (mol%) for example -2.41*Water-30*Fe+81,K'=4.1, ''') self.Kinput_formula = QLineEdit() self.Ginput_formula = QLineEdit() self.Rhoinput_formula = QLineEdit() if self.stringK is not None: self.Kinput_formula.setText(self.stringK) self.Ginput_formula.setText(self.stringG) self.Rhoinput_formula.setText(self.stringRho) self.Userinput() else: self.Kinput_formula.setText( self.Minerals.Show_fit_function(self.Minerals.function_K()[0], self.Minerals.function_K()[1], "K'", error=False)) self.Ginput_formula.setText( self.Minerals.Show_fit_function(self.Minerals.function_G()[0], self.Minerals.function_G()[1], "G'", error=False)) self.Rhoinput_formula.setText( self.Minerals.Show_fit_function( self.Minerals.function_Rho()[0], self.Minerals.function_Rho()[1], '', error=False)) self.Kinput_formula.returnPressed.connect(self.Kformula) self.Ginput_formula.returnPressed.connect(self.Gformula) self.Rhoinput_formula.returnPressed.connect(self.Rhoformula) #self.connect(self.Kinput_formula,SIGNAL("returnPressed()"),self.Kformula) #self.connect(self.Ginput_formula,SIGNAL("returnPressed()"),self.Gformula) #self.connect(self.Rhoinput_formula,SIGNAL("returnPressed()"),self.Rhoformula) self.user_change_confrim = QPushButton('Change to user input') self.user_change_confrim.clicked.connect(self.Userinput) self.user_change_confrim.setAutoDefault(False) self.extension = QWidget() self.extensionLayout = QGridLayout() self.extensionLayout.setContentsMargins(0, 0, 0, 0) labelK = QLabel() labelK.setText('K<sub>0</sub>=') labelG = QLabel() labelG.setText('G<sub>0</sub>=') labelRho = QLabel() labelRho.setText('Rho<sub>0</sub>=') self.extensionLayout.addWidget(labelK, 0, 0, 1, 3) self.extensionLayout.addWidget(labelG, 1, 0, 1, 3) self.extensionLayout.addWidget(labelRho, 2, 0, 1, 3) self.extensionLayout.addWidget(self.Kinput_formula, 0, 1, 1, 3) self.extensionLayout.addWidget(self.Ginput_formula, 1, 1, 1, 3) self.extensionLayout.addWidget(self.Rhoinput_formula, 2, 1, 1, 3) self.extensionLayout.addWidget(self.user_change_confrim, 3, 0, 9, 4) self.extension.setLayout(self.extensionLayout) self.check_change = QCheckBox("user input") self.check_change.setChecked(False) self.check_change.toggled.connect(self.extension.setVisible) #self.PLOT(switch=True) self.PLOT() self.layout.addWidget(self.table, 0, 1, 1, 17) self.layout.addWidget(self.button, 2, 0, 1, 9) self.layout.addWidget(self.button1, 2, 9, 1, 9) self.layout.addWidget(self.check_change, 3, 0, 1, 1) self.layout.addWidget(self.label, 3, 3, 1, 5) self.layout.addWidget(self.extension, 4, 0, 1, 9) self.setLayout(self.layout) self.extension.hide()
def main(icon_spec): app = QApplication(sys.argv) main_window = QMainWindow() def sigint_handler(*args): main_window.close() signal.signal(signal.SIGINT, sigint_handler) # the timer enables triggering the sigint_handler signal_timer = QTimer() signal_timer.start(100) signal_timer.timeout.connect(lambda: None) tool_bar = QToolBar() main_window.addToolBar(Qt.TopToolBarArea, tool_bar) table_view = QTableView() table_view.setSelectionBehavior(QAbstractItemView.SelectRows) table_view.setSelectionMode(QAbstractItemView.SingleSelection) table_view.setSortingEnabled(True) main_window.setCentralWidget(table_view) proxy_model = QSortFilterProxyModel() proxy_model.setFilterCaseSensitivity(Qt.CaseInsensitive) proxy_model.setFilterKeyColumn(1) table_view.setModel(proxy_model) proxy_model.layoutChanged.connect(table_view.resizeRowsToContents) item_model = QStandardItemModel() proxy_model.setSourceModel(item_model) # get all icons and their available sizes QIcon.setThemeName("gnome") icons = [] all_sizes = set([]) for context, icon_names in icon_spec: for icon_name in icon_names: icon = QIcon.fromTheme(icon_name) sizes = [] for size in icon.availableSizes(): size = (size.width(), size.height()) sizes.append(size) all_sizes.add(size) sizes.sort() icons.append({ 'context': context, 'icon_name': icon_name, 'icon': icon, 'sizes': sizes, }) all_sizes = list(all_sizes) all_sizes.sort() # input field for filter def filter_changed(value): proxy_model.setFilterRegExp(value) table_view.resizeRowsToContents() filter_line_edit = QLineEdit() filter_line_edit.setMaximumWidth(200) filter_line_edit.setPlaceholderText('Filter name') filter_line_edit.setToolTip( 'Filter name optionally using regular expressions (' + QKeySequence(QKeySequence.Find).toString() + ')') filter_line_edit.textChanged.connect(filter_changed) tool_bar.addWidget(filter_line_edit) # actions to toggle visibility of available sizes/columns def action_toggled(index): column = 2 + index table_view.setColumnHidden(column, not table_view.isColumnHidden(column)) table_view.resizeColumnsToContents() table_view.resizeRowsToContents() signal_mapper = QSignalMapper() for i, size in enumerate(all_sizes): action = QAction('%dx%d' % size, tool_bar) action.setCheckable(True) action.setChecked(True) tool_bar.addAction(action) action.toggled.connect(signal_mapper.map) signal_mapper.setMapping(action, i) # set tool tip and handle key sequence tool_tip = 'Toggle visibility of column' if i < 10: digit = ('%d' % (i + 1))[-1] tool_tip += ' (%s)' % QKeySequence('Ctrl+%s' % digit).toString() action.setToolTip(tool_tip) signal_mapper.mapped.connect(action_toggled) # label columns header_labels = ['context', 'name'] for width, height in all_sizes: header_labels.append('%dx%d' % (width, height)) item_model.setColumnCount(len(header_labels)) item_model.setHorizontalHeaderLabels(header_labels) # fill rows item_model.setRowCount(len(icons)) for row, icon_data in enumerate(icons): # context item = QStandardItem(icon_data['context']) item.setFlags(item.flags() ^ Qt.ItemIsEditable) item_model.setItem(row, 0, item) # icon name item = QStandardItem(icon_data['icon_name']) item.setFlags(item.flags() ^ Qt.ItemIsEditable) item_model.setItem(row, 1, item) for index_in_all_sizes, size in enumerate(all_sizes): column = 2 + index_in_all_sizes if size in icon_data['sizes']: # icon as pixmap to keep specific size item = QStandardItem('') pixmap = icon_data['icon'].pixmap(size[0], size[1]) item.setData(pixmap, Qt.DecorationRole) item.setFlags(item.flags() ^ Qt.ItemIsEditable) item_model.setItem(row, column, item) else: # single space to be sortable against icons item = QStandardItem(' ') item.setFlags(item.flags() ^ Qt.ItemIsEditable) item_model.setItem(row, column, item) table_view.resizeColumnsToContents() # manually set row heights because resizeRowsToContents is not working properly for row, icon_data in enumerate(icons): if len(icon_data['sizes']) > 0: max_size = icon_data['sizes'][-1] table_view.setRowHeight(row, max_size[1]) # enable focus find (ctrl+f) and toggle columns (ctrl+NUM) def main_window_keyPressEvent(self, event, old_keyPressEvent=QMainWindow.keyPressEvent): if event.matches(QKeySequence.Find): filter_line_edit.setFocus() return if event.modifiers() == Qt.ControlModifier and event.key( ) >= Qt.Key_0 and event.key() <= Qt.Key_9: index = event.key() - Qt.Key_1 if event.key() == Qt.Key_0: index += 10 action = signal_mapper.mapping(index) if action: action.toggle() return old_keyPressEvent(self, event) main_window.keyPressEvent = new.instancemethod(main_window_keyPressEvent, table_view, None) # enable copy (ctrl+c) name of icon to clipboard def table_view_keyPressEvent(self, event, old_keyPressEvent=QTableView.keyPressEvent): if event.matches(QKeySequence.Copy): selection_model = self.selectionModel() if selection_model.hasSelection(): index = selection_model.selectedRows()[0] source_index = self.model().mapToSource(index) item = self.model().sourceModel().item(source_index.row(), 1) icon_name = item.data(Qt.EditRole) app.clipboard().setText(icon_name.toString()) return old_keyPressEvent(self, event) table_view.keyPressEvent = new.instancemethod(table_view_keyPressEvent, table_view, None) print 'Icon Theme: ', QIcon.themeName() print 'Theme Search Paths:' for item in QIcon.themeSearchPaths(): print item main_window.showMaximized() return app.exec_()
def set_items(self, items): self.__items = items model = self.__model model.clear() model.setHorizontalHeaderLabels(["", "Name", "Version", "Action"]) for item in items: if isinstance(item, Installed): installed = True ins, dist = item name = dist.project_name summary = get_dist_meta(dist).get("Summary", "") version = ins.version if ins is not None else dist.version else: installed = False (ins, ) = item dist = None name = ins.name summary = ins.summary version = ins.version updatable = is_updatable(item) item1 = QStandardItem() item1.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsUserCheckable | (Qt.ItemIsTristate if updatable else 0)) if installed and updatable: item1.setCheckState(Qt.PartiallyChecked) elif installed: item1.setCheckState(Qt.Checked) else: item1.setCheckState(Qt.Unchecked) item2 = QStandardItem(name) item2.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) item2.setToolTip(summary) item2.setData(item, Qt.UserRole) if updatable: version = "{} < {}".format(dist.version, ins.version) item3 = QStandardItem(version) item3.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) item4 = QStandardItem() item4.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) model.appendRow([item1, item2, item3, item4]) self.__view.resizeColumnToContents(0) self.__view.setColumnWidth(1, max(150, self.__view.sizeHintForColumn(1))) self.__view.setColumnWidth(2, max(150, self.__view.sizeHintForColumn(2))) if self.__items: self.__view.selectionModel().select( self.__view.model().index(0, 0), QItemSelectionModel.Select | QItemSelectionModel.Rows)
def PLOT(self,switch=True): if self.dirty==False: #self.Minerals.Clean_content() params=[] for i in range(20): index=self.model.index(i,0) try: aa=(float(self.model.itemData(index)[0])) #print (aa) params.append(aa) except: break #print (params) self.Minerals.Change_data_from_table(params) #print ('wf') else: self.Minerals.read_data() self.model.clear() self.model.setHorizontalHeaderLabels(['flag','Water Content','Iron Content','K (Gpa)','G (Gpa)', 'Rho (g/cm3)','Reference']) for i in range(len(self.Minerals.Flag)): a=self.Minerals.Return_original_data(i) item = QStandardItem(str(self.Minerals.Flag[i])) self.model.setItem(i, 0,item) for j in range(1,7): item = QStandardItem(str(a[j])) self.model.setItem(i, j,item) if j != 0: item.setFlags(Qt.ItemIsEnabled) item.setBackground(QColor(211,211,211)) #print (self.Minerals.Change) if self.user_input == False: self.a,self.b,self.c = self.Minerals.PLOT(return_fig=False,methods=self.regression_methods) #print (self.Minerals.number_of_data) self.Kinput_formula.setText(self.Minerals.Show_fit_function(self.Minerals.function_K(methods = self.regression_methods)[0],self.Minerals.function_K(methods = self.regression_methods)[1],"K'",error=False)) self.Ginput_formula.setText(self.Minerals.Show_fit_function(self.Minerals.function_G(methods = self.regression_methods)[0],self.Minerals.function_G(methods = self.regression_methods)[1],"G'",error=False)) self.Rhoinput_formula.setText(self.Minerals.Show_fit_function(self.Minerals.function_Rho(methods = self.regression_methods)[0],self.Minerals.function_Rho(methods = self.regression_methods)[1],'',error=False)) else: self.a,self.b,self.c = self.Minerals.PLOT_input_formula(return_fig=False) error1,error2,error3 = self.Minerals.Return_error() self.canvas1 = FigureCanvas3D(self.a,error1) self.canvas2 = FigureCanvas3D(self.b,error2) self.canvas3 = FigureCanvas3D(self.c,error3) self.canvas1.mpl_connect('pick_event', self.onpick) self.canvas2.mpl_connect('pick_event', self.onpick) self.canvas3.mpl_connect('pick_event', self.onpick) self.toolbar1 = NavigationToolbar(self.canvas1, self) self.toolbar2 = NavigationToolbar(self.canvas2, self) self.toolbar3 = NavigationToolbar(self.canvas3, self) self.layout1_widget = QWidget() self.layout1 = QGridLayout(self.layout1_widget) self.layout1_widget.setFixedSize(600, 600) self.layout1.addWidget(self.canvas1,0,1,5,5) self.layout1.addWidget(self.toolbar1,5,1,1,5) self.layout1.addWidget(self.canvas2,6,1,5,5) self.layout1.addWidget(self.toolbar2,11,1,1,5) self.layout1.addWidget(self.canvas3,12,1,5,5) self.layout1.addWidget(self.toolbar3,17,1,1,5) self.layout.addWidget(self.layout1_widget,0,0,1,1)