class Window(QWidget): def __init__(self): super(Window, self).__init__() self.tabs = QTabWidget(self) # self.tabs.setTabsClosable(True) layout = QGridLayout(self) layout.addWidget(self.tabs, 0, 0, 1, 2) self.tab1 = Homepage() self.tabs.addTab(self.tab1, "Home") self.tab2 = savedpage() self.tabs.addTab(self.tab2, "Saved") #this creates the result tab def createNewTab(self, imgs): #DELETE OLD TAB for i in range(self.tabs.count()): if self.tabs.tabText(i) == 'Results': self.tabs.removeTab(i) index = self.tabs.count() self.tabs.addTab(resultpage(), 'Results') self.tabs.setCurrentIndex(index) self.tabs.update() #this creates the saved tab def savedtab(self): #DELETE OLD TAB for i in range(self.tabs.count()): if self.tabs.tabText(i) == 'Saved': self.tabs.removeTab(i) index = self.tabs.count() self.tabs.addTab(savedpage(), 'Saved') self.tabs.setCurrentIndex(index) self.tabs.update() #this creates the edit tab def paintTab(self, img): #DELETE OLD TAB for i in range(self.tabs.count()): if self.tabs.tabText(i) == 'Edit': self.tabs.removeTab(i) index = self.tabs.count() self.tabs.addTab(ImageManipulation(img), 'Edit') self.tabs.setCurrentIndex(index) self.tabs.update() #Deprecated def repaint(self): #redrawing tab self.tabs.currentWidget().repaint()
class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.cameraInfo = QCameraInfo.defaultCamera() self.camera = QCamera(self.cameraInfo) self.camera.setCaptureMode(QCamera.CaptureStillImage) self.imageCapture = QCameraImageCapture(self.camera) self.imageCapture.imageCaptured.connect(self.imageCaptured) self.imageCapture.imageSaved.connect(self.imageSaved) self.currentPreview = QImage() toolBar = QToolBar() self.addToolBar(toolBar) fileMenu = self.menuBar().addMenu("&File") shutterIcon = QIcon( os.path.join(os.path.dirname(__file__), "shutter.svg")) self.takePictureAction = QAction(shutterIcon, "&Take Picture", self, shortcut="Ctrl+T", triggered=self.takePicture) self.takePictureAction.setToolTip("Take Picture") fileMenu.addAction(self.takePictureAction) toolBar.addAction(self.takePictureAction) exitAction = QAction(QIcon.fromTheme("application-exit"), "E&xit", self, shortcut="Ctrl+Q", triggered=self.close) fileMenu.addAction(exitAction) aboutMenu = self.menuBar().addMenu("&About") aboutQtAction = QAction("About &Qt", self, triggered=qApp.aboutQt) aboutMenu.addAction(aboutQtAction) self.tabWidget = QTabWidget() self.setCentralWidget(self.tabWidget) self.cameraViewfinder = QCameraViewfinder() self.camera.setViewfinder(self.cameraViewfinder) self.tabWidget.addTab(self.cameraViewfinder, "Viewfinder") if self.camera.status() != QCamera.UnavailableStatus: name = self.cameraInfo.description() self.setWindowTitle("PySide6 Camera Example (" + name + ")") self.statusBar().showMessage("Starting: '" + name + "'", 5000) self.camera.start() else: self.setWindowTitle("PySide6 Camera Example") self.takePictureAction.setEnabled(False) self.statusBar().showMessage("Camera unavailable", 5000) def nextImageFileName(self): picturesLocation = QStandardPaths.writableLocation( QStandardPaths.PicturesLocation) dateString = QDate.currentDate().toString("yyyyMMdd") pattern = picturesLocation + "/pyside6_camera_" + dateString + "_{:03d}.jpg" n = 1 while True: result = pattern.format(n) if not os.path.exists(result): return result n = n + 1 return None def takePicture(self): self.currentPreview = QImage() self.camera.searchAndLock() self.imageCapture.capture(self.nextImageFileName()) self.camera.unlock() def imageCaptured(self, id, previewImage): self.currentPreview = previewImage def imageSaved(self, id, fileName): index = self.tabWidget.count() imageView = ImageView(self.currentPreview, fileName) self.tabWidget.addTab(imageView, "Capture #{}".format(index)) self.tabWidget.setCurrentIndex(index)
class ProgramEditorWindow(QMainWindow): def __init__(self): super().__init__() StylesheetLoader.RegisterWidget(self) self.setWindowIcon(QIcon("Images/UCIcon.png")) centralLayout = QVBoxLayout() centralWidget = QWidget() centralWidget.setLayout(centralLayout) self.setCentralWidget(centralWidget) self._tabWidget = QTabWidget() centralLayout.addWidget(self._tabWidget) menuBar = MenuBar() self.setMenuBar(menuBar) menuBar.saveProgram.connect( lambda: self._tabWidget.currentWidget().SaveProgram()) menuBar.closeProgram.connect( lambda: self.RequestCloseTab(self._tabWidget.currentIndex())) self._tabWidget.tabCloseRequested.connect(self.RequestCloseTab) self._tabWidget.setTabsClosable(True) timer = QTimer(self) timer.timeout.connect(self.CheckPrograms) timer.start(30) def OpenProgram(self, program: Program): for tab in self.tabs(): if tab.program is program: self._tabWidget.setCurrentWidget(tab) return newTab = ProgramEditorTab(program) self._tabWidget.addTab(newTab, program.name) def RequestCloseTab(self, index): tab: ProgramEditorTab = self._tabWidget.widget(index) self._tabWidget.setCurrentWidget(tab) if tab.modified: ret = QMessageBox.warning( self, "Confirm", "'" + tab.program.name + "' has been modified.\nDo you want to save changes?", QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel, QMessageBox.Save) if ret is QMessageBox.Save: tab.SaveProgram() elif ret is QMessageBox.Cancel: return False self._tabWidget.removeTab(index) if not self._tabWidget.count(): self.close() return True def closeEvent(self, event) -> None: if not self.RequestCloseAll(): event.ignore() def RequestCloseAll(self): while self._tabWidget.count(): if not self.RequestCloseTab(0): return False return True def tabs(self) -> List[ProgramEditorTab]: return [ self._tabWidget.widget(i) for i in range(self._tabWidget.count()) ] def CheckPrograms(self): modified = False for tab in self.tabs(): title = tab.program.name if tab.modified: modified = True title += "*" self._tabWidget.setTabText(self._tabWidget.indexOf(tab), title) if tab.program not in AppGlobals.Chip().programs: self.deleteLater() current: ProgramEditorTab = self._tabWidget.currentWidget() if current: title = current.program.name if modified: title += " *" title += " | uChip Program Editor" self.setWindowTitle(title)