class CrosswordWidget(QWidget): def __init__(self, crossword_index, grid_data, grid_cell_length): QWidget.__init__(self) self.grid_model = CrosswordGridModel(crossword_index, grid_data) self.grid_delegate = CrosswordGridDelegate(grid_data) self.grid_table_view = QTableView(self) #sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) #self.grid_table_view.setSizePolicy(sizePolicy) self.grid_table_view.setModel(self.grid_model) self.grid_table_view.setItemDelegate(self.grid_delegate) self.grid_table_view.resizeColumnsToContents() self.grid_table_view.setStyleSheet("background:transparent") #self.grid_horizontal_header = self.grid_table_view.horizontalHeader() #self.grid_horizontal_header.setSectionResizeMode(QHeaderView.Fixed) #self.grid_horizontal_header.setDefaultSectionSize(grid_cell_length) #self.grid_horizontal_header.hide() #self.grid_vertical_header = self.grid_table_view.verticalHeader() #self.grid_vertical_header.setSectionResizeMode(QHeaderView.Fixed) #self.grid_vertical_header.setDefaultSectionSize(grid_cell_length * 1.3) #self.grid_vertical_header.hide() #self.main_layout = QHBoxLayout(self) #self.main_layout.addWidget(self.grid_table_view) #self.setLayout(self.main_layout) #self.layout().addWidget(self.grid_table_view) def save_solution(self): if self.grid_model.save_solution(): status_bar.showMessage("Solution saved")
class MainWin(QWidget): def __init__(self): super().__init__() self.dbConnector = cPl.DBConnector("timePlanner.db", "Task", ormMapping) self.taskStorage = cPl.TaskStorage(self.dbConnector, ormMapping) self.currentView = "Work" self.checkBox = QCheckBox('Minimize to Tray') self.checkBox.setChecked(True) self.createModels() self.grid = QGridLayout() self.tray_icon = QSystemTrayIcon() self.tray_icon.setToolTip("Time Planner") self.tray_icon.setIcon(self.style().standardIcon( QStyle.SP_ComputerIcon)) traySignal = "activated(QSystemTrayIcon::ActivationReason)" QObject.connect(self.tray_icon, SIGNAL(traySignal), self.__icon_activated) #appendFunc = anonFuncString("Total time") appendDataFinished = [ cPl.AppendDataView(self.finishedModel, 3, self.taskStorage.getTotalWorkTime, workTimeFormat), cPl.AppendDataView(self.finishedModel, 2, anonFuncString) ] self.finishedModel.setAppendData(appendDataFinished) self.initUI() def hideEvent(self, event): if self.checkBox.isChecked(): event.ignore() self.hide() self.tray_icon.show() def __icon_activated(self, reason): if reason == QSystemTrayIcon.Trigger: self.show() def __resizeView(self): self.view.horizontalHeader().setSectionResizeMode( 0, QHeaderView.Stretch) if self.currentView == "Work": self.view.horizontalHeader().setSectionResizeMode( 1, QHeaderView.Fixed) self.view.horizontalHeader().setSectionResizeMode( 2, QHeaderView.Fixed) self.view.horizontalHeader().setSectionResizeMode( 3, QHeaderView.ResizeToContents) self.view.setColumnWidth(1, 140) self.view.setColumnWidth(2, 70) self.view.setColumnWidth(self.model.getHeaderLenght(), 70) self.view.setColumnWidth(self.model.getHeaderLenght() + 1, 70) self.view.setColumnWidth(self.model.getHeaderLenght() + 2, 70) self.view.setColumnWidth(self.model.getHeaderLenght() + 3, 70) else: self.view.horizontalHeader().setSectionResizeMode( 1, QHeaderView.Fixed) self.view.horizontalHeader().setSectionResizeMode( 2, QHeaderView.Fixed) self.view.horizontalHeader().setSectionResizeMode( 3, QHeaderView.ResizeToContents) self.view.setColumnWidth(1, 140) self.view.setColumnWidth(2, 140) def initUI(self): self.taskStorage.Model = self.model grid = self.grid self.setLayout(grid) buttonCurrent = QPushButton('Current Task') buttonCurrent.setCheckable(True) buttonFinished = QPushButton('Finished Task') buttonFinished.setCheckable(True) buttonCurrent.setMaximumWidth(100) buttonFinished.setMaximumWidth(100) self.move(300, 150) self.setMinimumWidth(1100) self.setMinimumHeight(400) self.setWindowTitle('Time Planner') top_Panel = self.createTop() grid.addWidget(top_Panel, 0, 0) self.view = QTableView() self.view.setModel(self.model) stylesheet = "QHeaderView::section{color: grey; border: 2px solid #6c6c6c; border-width: 0px 0px 2px 0px; " \ "border-style: dotted; border-color: black} " self.view.setStyleSheet(stylesheet) self.__resizeView() #Create here else garbage collector clear it self.buttonStart = cPl.StartButtonDelegate(self.taskStorage, "taskId") self.buttonPause = cPl.PauseButtonDelegate(self.taskStorage, "taskId") self.buttonFinish = cPl.FinishButtonDelegate(self.taskStorage, "taskId") self.buttonDelete = cPl.DeleteButtonDelegate(self.taskStorage, "taskId", self) if self.currentView == "Work": self.view.setItemDelegateForColumn(self.model.getHeaderLenght(), self.buttonStart) self.view.setItemDelegateForColumn( self.model.getHeaderLenght() + 1, self.buttonPause) self.view.setItemDelegateForColumn( self.model.getHeaderLenght() + 2, self.buttonFinish) self.view.setItemDelegateForColumn( self.model.getHeaderLenght() + 3, self.buttonDelete) buttonCurrent.setChecked(True) buttonFinished.setChecked(False) else: self.view.setItemDelegateForColumn(self.model.getHeaderLenght(), self.buttonDelete) buttonCurrent.setChecked(False) buttonFinished.setChecked(True) viewPanel = self.createTaskView(self.view) grid.addWidget(viewPanel, 1, 0) buttonPanel = self.createButtonView() grid.addWidget(buttonPanel, 1, 1) grid.addWidget(self.checkBox, 2, 0) self.show() # Top panel - LineEdit for task name + Add new task button def createTop(self): topPanel = QWidget() topPanel.setContentsMargins(0, 0, 0, 0) hBox = QHBoxLayout() vBox = QVBoxLayout() lineEdit = QLineEdit('') lineEdit.setPlaceholderText("Enter new task name") buttonAdd = QPushButton('Add Task') buttonAdd.clicked.connect(self.add_newTask(lineEdit)) hBox.addWidget(lineEdit) lineEdit.setMinimumWidth(250) hBox.addWidget(buttonAdd) hBox.addStretch(1) vBox.addLayout(hBox) topPanel.setLayout(vBox) return topPanel def createTaskView(self, view): hBox = QHBoxLayout() viewPanel = QWidget() hBox.addWidget(view) viewPanel.setLayout(hBox) return viewPanel def createButtonView(self): buttons = [] datePickers = [] buttonPanel = QWidget() buttonPanel.setContentsMargins(0, 0, 0, 0) buttonCurrent = QPushButton('Current tasks') buttonCurrent.setCheckable(True) buttonFinished = QPushButton('Finished tasks') buttonFinished.setCheckable(True) buttonFilter = QPushButton("Filter by end date") buttonApply = QPushButton("Apply") buttonFilter.setCheckable(True) buttonCurrent.setMaximumWidth(100) buttonFinished.setMaximumWidth(100) buttonFilter.setMaximumWidth(100) buttonApply.setMaximumWidth(100) buttonCurrent.setMinimumWidth(100) buttonFinished.setMinimumWidth(100) buttonFilter.setMinimumWidth(100) buttonApply.setMinimumWidth(100) buttons.append(buttonFilter) # labelStart = QLabel("Date start") datePickers.append(labelStart) dateStart = QDateEdit() dateStart.setDisplayFormat('dd/MM/yyyy') dateStart.setCalendarPopup(True) dateStart.setDate(QDate.currentDate()) datePickers.append(dateStart) labelEnd = QLabel("Date end") datePickers.append(labelEnd) dateEnd = QDateEdit() dateEnd.setDisplayFormat('dd/MM/yyyy') dateEnd.setCalendarPopup(True) dateEnd.setDate(QDate.currentDate()) datePickers.append(dateEnd) datePickers.append(buttonApply) buttonCurrent.clicked.connect( self.switchCurrentTask(buttonFinished, buttonCurrent, buttons)) buttonFinished.clicked.connect( self.switchFinishedTask(buttonCurrent, buttonFinished, buttons)) buttonFilter.clicked.connect( self.openDatePickerFilter(datePickers, buttonFilter)) buttonApply.clicked.connect( self.ApplyDateFilterArchive(dateStart, dateEnd)) buttonCurrent.setChecked(True) vBox = QVBoxLayout() vBox.addWidget(buttonCurrent) vBox.addWidget(buttonFinished) vBox.addSpacing(30) for bnt in buttons: bnt.setVisible(False) vBox.addWidget(bnt) for datePicker in datePickers: datePicker.setVisible(False) vBox.addWidget(datePicker) vBox.addStretch(1) buttonPanel.setLayout(vBox) return buttonPanel def add_newTask(self, lineEdit): def call_sql(): if lineEdit.text() != "": self.taskStorage.addTask(lineEdit.text()) self.model.refresh() return call_sql def openDatePickerFilter(self, filterElements, clickBtn): def call(): if not clickBtn.isChecked(): for filterElement in filterElements: filterElement.setVisible(False) self.taskStorage.viewAllFinishedTask() self.finishedModel.refresh() else: for filterElement in filterElements: filterElement.setVisible(True) return call def ApplyDateFilterArchive(self, dateStart, dateEnd): def call(): start = datetime.combine(dateStart.date().toPython(), datetime.min.time()) end = datetime.combine(dateEnd.date().toPython(), datetime.min.time()) startUTC = int(float(start.timestamp())) endUTC = int(float(end.timestamp())) self.finishedModel.switchToFilterData(startUTC, endUTC) self.finishedModel.refresh() return call def switchCurrentTask(self, buttonInAct, btnAct, btnsFilter): def call(): if self.currentView != "Work": self.model.setAllTaskView() self.view.setModel(self.model) self.view.setItemDelegateForColumn( self.model.getHeaderLenght(), self.buttonStart) self.view.setItemDelegateForColumn( self.model.getHeaderLenght() + 1, self.buttonPause) self.view.setItemDelegateForColumn( self.model.getHeaderLenght() + 2, self.buttonFinish) btnAct.setChecked(True) buttonInAct.setChecked(False) for btn in btnsFilter: btn.setVisible(False) self.currentView = "Work" self.__resizeView() return call def switchFinishedTask(self, buttonInAct, btnAct, btnsFilter): def call(): if self.currentView != "Archive": self.finishedModel.switchToAllDataView() self.view.setModel(self.finishedModel) self.view.setItemDelegateForColumn( self.model.getHeaderLenght(), self.buttonDelete) btnAct.setChecked(True) buttonInAct.setChecked(False) for btn in btnsFilter: btn.setVisible(True) self.currentView = "Archive" self.__resizeView() return call def createModels(self): self.model = cPl.TaskModel(self.taskStorage, ormMapping, 0, buttonData, self) # передаем хранилище задач в модель self.finishedModel = cPl.TaskModel(self.taskStorage, ormMappingFinished, 1, buttonDataFinish, self) def updateView(self): self.view.update()