def set_data(self, current, items): """Populates model. Args: current (str) items (Sequence(str)) """ item_list = [QStandardItem(current)] for item in items: qitem = QStandardItem(item) item_list.append(qitem) qitem.setFlags(~Qt.ItemIsEditable) self.model.invisibleRootItem().appendRows(item_list) self.first_index = self.proxy_model.mapFromSource( self.model.index(0, 0))
def reload(self): self.model.clear() self.item_selected.emit(None) icon = QIcon.fromTheme("audio-x-generic") for item in self.items: s_item = QStandardItem(icon, item.name) s_item.setDragEnabled(True) s_item.setDropEnabled(False) s_item.setData(item) self.model.appendRow([s_item]) if self.items_incomplete: s_item = QStandardItem("…and more") s_item.setDragEnabled(False) s_item.setDropEnabled(False) self.model.appendRow([s_item])
def on_parseThread_finished(self, data): data = json.loads(data) rows = len(data.get('streams')) streams_keys = list(data.get('streams').keys()) streams_values = list(data.get('streams').values()) self.format_list += streams_keys self.format_list.sort() # 添加一个隐藏列,用于存储最初的行号 self.model.setHorizontalHeaderItem(len(self.table_titles), QStandardItem('origin_row_id')) self.parsedTableView.setColumnHidden(len(self.table_titles), True) for row in range(rows): for col, title in enumerate(self.table_titles): if title == self.tr('标题'): item = QStandardItem(data.get('title')) item.setCheckState(Qt.Unchecked) item.setCheckable(True) item.setToolTip(data.get('title')) elif title == self.tr('站点'): item = QStandardItem(data.get('site')) item.setTextAlignment(Qt.AlignCenter) elif title == self.tr('清晰度'): item = QStandardItem(streams_values[row].get('quality')) item.setTextAlignment(Qt.AlignCenter) elif title == self.tr('媒体格式'): item = QStandardItem(streams_keys[row]) item.setTextAlignment(Qt.AlignCenter) elif title == self.tr('格式'): item = QStandardItem(streams_values[row].get('container')) item.setTextAlignment(Qt.AlignCenter) self.container_list.append(item.text()) elif title == self.tr('大小'): item = QStandardItem(str(streams_values[row].get('size'))) # 通过setData方法解决排序错误问题 (使用tableWidget时存在此问题) # item.setData(Qt.EditRole, streams_values[row].get('size')) elif title == self.tr('列表标题'): item = QStandardItem(streams_keys[row]) self.model.setItem(row, col, item) # 行号赋值 self.model.setItem(row, len(self.table_titles), QStandardItem(str(row))) self.formatComboBox.addItems(set(self.format_list)) self.containerComboBox.addItems(set(self.container_list)) self.parsedTableView.horizontalHeader().setSortIndicatorShown(True) self.parsedTableView.sortByColumn(self.size_index, Qt.DescendingOrder) self.statusBar().showMessage(self.tr(f'解析完成')) logger.info(f'parse finished: {self.linkValueLabel.text()}')
def _setModelsFromProjectDict(self): """ Create the model needed for GUI representation of structure. """ cif_dict = self._calculator_interface.asCifDict() # Important - clear the model, so subsequent calls deal with empty self._model.clear() self._model.blockSignals(True) self._headers_model.blockSignals(True) phases_cif = cif_dict['phases'] exp_cif = cif_dict['experiments'] calc_cif = cif_dict['calculations'] # Currently only one phase/experiment, so assigning # explicitly. With more components, we need a proper loop # as shown below item = QStandardItem() item.setData(phases_cif, self._phase_role) item.setData(exp_cif, self._experiment_role) item.setData(calc_cif, self._calculation_role) self._model.appendRow(item) #for data_str cif_dict.items(): # item = QStandardItem() # item.setData(phases_cif, <self._some_role>) # self._model.appendRow(item) self._model.blockSignals(False) self._headers_model.blockSignals(False) self._model.layoutChanged.emit() self._headers_model.layoutChanged.emit()
def add_init_data(self, data, data_length=3): '''添加数据到 table_view @参数说明: data :要显示的数据 data_length : 设置单元格的宽度 @返回值: 无 @注意: 无 ''' self._data = data # 设计单元格宽度 if (data_length == 2): self.table_view.horizontalHeader().setDefaultSectionSize(50) else: self.table_view.horizontalHeader().setDefaultSectionSize(120) for i in range(self.table_col): for j in range(self.table_row): temp_date = QStandardItem(str(self._data[i, j])) # 设置单元格居中 temp_date.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) self.item_model.setItem(i, j, temp_date) # 在单元格中添加数据
def update_task_list_view(self): self.model.clear() current_date_tasks = list( filter( lambda task: task.start_at.date() <= self.date_now and task. end_at.date() >= self.date_now, self.active_task_list)) self.busy = len(current_date_tasks) for task in current_date_tasks: topic = task.topic item = QStandardItem(topic) item.setData(task) item.setCheckable(True) item.setData(task) item.setEditable(False) self.model.appendRow(item) if len(current_date_tasks) == 0: self.graphic.setText("") self.graphic.setPixmap(QtGui.QPixmap("../Assets/no_task.png")) self.graphic.setScaledContents(True) self.graphic.setGeometry(QtCore.QRect(260, 195, 252, 211)) self.label_notask.setGeometry(QtCore.QRect(280, 395, 221, 51)) font = QtGui.QFont() font.setFamily("Roboto Light") font.setPointSize(20) self.label_notask.setFont(font) self.label_notask.setText("You are free on this day !") else: self.graphic.clear() self.label_notask.clear()
def testRefCount(self): model = QStandardItemModel(5, 5) items = [] for r in range(5): row = [] for c in range(5): row.append(QStandardItem("%d,%d" % (r, c))) self.assertEqual(sys.getrefcount(row[c]), 2) model.insertRow(r, row) for c in range(5): ref_after = sys.getrefcount(row[c]) # check if the ref count was incremented after insertRow self.assertEqual(ref_after, 3) items.append(row) row = None for r in range(3): my_row = model.takeRow(0) my_row = None for c in range(5): # only rest 1 reference self.assertEqual(sys.getrefcount(items[r][c]), 2) my_i = model.item(0, 0) # ref(my_i) + parent_ref + items list ref self.assertEqual(sys.getrefcount(my_i), 4) model.clear() # ref(my_i) self.assertEqual(sys.getrefcount(my_i), 3)
def populate_list(self, names): for name, can_update in names: item = QStandardItem(name) self._model.appendRow(item) widget = self._create_plugin_widget(name, can_update) index = self._model.indexFromItem(item) self._list_view.setIndexWidget(index, widget)
def _CreateItemFromData(data): if isinstance(data, WebSource): item = QStandardItem(QIcon(data.icon), data.name) item.setFlags(SourceModel.WEB_SOURCE_FLAGS) elif isinstance(data, LocalSource): item = QStandardItem(QIcon(icons.DATABASE), data.name) item.setFlags(SourceModel.LOCAL_SOURCE_FLAGS) elif isinstance(data, Tag): item = QStandardItem(QIcon(icons.TAG), data.name) item.setFlags(SourceModel.TAG_FLAGS) elif isinstance(data, TagBuilder): item = QStandardItem(QIcon(icons.TAG), "") item.setFlags(SourceModel.TAG_BUILDER_FLAGS) item.setData(data) return item
def append_checkbox(self, item, model, checkdStatus): item = QStandardItem(item) item.setCheckState(checkdStatus) item.setCheckable(True) #model.appendRow(item) return item
def populateModel_recurseChildren(self, parentItem, widget): # Construct the item data and append the row classNameStr = str(widget.__class__).split("'")[1] classNameStr = classNameStr.replace('PySide2.', '').replace( 'QtGui.', '').replace('QtCore.', '').replace('QtWidgets.', '') items = [ QStandardItem(classNameStr), QStandardItem(widget.objectName()), QStandardItem(str(len(widget.children()))) ] parentItem.appendRow(items) # Recurse children and perform the same action for childWidget in widget.children(): self.populateModel_recurseChildren(items[0], childWidget)
def __init__(self): super(CollectionsHistoryTabs, self).__init__() self.setupUi(self) self.historyList.setContextMenuPolicy(Qt.CustomContextMenu) self.historyList.customContextMenuRequested.connect(self.historyMenu) self.historyModel = QStandardItemModel() self.historyList.setModel(self.historyModel) self.historyList.header().hide() self.historyList.expandToDepth(0) self.historyList.doubleClicked.connect(self.emitItem) self.collectionsModel = QStandardItemModel() default = QStandardItem("Default") default.setEditable(False) default.setIcon(self.folder_icon) self.collectionsModel.appendRow(default) self.collectionsTree.setModel(self.collectionsModel) self.collectionsTree.header().hide() self.collectionsTree.expandToDepth(0) self.collectionsTree.doubleClicked.connect(self.emitItem) self.collectionsTree.setContextMenuPolicy(Qt.CustomContextMenu) self.collectionsTree.customContextMenuRequested.connect( self.collectionsMenu)
def _create_item(url, title, icon): result = QStandardItem(title) result.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) result.setData(url, _url_role) if icon is not None: result.setIcon(icon) return result
def add_single_include(self, path): """Add file path to Source files list.""" dirname, file_pattern = os.path.split(path) # logging.debug("program path:{0}".format(self.program_path)) # logging.debug("{0}, {1}".format(dirname, file_pattern)) if not self.program_path: self.program_path = dirname self.ui.label_mainpath.setText(self.program_path) path_to_add = file_pattern else: # check if path is a descendant of main dir. common_prefix = os.path.commonprefix([os.path.abspath(self.program_path), os.path.abspath(path)]) # logging.debug("common_prefix:{0}".format(common_prefix)) if common_prefix != self.program_path: self.statusbar.showMessage( "Source file {0}'s location is invalid " "(should be in main directory)".format(file_pattern), 5000 ) return False path_to_add = os.path.relpath(path, self.program_path) if self.sourcefiles_model.findItems(path_to_add): self.statusbar.showMessage("Source file {0} already included".format(path_to_add), 5000) return False qitem = QStandardItem(path_to_add) qitem.setFlags(~Qt.ItemIsEditable) qitem.setData(QFileIconProvider().icon(QFileInfo(path_to_add)), Qt.DecorationRole) self.sourcefiles_model.appendRow(qitem) return True
def __init__(self, title, message, items, parent=None): """ Constructor of ListerView which creates a new dialog with scrolled items which the user can mark Args: title (str): The dialog title that should appear message (str): The message that the user will see at the top of the dialog items ([str]): A list of strings that will be showns as options """ super(ListerView, self).__init__(parent=parent) form = QFormLayout(self) form.addRow(QLabel(message)) self.listView = QListView(self) self.listView.clicked.connect(self.mouse_click_event) form.addRow(self.listView) model = QStandardItemModel(self.listView) self.setWindowTitle(title) for item in items: standardItem = QStandardItem(item) standardItem.setCheckable(True) standardItem.setEditable(False) model.appendRow(standardItem) self.listView.setModel(model)
def __init__(self, *args, **kwargs): QWidget.__init__(self, *args, **kwargs) self.setLayout(QVBoxLayout()) tv1 = QTableView(self) tv2 = QTableView(self) model = QStandardItemModel(8, 4, self) proxy = SortFilterProxyModel(self) proxy.setSourceModel(model) tv1.setModel(model) tv2.setModel(proxy) self.layout().addWidget(tv1) self.layout().addWidget(tv2) for i in range(model.rowCount()): for j in range(model.columnCount()): item = QStandardItem() item.setData(random_word(), Qt.DisplayRole) model.setItem(i, j, item) flayout = QFormLayout() self.layout().addLayout(flayout) for i in range(model.columnCount()): le = QLineEdit(self) flayout.addRow("column: {}".format(i), le) le.textChanged.connect(lambda text, col=i: proxy.setFilterByColumn( QRegExp(text, Qt.CaseSensitive, QRegExp.FixedString), col))
def create_items(self, name, count): if name.startswith("/"): if name == "/": short_name = "all" else: short_name = name.rsplit("/", 1)[1] icon = QIcon.fromTheme("folder") else: short_name = name icon = QIcon.fromTheme("tag") item = QStandardItem(icon, short_name) item.setToolTip(name) item.setData(name) c_item = QStandardItem(str(count)) c_item.setTextAlignment(Qt.AlignRight) return item, c_item
def __init__(self): super().__init__() self.folderModel = QStandardItemModel() self.setModel(self.folderModel) self.setFrameStyle(QFrame.NoFrame) self.setEditTriggers(QAbstractItemView.NoEditTriggers) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setItemDelegate(Folder()) self.setStyleSheet( 'FolderList { background-color: Transparent; color: rgb(190,190,190); }' ) self.setAttribute(Qt.WA_TranslucentBackground) for idx, folder in enumerate(self.getImageFolders()): item = QStandardItem(folder) item.setData(folder.replace('imgur', '').replace('reddit_sub', '').replace('_', ''), role=Qt.DisplayRole) item.setData(os.path.join(ThemeManager.IMAGE_FOLDERS_PATH, folder), role=Qt.UserRole) item.setData(folder, role=Qt.UserRole + 1) self.folderModel.appendRow(item)
def _setup_scan_dir_list_model(self): self._dirs_list_model = QStandardItemModel() self._dirs_list_selection_model = QItemSelectionModel( self._dirs_list_model) self._thumbs_view_model = QStandardItemModel() self._thumbs_selection_model = QItemSelectionModel( self._thumbs_view_model) self._dirs_list_model.setColumnCount(1) # self._dirs_list_model.setRowCount(len(scan_dirs)) self._root_tree_item = self._dirs_list_model.invisibleRootItem() # FOLDERS item folder_item = QStandardItem("Folders") folder_item_font = QFont() folder_item_font.setBold(True) folder_item.setFont(folder_item_font) folder_item.setSizeHint(QSize(folder_item.sizeHint().width(), 24)) self._root_tree_item.appendRow(folder_item) self._TV_FOLDERS_ITEM_MAP[0] = folder_item self.treeView_scandirs.setModel(self._dirs_list_model) self.treeView_scandirs.setSelectionModel( self._dirs_list_selection_model) # self.treeView_scandirs.setRootIsDecorated(False) self.listView_thumbs.setModel(self._thumbs_view_model) self.listView_thumbs.setSelectionModel(self._thumbs_selection_model) scan_dirs = self._meta_files_mgr.get_scan_dirs() self._populate_dirs_tree_view(0, scan_dirs)
def add_item2model(self, filename: str, model: QStandardItemModel): """sample listview code""" list_item = QStandardItem(filename) list_item.setCheckable(True) list_item.setEditable(False) list_item.setSelectable(False) model.appendRow(list_item)
def populate_reference_list(self, items): """List file references in QTreeView. If items is None or empty list, model is cleared. """ self.reference_model.clear() self.reference_model.setHorizontalHeaderItem( 0, QStandardItem("References")) # Add header if items is not None: for item in items: qitem = QStandardItem(item) qitem.setFlags(~Qt.ItemIsEditable) qitem.setData(item, Qt.ToolTipRole) qitem.setData( self._toolbox.style().standardIcon(QStyle.SP_FileLinkIcon), Qt.DecorationRole) self.reference_model.appendRow(qitem)
def insertToHistory(self, response, reqObject): parents = self.historyModel.findItems(str(reqObject.date)) if not parents: parent = QStandardItem(str(reqObject.date)) parent.setEditable(False) self.historyModel.appendRow(parent) else: parent = parents.pop() historyItem = QStandardItem() historyItem.setText(reqObject.buildTextRepresentation()) historyItem.setEditable(False) historyItem.setData(reqObject, Qt.UserRole) parent.insertRow( 0, [historyItem ]) # seems like a hack inserting list here, possilby report
def change_image_grid(self, index): self.imageModel.clear() # Get dir path from the index data itself directory = self.dirModel.list_keys[index.row()] dir_path = os.path.join(self.in_directory, directory) previously_checked = self.dirModel.dict_studies[directory]['SELECTED'] # Parse arrays within the directory image_list = [ os.path.join(dir_path, i) for i in os.listdir(dir_path) if i.endswith('.bmeii') ] loaded_images = loader(image_list) for img_path in loaded_images: img_pixmap = QPixmap.fromImage(QImage(img_path)) filename = os.path.basename(img_path).replace('.png', '') imageItem = QStandardItem() imageItem.setIcon(img_pixmap) imageItem.setText(filename) imageItem.setEditable(False) imageItem.setCheckable(True) if not pd.isnull(previously_checked): if filename in previously_checked: imageItem.setCheckState(QtCore.Qt.CheckState.Checked) self.imageModel.appendRow(imageItem)
def __get_next(self, element_info, parent): for child in element_info.children(): self.__generate_props_dict(child) child_item = QStandardItem(self.__node_name(child)) child_item.setEditable(False) parent.appendRow(child_item) self.__get_next(child, child_item)
def add_waypoint_row(self, row: int, flight: Flight, waypoint: FlightWaypoint) -> None: self.model.insertRow(self.model.rowCount()) self.model.setItem(row, 0, QWaypointItem(waypoint, row)) altitude = meter_to_feet(waypoint.alt) altitude_type = "AGL" if waypoint.alt_type == "RADIO" else "MSL" altitude_item = QStandardItem(f"{altitude} ft {altitude_type}") altitude_item.setEditable(False) self.model.setItem(row, 1, altitude_item) tot = self.tot_text(flight, waypoint) tot_item = QStandardItem(tot) tot_item.setEditable(False) self.model.setItem(row, 2, tot_item)
def get_table_model(self, table_data: str): data = eval(table_data) n_machine = len(data) # 机器数量 error_number = "" # 有问题机器编号 table_model = QStandardItemModel() yellow = QColor(255, 255, 0) orange = QColor(255, 97, 0) # # 填充 table_model # for machine_number in range(1, n_machine + 1): i, j = self.get_row_col(machine_number) if data[machine_number][0] != 0: error_number += str(machine_number) + " " error_code_item = QStandardItem(str(data[machine_number][0])) error_code_item.setEditable(False) break_code = data[machine_number][0] if 0 < break_code <= 10: error_code_item.setBackground(QBrush(yellow)) elif break_code == 255: error_code_item.setBackground(QBrush(orange)) t0 = QStandardItem("%d号跟踪器故障代码" % (machine_number)) t0.setEditable(False) table_model.setItem(i, j, t0) table_model.setItem(i, j + 1, error_code_item) t1 = QStandardItem("%d号跟踪器控制代码" % (machine_number)) t1.setEditable(False) item1 = QStandardItem(str(data[machine_number][1])) item1.setEditable(False) table_model.setItem(i + 1, j, t1) table_model.setItem(i + 1, j + 1, item1) t2 = QStandardItem("%d号跟踪器锁状态" % (machine_number)) t2.setEditable(False) item2 = QStandardItem(str(data[machine_number][2])) item2.setEditable(False) table_model.setItem(i + 2, j, t2) table_model.setItem(i + 2, j + 1, item2) t3 = QStandardItem("%d号跟踪器实时角度" % (machine_number)) t3.setEditable(False) item3 = QStandardItem(str(data[machine_number][3])) item3.setEditable(False) table_model.setItem(i + 3, j, t3) table_model.setItem(i + 3, j + 1, item3) return table_model, error_number
def initUi(self): self.layout = QGridLayout() self.categoryList = QListView() self.right_layout = QStackedLayout() self.categoryList.setMaximumWidth(175) self.categoryModel = QStandardItemModel(self.categoryList) difficulty = QStandardItem("Difficulty") difficulty.setIcon(CONST.ICONS["Missile"]) difficulty.setEditable(False) difficulty.setSelectable(True) generator = QStandardItem("Mission Generator") generator.setIcon(CONST.ICONS["Generator"]) generator.setEditable(False) generator.setSelectable(True) cheat = QStandardItem("Cheat Menu") cheat.setIcon(CONST.ICONS["Cheat"]) cheat.setEditable(False) cheat.setSelectable(True) self.categoryList.setIconSize(QSize(32, 32)) self.categoryModel.appendRow(difficulty) self.categoryModel.appendRow(generator) self.categoryModel.appendRow(cheat) self.categoryList.setSelectionBehavior(QAbstractItemView.SelectRows) self.categoryList.setModel(self.categoryModel) self.categoryList.selectionModel().setCurrentIndex(self.categoryList.indexAt(QPoint(1,1)), QItemSelectionModel.Select) self.categoryList.selectionModel().selectionChanged.connect(self.onSelectionChanged) self.initDifficultyLayout() self.initGeneratorLayout() self.initCheatLayout() self.right_layout.addWidget(self.difficultyPage) self.right_layout.addWidget(self.generatorPage) self.right_layout.addWidget(self.cheatPage) self.layout.addWidget(self.categoryList, 0, 0, 1, 1) self.layout.addLayout(self.right_layout, 0, 1, 5, 1) self.setLayout(self.layout)
def LoadTable(self): ''' Makes the list of tasks This function loads the tasks in _taskManager and lists them ''' try: # clear the table model self.taskViewModel.clear() # get the list of tasks self.TaskList = self._taskManager.LoadTasks() # for each task for task in self.TaskList: # get the scheduled state of the task _str = Settings.Schedule_String if task.Scheduled else Settings.UnScheduled_String # noqa # inserts new Table row self.taskViewModel.appendRow([ QStandardItem(task.Source), QStandardItem(task.Target), QStandardItem(_str), QStandardItem(task.LastOperation) ]) # names the each column label self.taskViewModel.setHorizontalHeaderLabels( Settings.Table_ColumnNames) # noqa # if there is at least on task, selects the first task and # updates the selected task if len(self.TaskList) > 0: # set the current cell self.ui.tableView.setCurrentIndex( self.ui.tableView.model().index(0, 1)) # updates the UI components self.EnableControls(True) # updates the selected task self.SelectedTask = self.TaskList[0] # resize column width wth = [200, 200, 100, 200] for i in range(4): self.ui.tableView.setColumnWidth(i, wth[i]) # make the last column hit the end self.ui.tableView.horizontalHeader().setSectionResizeMode( 3, QHeaderView.Stretch) # set the text align to left self.ui.tableView.horizontalHeader().setDefaultAlignment( Qt.AlignLeft) except Exception as e: print(f"Load Table Error:{e}")
def __init__(self, model, tabWidget, parent=None): super(ChartWidget, self).__init__(parent) self.model = model self.tabWidget = tabWidget layout = QVBoxLayout(self) chartGroupBox = QGroupBox("General Settings") grid = QGridLayout(self) grid.addWidget(QLabel("Name"), 0, 0) self.nameLineEdit = QLineEdit() self.nameLineEdit.setText(model.text()) self.nameLineEdit.textChanged.connect(self.updateText) grid.addWidget(self.nameLineEdit, 0, 1) self.typeComboBox = QComboBox() self.typeComboBox.currentIndexChanged.connect(self.changeType) grid.addWidget(self.typeComboBox, 1, 1) chartGroupBox.setLayout(grid) layout.addWidget(chartGroupBox) self.chartWidget = QWidget() layout.addWidget(self.chartWidget) # using to dynamically add and remove chart settings/preview widgets self.stackedWidget = QStackedWidget(self) layout.addWidget(self.stackedWidget) # layout.addStretch() self.setLayout(layout) # adding type values here is a violation of object-oriented design # a more polymorphic implementation is desirable chartTypesLst = [ ('Bar Chart', "icons/chart-types/bar-chart.svg", BarChartModel), ('Box Plot', "icons/chart-types/box-plot.svg", None), ('Candlestick Chart', "icons/chart-types/candlestick-chart.svg", None), ('Line Chart', "icons/chart-types/line-chart.svg", LineChartModel), ('Pie Chart', "icons/chart-types/pie-chart.svg", None), ('Scatter Chart', "icons/chart-types/scatter-chart.svg", None), ('Spline Chart', "icons/chart-types/spline-chart.svg", None) ] s = QStandardItemModel() for ct in chartTypesLst: item = QStandardItem(ct[0]) item.setIcon(QIcon(ct[1])) item.setData(ct[2]) s.appendRow(item) self.typeComboBox.setModel(s)
def _updateModel(self) -> None: """ Update the controller combobox model. """ self.model.clear() for ctrlr in self._controllers['list']: item = QStandardItem(ctrlr.getName()) self.model.appendRow(item)