def __init__(self, *args, **kwargs): super(Widget_connectionList, self).__init__(*args, **kwargs) self.installEventFilter(self) mainLayout = QVBoxLayout(self) mainLayout.setContentsMargins(5, 5, 5, 5) mainLayout.setSpacing(0) treeWidget = QTreeWidget() treeWidget.setColumnCount(3) headerItem = treeWidget.headerItem() headerItem.setText(0, "Attribute") headerItem.setText(1, "Target Node") headerItem.setText(2, "Target Attr") treeWidget.setRootIsDecorated(False) self.treeWidget = treeWidget treeWidget.setStyleSheet( "QTreeWidget::item { border-bottom: 1px solid gray; padding:1px}\ QTreeWidget{ font-size:13px;}") treeWidget.header().setStyleSheet("font-size:12px;") w_buttons = QWidget() lay_buttons = QHBoxLayout(w_buttons) lay_buttons.setContentsMargins(0, 0, 0, 0) lay_buttons.setSpacing(5) button_add = QPushButton("Add Line") button_remove = QPushButton("Remove Line") lay_buttons.addWidget(button_add) lay_buttons.addWidget(button_remove) mainLayout.addWidget(treeWidget) mainLayout.addWidget(w_buttons) button_add.clicked.connect(self.cmd_addLine) button_remove.clicked.connect(self.cmd_removeLine) treeWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) QtCore.QObject.connect( treeWidget, QtCore.SIGNAL('customContextMenuRequested(QPoint)'), self.loadContextMenu) self.treeWidget = treeWidget self.readData()
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
class TreeView(): def __init__(self, targetLayoutContainer): self.tree = QTreeWidget() self.tree.addAction(QAction('Add nested favorite', self.tree, triggered=self.add_child)) self.tree.addAction(QAction('Edit Title', self.tree, triggered=self.edit_title)) self.tree.addAction(QAction('HTML page', self.tree, triggered=self.create_html_page)) self.tree.addAction(QAction('Delete', self.tree, triggered=self.delete)) self.tree.setContextMenuPolicy(Qt.ActionsContextMenu) targetLayoutContainer.addWidget(self.tree) def add_child(self): item = self.tree.currentItem() print item.data(1, Qt.ItemDataRole.EditRole).getFullPath() newItem = add_child(item.data(1, Qt.ItemDataRole.EditRole)) newChildNode = QTreeWidgetItem() newChildNode.setText(0, newItem.label) newChildNode.setData(1, Qt.ItemDataRole.EditRole, newItem) item.addChild(newChildNode) def get_item(self, node): return node.data(1, Qt.ItemDataRole.EditRole) def set_favorites(self, favoritesRoot): self.tree.clear() item = QTreeWidgetItem() item.setText(0, favoritesRoot.label) item.setData(1,Qt.ItemDataRole.EditRole, favoritesRoot) self.tree.addTopLevelItem(item) self.add_children(favoritesRoot, item) def edit_title(self): newTitle, result = QInputDialog.getText(None, 'new title', 'enter a new title') if not result: return item = self.get_item(self.tree.currentItem()) item.label = newTitle save(item, newTitle) self.tree.currentItem().setText(0, item.label) def create_html_page(self): item = self.get_item(self.tree.currentItem()) page = None if item.page == None: page = item.add_html_page() save(item, page=page) else: page = item.add_html_page() self.show_page(page) def add_children(self, node, item): for child in node.children: childItem = QTreeWidgetItem() childItem.setText(0, child.label) childItem.setData(1,Qt.ItemDataRole.EditRole, child) item.addChild(childItem) self.add_children(child, childItem) def delete(self): if(self.get_item(self.tree.currentItem()).parent == None): QMessageBox.warning(None, 'cannot delete the root node', 'cannot delete the root node') return delete(self.get_item(self.tree.currentItem())) self.tree.currentItem().parent().removeChild(self.tree.currentItem()) def show_page(self, page=None): if page == None: controller.show_page(self.get_item(self.tree.currentItem()).page) else: controller.show_page(page)
def __init__(self, *args, **kwargs): self.get_csv_form_google_spreadsheets(Widget_FileTree.url, Widget_FileTree.csv) self.dict_extensionList = self.get_dictList_from_csvPath( Widget_FileTree.csv) super(Widget_FileTree, self).__init__(*args, **kwargs) self.installEventFilter(self) mainLayout = QVBoxLayout(self) mainLayout.setContentsMargins(0, 5, 0, 0) w_basePath = QWidget() lay_basePath = QHBoxLayout(w_basePath) w_basePath.setStyleSheet("font-size:12px") lay_basePath.setContentsMargins(5, 0, 3, 0) label_basePath = QLabel("Base Path : ") lineEdit_basePath = QLineEdit() lineEdit_basePath.setMinimumHeight(22) lineEdit_basePath.setReadOnly(True) lay_basePath.addWidget(label_basePath) lay_basePath.addWidget(lineEdit_basePath) w_tree = QTreeWidget() w_tree.setColumnCount(2) headerItem = w_tree.headerItem() headerItem.setText(0, "File Path") headerItem.setText(1, "Target Node") w_tree.itemExpanded.connect(self.setContentsWidth) w_tree.itemCollapsed.connect(self.setContentsWidth) w_tree.setSelectionMode(QAbstractItemView.ExtendedSelection) self.w_typeAttrList = Widget_TypeAttributeList() w_tree.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) QtCore.QObject.connect( w_tree, QtCore.SIGNAL('customContextMenuRequested(QPoint)'), self.loadContextMenu) w_check = QWidget() lay_check = QHBoxLayout(w_check) lay_check.setContentsMargins(5, 5, 0, 10) lay_check.setSpacing(0) checkBox = QCheckBox() checkBox.setFixedWidth(30) label = QLabel("Show Unused files in folder") label.setStyleSheet("font-size:12px") lay_check.addWidget(checkBox) lay_check.addWidget(label) mainLayout.addWidget(w_basePath) mainLayout.addWidget(w_tree) mainLayout.addWidget(w_check) self.w_tree = w_tree self.checkBox = checkBox self.lineEdit = lineEdit_basePath self.load_checkBoxValue(checkBox, Widget_FileTree.path_uiInfo) QtCore.QObject.connect(checkBox, QtCore.SIGNAL("stateChanged(int)"), self.saveCheckBoxValue) QtCore.QObject.connect(w_tree, QtCore.SIGNAL("itemSelectionChanged()"), self.selectItem)