def ajout_cv_sortie(self, fileNames): self.ui.listW_cv_sortie.clear() for file in fileNames: fInfo = QFileInfo(file) fShortName = fInfo.baseName() item = QListWidgetItem(fShortName) self.ui.listW_cv_sortie.addItem(item) item.setToolTip(file)
def _left_panel(self): panel = QWidget() box = QVBoxLayout() btn_menu = QPushButton() icn = QtGui.QIcon.fromTheme("application-menu") btn_menu.setIcon(icn) btn_menu.setIconSize(QSize(BTN_MENU_SIZE, BTN_MENU_SIZE)) btn_menu.setMaximumWidth(BTN_MENU_SIZE) btn_menu.setMaximumHeight(BTN_MENU_SIZE) btn_menu.setToolTip(_("Options")) btn_menu.setObjectName("menuButton") # box.addWidget(btn_menu,Qt.Alignment(1)) indexes = [] for index, option in self.stacks.items(): idx = index lst_widget = QListWidgetItem() lst_widget.setText(option['name']) mod = option.get('module', None) if mod: try: idx = mod.index except: pass if idx > 0: icn = QtGui.QIcon.fromTheme(option['icon']) lst_widget.setIcon(icn) if 'tooltip' in option.keys(): lst_widget.setToolTip(option['tooltip']) while idx in indexes: idx += 1 indexes.append(index) self.stacks[idx]['widget'] = lst_widget orderedStacks = {} orderedStacks[0] = self.stacks[0] #self.lst_options.addItem(orderedStacks[0]['widget']) cont = 0 indexes.sort() for index in indexes: if index: orderedStacks[cont] = self.stacks[index].copy() if self.stacks[index].get('visible', True) == True: self.lst_options.addItem(orderedStacks[cont]['widget']) cont += 1 self.stacks = orderedStacks.copy() box.addWidget(self.lst_options) self.lst_options.currentRowChanged.connect(self._show_stack) self.lst_options.setCurrentIndex(QModelIndex()) self.last_index = None panel.setLayout(box) self.resize(self.size().width() + box.sizeHint().width(), self.size().height() + box.sizeHint().height() / 2) self.lst_options.setFixedSize( self.lst_options.sizeHintForColumn(0) + 2 * (self.lst_options.frameWidth() + 15), self.height() ) #self.lst_options.sizeHintForRow(0) * self.lst_options.count() + 2 * (self.lst_options.frameWidth()+15)) return (panel)
def ajoutListe(self): print("Ajout dans playlist") newFile = QFileDialog.getOpenFileName(self, "Choix Film", "/home", "Movie Files (*.avi, *.mp4)") fInfo = QFileInfo(newFile[0]) fShortName = fInfo.baseName() newMovie = QListWidgetItem(fShortName) newMovie.setToolTip(newFile[0]) self.ui.listWidget.addItem(newMovie)
def pbPlusCtrl(self): fileName = QFileDialog.getOpenFileName(self,"choix film","/home","Film(*.avi *.mp4)") fInfo = QFileInfo(fileName[0]) fShortName = fInfo.baseName() item = QListWidgetItem(fShortName) item.setToolTip(fileName[0]) self.ui.listWidget.addItem(item) print(item.toolTip().title())
def ajouterMedia(self): nomMedia = QFileDialog.getOpenFileName( self, "ChoixFilm", "c:/Users/AELION/PycharmProjects/lect_video", "(*.avi *.mp4)") fInfo = QFileInfo(nomMedia[0]) fShortName = fInfo.baseName() item = QListWidgetItem(fShortName) item.setToolTip(nomMedia[0]) self.ui.listWidget.addItem(item)
def ajouter2(self): nomMedia = QFileDialog.getOpenFileName( self, "Choix Film", "C:/Users/AELION/PycharmProjects/videoLHector", "Movie Files (*.avi *.mp4)") fInfo = QFileInfo(nomMedia[0]) fShortName = fInfo.baseName() print(fShortName) item = QListWidgetItem(fShortName) item.setToolTip(nomMedia[0]) self.ui.listWidget.addItem(item)
def ajouterMedia2(self): nomMedia = QFileDialog.getOpenFileName(self, "Choix Film", "c:/", "Movie Files (*.avi *.mp4)") if nomMedia[0] == "": #si aucun fichier selectionné return fInfo = QFileInfo(nomMedia[0]) fShortName = fInfo.baseName() item = QListWidgetItem(fShortName) item.setToolTip(nomMedia[0]) self.ui.lPlaylist.addItem(item)
def ajouterMedia2(self): nomMedia = QFileDialog.getOpenFileName(self, "Choix Film", "c:/", "Movie Files (*.avi *.mp4)") if nomMedia[ 0] == "": #si aucun fichier selectionné (si "Annuler" est sélectionné) return # return + vide => sortie de la fonction fInfo = QFileInfo(nomMedia[0]) fShortName = fInfo.baseName() item = QListWidgetItem(fShortName) item.setToolTip(nomMedia[0]) self.ui.listeLecture.addItem(item)
def addClicked(self): print("+") nomMedia = QFileDialog.getOpenFileName( self, "Choix Film", "C:/Users/AELION/Desktop/Aelion/PyCharm/VideoProject", "Movie files (*.avi *.mp4)") # item = QListWidgetItem(nomMedia[0]) # self.ui.wList.addItem(item) fInfo = QFileInfo(nomMedia[0]) fShortName = fInfo.baseName() item = QListWidgetItem(fShortName) item.setToolTip(nomMedia[0]) self.ui.wList.addItem(item)
def redraw_candidates_list(self): self.lstCandidates.clear() for candidate in self.existingSettings.CANDIDATES: ticker = candidate.ticker reason = candidate.reason o = 3 item_to_add = QListWidgetItem() item_to_add.setText(ticker) item_to_add.setToolTip(reason) self.lstCandidates.addItem(item_to_add) self.btnRemoveC.setEnabled(False) self.set_clear_button_state()
def ajoutCv_liste(self): fileNames = QFileDialog.getOpenFileNames(self, "choix cv", "C:/Users/AELION/Desktop") for file in fileNames[0]: fInfo = QFileInfo(file) fShortName = fInfo.baseName() item = QListWidgetItem(fShortName) item.setToolTip(file) if item.toolTip() not in self.listeCv: self.ui.listW_cv_entree.addItem(item) self.listeCv.append(file)
def ajoutClicked2(self): # print("Ajout2") nomMedia = QFileDialog.getOpenFileName( self, "Choix Film", "C:/Users/AELION/BCH/Qt_interface_graphique/QtPython_ExoLecteurVideo", "Movie Files(*.avi *.mp4)") if nomMedia[ 0] == "": # si aucun fichier selectionné pour éviter l'affichage d'une ligne vide dans la liste return fInfo = QFileInfo(nomMedia[0]) fShortName = fInfo.baseName() item = QListWidgetItem(fShortName) item.setToolTip( nomMedia[0] ) #permet en plus d'afficher bandeau info fichier quand survol souris self.ui.listFilm.addItem(item)
def __add_tracks(self, side, tracks): # Now add the tracks trackList = self.findChild(QListWidget, "Tracklist{}".format(side)) self.__items[side] = [] for t in tracks: self.__items[side].append(t) li = QListWidgetItem("{} - {}".format(t["artist"], t["title"]), trackList) li.track = t li.setToolTip(li.text()) p0 = self.findChild(QComboBox, "Playlist0") p1 = self.findChild(QComboBox, "Playlist1") t0 = self.findChild(QListWidget, "Tracklist0") t1 = self.findChild(QListWidget, "Tracklist1") # Check both playlists are set and loaded to compare them if not (p0.currentData() is None or p1.currentData() is None or self.__threads[0].isAlive() or self.__threads[1].isAlive()): # Check that at least one playlist is writable if p0.currentData()["writable"] or p1.currentData()["writable"]: # If there is some empty playlist, check it's not the only writable one if (t0.count() > 0 or p0.currentData()["writable"]) and ( t1.count() > 0 or p1.currentData()["writable"]): self.__threads["compare"] = threading.Thread( target=self.__compare_playlists) self.__threads["compare"].start() else: if t0.count() == 0: p = p0.currentText() a = self.findChild(QLabel, "SourceLabel0").text() else: p = p1.currentText() a = self.findChild(QLabel, "SourceLabel1").text() self.status.emit( "Playlist {} in {} has no items and no new content can be added since it's read-only" .format(p, a)) self.__change_next_tooltip.emit( "The two selected playlists don't allow continuing") else: self.status.emit("Both playlist are read-only") self.__change_next_tooltip.emit( "Cannot continue as both playlists are read-only")
def ajoutCV(self): newFiles = QFileDialog.getOpenFileNames(self, "Choix CVs", "/home", "CV (*pptx *pdf *docx)") n = len(newFiles[0]) for f in range(0, n): fInfo = QFileInfo(newFiles[0][f]) fShortName = fInfo.baseName() addCV = QListWidgetItem(fShortName) addCV.setToolTip(newFiles[0][f]) ajoutCV = QTableWidgetItem(fShortName) ajoutCV.setToolTip(newFiles[0][f]) if self.ui.tableWidget.rowCount() == 0: self.ui.tableWidget.insertRow(0) self.ui.tableWidget.setItem(0, 0, QTableWidgetItem(ajoutCV)) else: lgTable = self.ui.tableWidget.rowCount() self.ui.tableWidget.insertRow(lgTable) self.ui.tableWidget.setItem(lgTable, 0, QTableWidgetItem(ajoutCV))
def UpdateEpsData(self): self.epsListWidget.clear() info = BookMgr().books.get(self.bookId) if not info: return self.startRead.setEnabled(True) downloadIds = self.owner().downloadForm.GetDownloadCompleteEpsId(self.bookId) for index, epsInfo in enumerate(info.eps): label = QLabel(epsInfo.title) # label.setWordWrap(True) label.setContentsMargins(20, 10, 20, 10) item = QListWidgetItem(self.epsListWidget) if index in downloadIds: item.setBackground(QColor(18, 161, 130)) else: item.setBackground(QColor(0,0,0,0)) item.setSizeHint(label.sizeHint() + QSize(2, 0)) item.setToolTip(epsInfo.title) self.epsListWidget.setItemWidget(item, label) self.tabWidget.setTabText(0, "章节({})".format(str(len(info.eps)))) return
def selection_changed(self): try: if not splash.isHidden(): splash.showMessage(f"Finishing (2/3) - Loading first app..", color=splash_color) except NameError: pass try: data = self.ui.listAppsWidget.currentItem().data(Qt.UserRole) app_name = data["internal_name"] except Exception: app_name = None if app_name is not None: # Set active tab to first self.ui.tabMetadata.setCurrentIndex(0) # Hide icon self.ui.HomebrewIconLabel.hide() # Clear supported controllers listview: self.ui.SupportedControllersListWidget.clear() # Set data data = self.ui.listAppsWidget.currentItem().data(Qt.UserRole) # -- Get actual metadata # App Name self.ui.appname.setText(data["display_name"]) self.ui.SelectionInfoBox.setTitle("Metadata: " + data["display_name"]) self.ui.label_displayname.setText(data["display_name"]) # File Size try: self.ui.filesize.setText(metadata.file_size(data["extracted"])) except KeyError: self.ui.filesize.setText("Unknown") # Category self.ui.HomebrewCategoryLabel.setText( metadata.category_display_name(data["category"])) # Release Date self.ui.releasedate.setText( datetime.fromtimestamp(int( data["release_date"])).strftime('%B %e, %Y at %R')) # Controllers controllers = metadata.parse_controllers(data["controllers"]) # Add icons for Wii Remotes if controllers[0] > 1: item = QListWidgetItem() item.setText(f"{str(controllers[0])} Wii Remotes") item.setIcon( QIcon( resource_path( f"assets/gui/icons/controllers/{str(controllers[0])}WiiRemote.png" ))) item.setToolTip( f"This app supports up to {str(controllers[0])} Wii Remotes." ) self.ui.SupportedControllersListWidget.addItem(item) elif controllers[0] == 1: item = QListWidgetItem() item.setText(f"1 Wii Remote") item.setIcon( QIcon( resource_path( f"assets/gui/icons/controllers/1WiiRemote.png"))) item.setToolTip("This app supports a single Wii Remote.") self.ui.SupportedControllersListWidget.addItem(item) if controllers[1] is True: item = QListWidgetItem() item.setText(f"Nunchuk") item.setIcon( QIcon( resource_path( f"assets/gui/icons/controllers/Nunchuk.png"))) item.setToolTip("This app can be used with a Nunchuk.") self.ui.SupportedControllersListWidget.addItem(item) if controllers[2] is True: item = QListWidgetItem() item.setText(f"Classic Controller") item.setIcon( QIcon( resource_path( f"assets/gui/icons/controllers/ClassicController.png" ))) item.setToolTip( "This app can be used with a Classic Controller.") self.ui.SupportedControllersListWidget.addItem(item) if controllers[3] is True: item = QListWidgetItem() item.setText(f"GameCube Controller") item.setIcon( QIcon( resource_path( f"assets/gui/icons/controllers/GamecubeController.png" ))) item.setToolTip( "This app can be used with a Gamecube Controller.") self.ui.SupportedControllersListWidget.addItem(item) if controllers[4] is True: item = QListWidgetItem() item.setText(f"Wii Zapper") item.setIcon( QIcon( resource_path( f"assets/gui/icons/controllers/WiiZapper.png"))) item.setToolTip("This app can be used with a Wii Zapper.") self.ui.SupportedControllersListWidget.addItem(item) if controllers[5] is True: item = QListWidgetItem() item.setText(f"USB Keyboard") item.setIcon( QIcon( resource_path( f"assets/gui/icons/controllers/USBKeyboard.png"))) item.setToolTip("This app can be used with a USB Keyboard.") self.ui.SupportedControllersListWidget.addItem(item) if controllers[6] is True: item = QListWidgetItem() item.setText(f"SDHC Card") item.setIcon( QIcon( resource_path( f"assets/gui/icons/controllers/SDHC.png"))) item.setToolTip("This app is confirmed to support SDHC cards.") self.ui.SupportedControllersListWidget.addItem(item) # Version self.ui.version.setText(data["version"]) # Coder self.ui.developer.setText(data["coder"]) # Short Description if data["short_description"] == "": self.ui.label_description.setText("No description specified.") else: self.ui.label_description.setText(data["short_description"]) # Long Description self.ui.longDescriptionBrowser.setText(data["long_description"]) # File Name Line Edit self.ui.FileNameLineEdit.setText(app_name + ".zip") self.ui.DirectLinkLineEdit.setText( metadata.url(app_name, repo=HOST)) self.ui.progressBar.setValue(0) self.repaint() # Load icon self.load_icon(app_name=app_name, repo=HOST) self.status_message("Ready to download")
def run(self): # next() raises a StopIteration exception when the generator ends. # If this exception is unhandled by run(), it causes thread termination. # If wdg internal C++ object was destroyed by main thread (form closing) # a RuntimeError exception is raised and causes thread termination too. # Thus, no further synchronization is needed. import exiftool with exiftool.ExifTool() as e: while True: try: filename = next(self.fileListGen) # get orientation try: # read metadata from sidecar (.mie) if it exists, otherwise from image file. profile, metadata = e.get_metadata( filename, tags=("colorspace", "profileDescription", "orientation", "model", "rating", "FileCreateDate"), createsidecar=False) except ValueError: metadata = {} # get image info tmp = [ value for key, value in metadata.items() if 'orientation' in key.lower() ] orientation = tmp[ 0] if tmp else 1 # metadata.get("EXIF:Orientation", 1) # EXIF:DateTimeOriginal seems to be missing in many files tmp = [ value for key, value in metadata.items() if 'date' in key.lower() ] date = tmp[ 0] if tmp else '' # metadata.get("EXIF:ModifyDate", '') tmp = [ value for key, value in metadata.items() if 'rating' in key.lower() ] rating = tmp[ 0] if tmp else 0 # metadata.get("XMP:Rating", 5) rating = ''.join(['*'] * int(rating)) transformation = exiftool.decodeExifOrientation( orientation) # get thumbnail img = e.get_thumbNail(filename, thumbname='thumbnailimage') # no thumbnail found : try preview if img.isNull(): img = e.get_thumbNail( filename, thumbname='PreviewImage' ) # the order is important : for jpeg PreviewImage is full sized ! # all failed : open image if img.isNull(): img = QImage(filename) # remove possible black borders, except for .NEF if filename[-3:] not in ['nef', 'NEF']: bBorder = 7 img = img.copy( QRect(0, bBorder, img.width(), img.height() - 2 * bBorder)) pxm = QPixmap.fromImage(img) if not transformation.isIdentity(): pxm = pxm.transformed(transformation) # set item caption and tooltip item = QListWidgetItem( QIcon(pxm), basename(filename)) # + '\n' + rating) item.setToolTip( basename(filename) + ' ' + date + ' ' + rating) # set item mimeData to get filename=item.data(Qt.UserRole)[0] transformation=item.data(Qt.UserRole)[1] item.setData(Qt.UserRole, (filename, transformation)) self.wdg.addItem(item) # for clean exiting we catch all exceptions and force break except OSError: continue except: break