class AbstractContext(QWidget): def __init__(self, parent, labels): super(AbstractContext, self).__init__(parent) self.add = QAction(QIcon(":/img/add.png"), self.tr("Add"), self) self.delete = QAction(QIcon(":/img/delete.png"), self.tr("Delete"), self) self.edit = QAction(QIcon(":/img/edit.png"), self.tr("Edit"), self) self.print_ = QAction(QIcon(":/img/print.png"), self.tr("Print"), self) self.toolbar = QToolBar(self.tr("Controls"), self) self.toolbar.addAction(self.add) self.toolbar.addAction(self.delete) self.toolbar.addAction(self.edit) self.toolbar.addAction(self.print_) self.entries = QTreeWidget(self) self.entries.setHeaderLabels(labels) self.search = QLineEdit(self) self.search_by = QComboBox(self) self.search_by.insertItems(len(labels), labels) layout = QGridLayout(self) layout.addWidget(self.toolbar, 0, 0) layout.addWidget(self.entries, 1, 0, 1, 8) layout.addWidget(QLabel(self.tr("Search for:"), self), 2, 0) layout.addWidget(self.search, 2, 1) layout.addWidget(QLabel(self.tr("by"), self), 2, 2) layout.addWidget(self.search_by, 2, 3) def add_entry(self, entry): pass def delete_entry(self, entry): index = self.entries.indexOfTopLevelItem(entry) self.entries.takeTopLevelItem(index) def edit_entry(self, entry, new_data): for column, data in new_data: entry.setText(column, data) def confirm_deletion(self, what): return True
class CorporateEventPanel(QtGui.QWidget): tableCorporateEvent = None rowCorporateEvent = 0 columnListCorporateEvent = "Asset;Gross Amount;Net Amount;Payment Date".split( ";") def __init__(self): super(self.__class__, self).__init__() self.layout = QtGui.QGridLayout(self) self.clearTables() def clearTables(self): self.row = 0 self.createCorpEventTable() def createCorpEventTable(self): self.treeCorporateEvent = QTreeWidget() self.layout.addWidget(self.treeCorporateEvent, 2, 0, 3, 3) def renderCorpEvent(self, corporateEventPositionDictAsset): self.clearTables() self.treeCorporateEvent.setColumnCount(3) self.treeCorporateEvent.setHeaderLabels(self.columnListCorporateEvent) for key, cep in corporateEventPositionDictAsset.items(): l1 = QTreeWidgetItem( [key, str(cep.accGrossAmount), str(cep.accNetAmount)]) for ce in cep.corporateEventList: l1_child = QTreeWidgetItem([ None, str(ce.grossAmount), str(ce.netAmount), str(ce.paymentDate) ]) l1.addChild(l1_child) self.treeCorporateEvent.addTopLevelItem(l1)
class PushupList(QWidget): ''' classdocs ''' deletePushup = Signal(int) deletePushups_in_a_day = Signal(tuple) def __init__(self, pushups): ''' Constructor ''' QWidget.__init__(self) self.pushups = pushups self.createGUI() def createGUI(self): self.layout = QVBoxLayout() # self.pushupsListWidget = QListWidget(self) self.pushupsListWidget = QTreeWidget(self) self.pushupsListWidget.setMinimumHeight(250) #self.pushupsListWidget.setMaximumWidth(500) self.pushupsListWidget.setAlternatingRowColors(True) self.pushupsListWidget.doubleClicked.connect(self.doubleClick_Test) self.pushupsListWidget.setContextMenuPolicy(Qt.CustomContextMenu) self.pushupsListWidget.customContextMenuRequested.connect( self._customMenu) self._populateTree() self.layout.addWidget(self.pushupsListWidget) self.setLayout(self.layout) # Slot def _customMenu(self): selectedItems = self.pushupsListWidget.selectedItems() if selectedItems is not None: selectedItem = selectedItems[0] if selectedItem.parent() is not None: # Child Item selected menu = QMenu() delete = QAction(self.pushupsListWidget) delete.setText("Delete this pushup") delete.triggered.connect(self._emitDeleteSignal) menu.addAction(delete) menu.exec_(QCursor.pos()) else: # Top level Item selected menu = QMenu() delete = QAction(self.pushupsListWidget) delete.setText("Delete this day and all of its exercises") delete.triggered.connect(self._emitDeleteDaySignal) menu.addAction(delete) menu.exec_(QCursor.pos()) def _emitDeleteSignal(self): selectedItem = self.pushupsListWidget.selectedItems()[0] pushupId = selectedItem.data(0, Qt.UserRole)._id self.deletePushup.emit(pushupId) def _emitDeleteDaySignal(self): selectedItem = self.pushupsListWidget.selectedItems()[0] treeWidgetItems = selectedItem.takeChildren() pushupsIdList = [] for item in treeWidgetItems: pushup = item.data(0, Qt.UserRole)._id pushupsIdList.append(pushup) self.deletePushups_in_a_day.emit(pushupsIdList) def _populateTree(self): self.pushupsListWidget.clear() self.pushupsListWidget.setColumnCount(4) self.pushupsListWidget.setHeaderLabels([ "Date", "TotalPushups", "Series", "Repetitions", "Average Heart Rate" ]) self.pushupsListWidget.setSortingEnabled(True) self.pushupsListWidget.setColumnWidth(0, 180) self.pushupsListWidget.setColumnWidth(4, 150) pushupDict = self._getPushupDictionary() for it, dayOfExercise in enumerate(sorted(pushupDict.keys())): dateItem = QTreeWidgetItem() dayLabel = dayOfExercise.strftime("%Y/%m/%d") dateItem.setText(0, "\n" + dayLabel + "\nDay : " + str(it)) self.pushupsListWidget.addTopLevelItem(dateItem) totalPushups = 0 for pushup in pushupDict[dayOfExercise]: pushupItem = QTreeWidgetItem() pushupItem.setText(2, "#" + str(pushup._series)) pushupItem.setText(3, str(pushup._repetitions)) pushupItem.setText(4, str(pushup._averageHeartRate)) pushupItem.setData(0, Qt.UserRole, pushup) totalPushups = totalPushups + pushup._repetitions dateItem.addChild(pushupItem) dateItem.setText(1, str(totalPushups)) def doubleClick_Test(self): selectedItems = self.pushupsListWidget.selectedItems() if selectedItems is not None: selectedItem = selectedItems[0] if selectedItem.parent() is not None: # Child Item selected selectedPushups = self.pushupsListWidget.selectedItems( )[0].data(0, Qt.UserRole) print selectedPushups._id else: print "Top level widget double clicked" def reloadPushupsList(self, pushups): self.pushups = pushups self._populateTree() def _populateListWidget(self): ''' unused old method ''' self.pushupsListWidget.clear() pushupDict = self._getPushupDictionary() for dayOfExercise in pushupDict: listItemString = "Date : " + dayOfExercise + "\n" listItem_Data = [] for pushup in pushupDict[dayOfExercise]: listItemString += "Series : " + str(pushup._series) + \ " Repetition : " + str(pushup._repetitions) + "\n" listItem_Data.append(pushup) listItem = QListWidgetItem(listItemString) listItem.setData(Qt.UserRole, listItem_Data) self.pushupsListWidget.addItem(listItem) def _getPushupDictionary(self): ''' Returns a dictionary with the following structure : - Key : date of the exercises. Type datetime.date - Value : list containing pushups made that day . Type : [Pushup model object] example : { 2014-08-18: [pushupModelObj1, pushupModelObj2, pushupModelObj3], 2014-08-19: [pushupModelObj4, pushupModelObj5, pushupModelObj6] } ''' pushupDateList = {} # dictionary initialization for pushup in self.pushups: if not pushupDateList.has_key(pushup._date): pushupsList = [pushup] pushupDateList[pushup._date] = pushupsList else: pushupDateList[pushup._date].append(pushup) # for k in pushupDateList.keys(): # print k # # for pu in pushupDateList[k]: # print pu return pushupDateList
class PushupList(QWidget): ''' classdocs ''' deletePushup = Signal(int) deletePushups_in_a_day = Signal(tuple) def __init__(self, pushups): ''' Constructor ''' QWidget.__init__(self) self.pushups = pushups self.createGUI() def createGUI(self): self.layout = QVBoxLayout() # self.pushupsListWidget = QListWidget(self) self.pushupsListWidget = QTreeWidget(self) self.pushupsListWidget.setMinimumHeight(250) #self.pushupsListWidget.setMaximumWidth(500) self.pushupsListWidget.setAlternatingRowColors(True) self.pushupsListWidget.doubleClicked.connect(self.doubleClick_Test) self.pushupsListWidget.setContextMenuPolicy(Qt.CustomContextMenu) self.pushupsListWidget.customContextMenuRequested.connect(self._customMenu) self._populateTree() self.layout.addWidget(self.pushupsListWidget) self.setLayout(self.layout) # Slot def _customMenu(self): selectedItems = self.pushupsListWidget.selectedItems() if selectedItems is not None : selectedItem = selectedItems[0] if selectedItem.parent() is not None : # Child Item selected menu = QMenu() delete = QAction(self.pushupsListWidget) delete.setText("Delete this pushup") delete.triggered.connect(self._emitDeleteSignal) menu.addAction(delete) menu.exec_(QCursor.pos()) else : # Top level Item selected menu = QMenu() delete = QAction(self.pushupsListWidget) delete.setText("Delete this day and all of its exercises") delete.triggered.connect(self._emitDeleteDaySignal) menu.addAction(delete) menu.exec_(QCursor.pos()) def _emitDeleteSignal(self): selectedItem = self.pushupsListWidget.selectedItems()[0] pushupId = selectedItem.data(0, Qt.UserRole)._id self.deletePushup.emit(pushupId) def _emitDeleteDaySignal(self): selectedItem = self.pushupsListWidget.selectedItems()[0] treeWidgetItems = selectedItem.takeChildren() pushupsIdList = [] for item in treeWidgetItems: pushup = item.data(0, Qt.UserRole)._id pushupsIdList.append(pushup) self.deletePushups_in_a_day.emit(pushupsIdList) def _populateTree(self): self.pushupsListWidget.clear() self.pushupsListWidget.setColumnCount(4) self.pushupsListWidget.setHeaderLabels(["Date", "TotalPushups", "Series", "Repetitions", "Average Heart Rate"]) self.pushupsListWidget.setSortingEnabled(True) self.pushupsListWidget.setColumnWidth(0, 180) self.pushupsListWidget.setColumnWidth(4, 150) pushupDict = self._getPushupDictionary() for it, dayOfExercise in enumerate(sorted(pushupDict.keys())): dateItem = QTreeWidgetItem() dayLabel = dayOfExercise.strftime("%Y/%m/%d") dateItem.setText(0, "\n" + dayLabel + "\nDay : " + str(it)) self.pushupsListWidget.addTopLevelItem(dateItem) totalPushups = 0 for pushup in pushupDict[dayOfExercise]: pushupItem = QTreeWidgetItem() pushupItem.setText(2, "#" + str(pushup._series)) pushupItem.setText(3, str(pushup._repetitions)) pushupItem.setText(4, str(pushup._averageHeartRate)) pushupItem.setData(0, Qt.UserRole, pushup) totalPushups = totalPushups + pushup._repetitions dateItem.addChild(pushupItem) dateItem.setText(1, str(totalPushups)) def doubleClick_Test(self): selectedItems = self.pushupsListWidget.selectedItems() if selectedItems is not None : selectedItem = selectedItems[0] if selectedItem.parent() is not None : # Child Item selected selectedPushups = self.pushupsListWidget.selectedItems()[0].data(0, Qt.UserRole) print selectedPushups._id else : print "Top level widget double clicked" def reloadPushupsList(self, pushups): self.pushups = pushups self._populateTree() def _populateListWidget(self): ''' unused old method ''' self.pushupsListWidget.clear() pushupDict = self._getPushupDictionary() for dayOfExercise in pushupDict: listItemString = "Date : " + dayOfExercise + "\n" listItem_Data = [] for pushup in pushupDict[dayOfExercise]: listItemString += "Series : " + str(pushup._series) + \ " Repetition : " + str(pushup._repetitions) + "\n" listItem_Data.append(pushup) listItem = QListWidgetItem(listItemString) listItem.setData(Qt.UserRole, listItem_Data) self.pushupsListWidget.addItem(listItem) def _getPushupDictionary(self): ''' Returns a dictionary with the following structure : - Key : date of the exercises. Type datetime.date - Value : list containing pushups made that day . Type : [Pushup model object] example : { 2014-08-18: [pushupModelObj1, pushupModelObj2, pushupModelObj3], 2014-08-19: [pushupModelObj4, pushupModelObj5, pushupModelObj6] } ''' pushupDateList = {} # dictionary initialization for pushup in self.pushups: if not pushupDateList.has_key(pushup._date): pushupsList = [pushup] pushupDateList[pushup._date] = pushupsList else: pushupDateList[pushup._date].append(pushup) # for k in pushupDateList.keys(): # print k # # for pu in pushupDateList[k]: # print pu return pushupDateList
else: child.setText(level, str(val)) child.setExpanded(True) else: child = QTreeWidgetItem() child.setText(level, str(value)) item.addChild(child) def fill_widget(widget, value): widget.clear() fill_item(widget.invisibleRootItem(), value, 0) app = QtGui.QApplication.instance() if app is None: app = QtGui.QApplication(sys.argv) d = { 'key1': 'value1', 'key2': 'value2', 'sub_list': [1,2,3, ['good', 'test'], {'abc': 3, 'cde': 9}], 'key4': object(), 'sub_dict': {'key1': 'value1', 'key2': 'value2'}} widget = QTreeWidget() widget.setHeaderLabels(['level0', 'level1', 'level2', 'level3']) fill_widget(widget, d) widget.show() sys.exit(app.exec_())
if __name__ == '__main__': app = 0 if QApplication.instance(): app = QApplication.instance() else: app = QApplication(sys.argv) l1 = QTreeWidgetItem(["ALFA", "100"]) l2 = QTreeWidgetItem(["GRUMA", "200"]) for i in range(3): l1_child = QTreeWidgetItem([None, str(i * 10), "Child C" + str(i)]) l1.addChild(l1_child) for j in range(2): l2_child = QTreeWidgetItem([None, str(j * 20), "Child CC" + str(j)]) l2.addChild(l2_child) w = QWidget() w.resize(510, 210) tw = QTreeWidget(w) tw.resize(500, 200) tw.setColumnCount(3) tw.setHeaderLabels(["Asset", "Gross Amount", "Payment Date"]) tw.addTopLevelItem(l1) tw.addTopLevelItem(l2) w.show() sys.exit(app.exec_())
class WorldViewerDebug(QDialog): def __init__(self, worldviewer, parent=None): global client super(WorldViewerDebug, self).__init__(parent) self.setWindowTitle("World Viewer Debug") pos = QApplication.instance().desktop().availableGeometry() self.move(pos.width()/2, 0) self.worldviewer = worldviewer self.objects_tree = QTreeWidget() self.objects_tree.setColumnCount(2) self.objects_tree.setHeaderLabels(["ID", "Name", "Location", "Resource", "Last Modified", "Dist to Player"]) self.objects_tree.setSortingEnabled(True) layout = QVBoxLayout() for w in (self.objects_tree,): layout.addWidget(w) self.setLayout(layout) self.obj_update_timer = QTimer(self) self.connect(self.obj_update_timer, SIGNAL("timeout()"), self.update) self.obj_update_timer.start(CLIENT_UPDATE_FREQ) def sizeHint(self): desktop = QApplication.instance().desktop() geom = desktop.availableGeometry() return QSize(geom.width()/2, geom.height()) def show(self): '''This is overridden to not allow this to be shown when running in non-debug mode''' super(WorldViewerDebug, self).show() if not DEBUG: self.hide() def update(self): items = [] playerx, playery = 0, 0 for objid, obj in self.worldviewer.world_objects.items(): if "Object.ScriptedObject.Character" in obj['_types']: playerx = obj['loc']['x'] playery = obj['loc']['y'] break for objid, obj in self.worldviewer.world_objects.items(): name = obj['name'] try: locx = obj['loc']['x'] except KeyError: continue locy = obj['loc']['y'] locz = obj['loc']['z'] resource = obj['resource'] last_modified = datetime.datetime.fromtimestamp(int(str(obj['last_modified']['$date'])[:-3])) row = self.objects_tree.findItems(objid, Qt.MatchExactly, column=0) if row: # Update it if it exists already item = row[0] if not row: # If Item does not exist in the tree widget already, make a new one. item = QTreeWidgetItem(self.objects_tree) items.append(item) for i, param in enumerate((objid, name, (locx, locy, locz), resource, last_modified, "%04d" % euclidian(locx, locy, playerx, playery))): item.setText(i, str(param)) if items: self.objects_tree.insertTopLevelItems(0, items)
class DirectoryDetectWindow(QWidget): def __init__(self): QWidget.__init__(self) self.setWindowTitle('Directory Detective Tool') main_layout = QVBoxLayout() path_layout = self._init_path_layout() guide_layout = self._init_guide_layout() detail_layout = self._init_detail_layout() main_layout.addLayout(path_layout) main_layout.addLayout(guide_layout) main_layout.addLayout(detail_layout) self.setLayout(main_layout) self.setGeometry(300, 300, 400, 350) self._connect() self._walk_folder = None self._last_path = None self.directory_info = None self._button_list = list() self._last_info = None def _init_path_layout(self): path_layout = QHBoxLayout() self.input_path = QLineEdit(self) self.input_path.setFixedHeight(35) self.input_path.setPlaceholderText('Type search path here') self.button_path = QPushButton('Scan', self) self.button_path.setFixedHeight(35) self.button_path.setFocus() path_layout.addWidget(QLabel('Path:', self)) path_layout.addWidget(self.input_path, stretch=True) path_layout.addWidget(self.button_path) return path_layout def _init_guide_layout(self): self.guide_layout = QHBoxLayout() self.guide_layout.setAlignment(Qt.AlignLeft) return self.guide_layout def refresh_trees(self, store_list, ignore_list): self._refresh_key_tree(store_list, ignore_list=ignore_list) self._refresh_value_tree(store_list) def add_button(self, name, store_list, ignore_list=None): button = QPushButton(name) button.setFixedSize(60, 35) item = (name, button, store_list, ignore_list) self._button_list.append(item) self.guide_layout.addWidget(button) self.refresh_trees(store_list=store_list, ignore_list=ignore_list) button.clicked.connect(lambda: self._set_button(item=item)) def _set_button(self, item): index_item = self._button_list.index(item) if len(self._button_list) > index_item + 1: for name, button, store_list, ignore_list in self._button_list[index_item + 1:]: button.setParent(None) name, button, store_list, ignore_list = item self.refresh_trees(store_list=store_list, ignore_list=ignore_list) def _init_detail_layout(self): detail_layout = QGridLayout() self.key_tree = QTreeWidget() self.key_tree.setColumnCount(2) self.key_tree.setColumnWidth(0, 200) self.key_tree.setHeaderLabels(['Key', 'Size']) self.value_tree = QTreeWidget() self.value_tree.setColumnCount(2) self.value_tree.setColumnWidth(0, 200) self.value_tree.setHeaderLabels(['Path', 'Size']) detail_layout.setColumnStretch(0, 1) detail_layout.setColumnStretch(1, 1) detail_layout.addWidget(self.value_tree) detail_layout.addWidget(self.key_tree) return detail_layout def _connect(self): self.button_path.clicked.connect(self.button_path_clicked) self.key_tree.doubleClicked.connect(self.key_tree_double_clicked) def button_path_clicked(self): del self._button_list[:] for _ in range(self.guide_layout.count()): current_item = self.guide_layout.takeAt(0) current_item.widget().setParent(None) path = unicode.encode(self.input_path.text()) if self._last_path != path: self._walk_folder = walk_folder.run(path=path) max_level = 4 self.directory_info = list(self._walk_folder.get_children_by_level(level=max_level)) self.add_button('/', self.directory_info) def key_tree_double_clicked(self, selected_index=QModelIndex()): select_data = selected_index.data() ignore_list = [select_data] for item in self._button_list[1:]: ignore_list.append(item[0]) store_dict = dict(self._last_info.get_children_by_key(key=select_data, ignore_list=ignore_list).sort_dictionary) store_list = list() for item in store_dict.values(): store_list.extend(item['children']) store_list = list(set(store_list)) self.add_button(select_data, store_list or list(), ignore_list=ignore_list) def _get_size(self, size): return '{} <> {}%'.format(human_size(size), round(size * 100 / self._walk_folder.total_size, 2)) def _refresh_key_tree(self, directory_info, ignore_list=None): info = LabelInfo(make_dictionary_by_classification(directory_info, ignore_list)) # Clear for _ in range(self.key_tree.topLevelItemCount()): self.key_tree.takeTopLevelItem(0) # Add for k, v in info.sort_dictionary: tree_widget = QTreeWidgetItem() tree_widget.setText(0, k) total_size = 0 for child in v['children']: total_size += child.total_size tree_widget.setText(1, self._get_size(v[constant.sort_size_name])) self.key_tree.addTopLevelItem(tree_widget) self._last_info = info def _refresh_value_tree(self, directory_info): info = sorted(directory_info, key=lambda x: x.total_size, reverse=True) # Clear for _ in range(self.value_tree.topLevelItemCount()): self.value_tree.takeTopLevelItem(0) # Add for item in info: tree_widget = QTreeWidgetItem() tree_widget.setText(0, item.part_path) tree_widget.setText(1, self._get_size(item.total_size)) self.value_tree.addTopLevelItem(tree_widget)
class WorldViewerDebug(QDialog): def __init__(self, worldviewer, parent=None): global client super(WorldViewerDebug, self).__init__(parent) self.setWindowTitle("World Viewer Debug") pos = QApplication.instance().desktop().availableGeometry() self.move(pos.width() / 2, 0) self.worldviewer = worldviewer self.objects_tree = QTreeWidget() self.objects_tree.setColumnCount(2) self.objects_tree.setHeaderLabels([ "ID", "Name", "Location", "Resource", "Last Modified", "Dist to Player" ]) self.objects_tree.setSortingEnabled(True) layout = QVBoxLayout() for w in (self.objects_tree, ): layout.addWidget(w) self.setLayout(layout) self.obj_update_timer = QTimer(self) self.connect(self.obj_update_timer, SIGNAL("timeout()"), self.update) self.obj_update_timer.start(CLIENT_UPDATE_FREQ) def sizeHint(self): desktop = QApplication.instance().desktop() geom = desktop.availableGeometry() return QSize(geom.width() / 2, geom.height()) def show(self): '''This is overridden to not allow this to be shown when running in non-debug mode''' super(WorldViewerDebug, self).show() if not DEBUG: self.hide() def update(self): items = [] playerx, playery = 0, 0 for objid, obj in self.worldviewer.world_objects.items(): if "Object.ScriptedObject.Character" in obj['_types']: playerx = obj['loc']['x'] playery = obj['loc']['y'] break for objid, obj in self.worldviewer.world_objects.items(): name = obj['name'] try: locx = obj['loc']['x'] except KeyError: continue locy = obj['loc']['y'] locz = obj['loc']['z'] resource = obj['resource'] last_modified = datetime.datetime.fromtimestamp( int(str(obj['last_modified']['$date'])[:-3])) row = self.objects_tree.findItems(objid, Qt.MatchExactly, column=0) if row: # Update it if it exists already item = row[0] if not row: # If Item does not exist in the tree widget already, make a new one. item = QTreeWidgetItem(self.objects_tree) items.append(item) for i, param in enumerate( (objid, name, (locx, locy, locz), resource, last_modified, "%04d" % euclidian(locx, locy, playerx, playery))): item.setText(i, str(param)) if items: self.objects_tree.insertTopLevelItems(0, items)