def setup_ui(self): layout = QGridLayout() table = QTreeWidget() table.setHeaderLabels(['name', 'width', 'height', 'ratio']) table.setSortingEnabled(True) items = [] for size in self.manager.project.sizes: i = ComparingTreeWidgetItem(None, [ f'{size.width}x{size.height}', str(size.width), str(size.height), str(size.ratio()) ]) i.__data__ = size items.append(i) table.addTopLevelItems(items) @table.currentItemChanged.connect def _(item, prev): del_btn.setEnabled(item is not None) layout.addWidget(table, 0, 0, 1, 2) add_btn = QPushButton('add new') @add_btn.clicked.connect def _(*args): diag = SizeInput(self.manager.project.sizes, self) if diag.exec_() != QDialog.Accepted: return size = diag.value self.manager.add_size(size) item = ComparingTreeWidgetItem(None, [ f'{size.width}x{size.height}', str(size.width), str(size.height), str(size.ratio()) ]) table.addTopLevelItem(item) layout.addWidget(add_btn, 1, 0) del_btn = QPushButton('delete') del_btn.setEnabled(False) @del_btn.clicked.connect def _(*args): item = table.currentItem() size = item.__data__ self.manager.del_size(size) shiboken2.delete(item) layout.addWidget(del_btn, 1, 1) self.setLayout(layout)
def update_hint_locations(game: RandovaniaGame, hint_tree_widget: QtWidgets.QTreeWidget): game_description = default_database.game_description_for(game) number_for_hint_type = { hint_type: i + 1 for i, hint_type in enumerate(LoreType) } used_hint_types = set() hint_tree_widget.clear() hint_tree_widget.setSortingEnabled(False) # TODO: This ignores the Dark World names. But there's currently no logbook nodes in Dark World. for world in game_description.world_list.worlds: world_item = QtWidgets.QTreeWidgetItem(hint_tree_widget) world_item.setText(0, world.name) world_item.setExpanded(True) for area in world.areas: hint_types = {} for node in area.nodes: if isinstance(node, LogbookNode): if node.required_translator is not None: hint_types[ node. lore_type] = node.required_translator.short_name else: hint_types[node.lore_type] = "✓" if hint_types: area_item = QtWidgets.QTreeWidgetItem(world_item) area_item.setText(0, area.name) for hint_type, text in hint_types.items(): area_item.setText(number_for_hint_type[hint_type], text) used_hint_types.add(hint_type) hint_tree_widget.resizeColumnToContents(0) hint_tree_widget.setSortingEnabled(True) hint_tree_widget.sortByColumn(0, QtCore.Qt.AscendingOrder) for hint_type in used_hint_types: hint_tree_widget.headerItem().setText(number_for_hint_type[hint_type], hint_type.long_name)
def add_tree_with_header(self, parent): tw = QTreeWidget() parent.addWidget(tw) tw.setHeaderLabels(['Type', 'Legs', 'Has Hair/Fur']) tw.setSortingEnabled(True) tw.setAlternatingRowColors(True) i1 = QTreeWidgetItem(tw, ['Mammal']) i2 = QTreeWidgetItem(i1, ['Rodent']) i3 = QTreeWidgetItem(i2, ['Rat', '4', 'True']) i3 = QTreeWidgetItem(i2, ['Beaver', '2', 'True']) i2 = QTreeWidgetItem(i1, ['Primate']) i3 = QTreeWidgetItem(i2, ['Baboon', '2', 'True']) i3 = QTreeWidgetItem(i2, ['Human', '2', 'True']) i1 = QTreeWidgetItem(tw, ['Reptile']) i2 = QTreeWidgetItem(i1, ['Snake', '0', 'False']) i3 = QTreeWidgetItem(i1, ['Crocodile', '4', 'False']) self.add_expand_collapse_buttons(parent, tw)
def setup_ui(self): layout = QGridLayout() table = QTreeWidget() table.setHeaderLabels(['name', 'type', 'width', 'height']) table.setSortingEnabled(True) items = [] for photo in self.manager.project.photos: if not photo.is_available(): w = h = 'N/A!' else: w, h = photo.raw_size() i = ComparingTreeWidgetItem( None, [str(photo), type(photo).__name__, str(w), str(h)]) i.__data__ = photo items.append(i) table.addTopLevelItems(items) @table.currentItemChanged.connect def _(item, prev): del_btn.setEnabled(item is not None) layout.addWidget(table, 0, 0) del_btn = QPushButton('delete') del_btn.setEnabled(False) @del_btn.clicked.connect def _(*args): item = table.currentItem() size = item.__data__ self.manager.del_photo(size) shiboken2.delete(item) layout.addWidget(del_btn, 1, 0) self.setLayout(layout)