class IntroWindow(QMainWindow, Form): def __init__(self): Form.__init__(self) QMainWindow.__init__(self) self.setWindowIcon(QIcon("logo.png")) p = self.palette() p.setColor(QPalette.Window, Qt.gray) self.setPalette(p) self.setupUi(self) self.a = 1 self.videowidget = QVideoWidget() self.vertical.addWidget(self.videowidget) self.videoplayer = QMediaPlayer(None, QMediaPlayer.VideoSurface) self.videoplayer.setVideoOutput(self.videowidget) self.sliderfilm.setRange(0, 0) self.volume.setRange(0, 100) self.videoplayer.setVolume(100) self.volume.setValue(100) self.play.setEnabled(False) self.increaseRate.setEnabled(False) self.decreaseRate.setEnabled(False) # putting Icons on buttons self.increaseRate.setIcon(self.style().standardIcon( QStyle.SP_MediaSeekForward)) self.decreaseRate.setIcon(self.style().standardIcon( QStyle.SP_MediaSeekBackward)) self.play.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) self.open.setIcon(self.style().standardIcon(QStyle.SP_DirHomeIcon)) self.skipforward.setIcon(self.style().standardIcon( QStyle.SP_MediaSkipForward)) self.skipback.setIcon(self.style().standardIcon( QStyle.SP_MediaSkipBackward)) self.stop.setIcon(self.style().standardIcon(QStyle.SP_MediaStop)) self.sliderfilm.sliderMoved.connect(self.setpos) self.videoplayer.positionChanged.connect(self.position) self.videoplayer.durationChanged.connect(self.changed) self.videoplayer.volumeChanged.connect(self.setvolpos) self.volume.sliderMoved.connect(self.setvolpos) self.actionOpen.triggered.connect(self.Loadvideo) self.actionSearch_By_Tag.triggered.connect(self.opensecond) self.actionFullscreen.triggered.connect(self.screen) self.skipforward.clicked.connect(self.skipforw) self.skipback.clicked.connect(self.skipbac) self.increaseRate.clicked.connect(self.incRate) self.decreaseRate.clicked.connect(self.decRate) self.play.clicked.connect(self.play_video) self.open.clicked.connect(lambda: self.Loadvideo(self.videoplayer)) self.stop.clicked.connect(self.stopp) self.listView.hide() self.addtolist() self.listviewstatus = 0 self.listbtn.clicked.connect(lambda: self.list()) self.listView.itemClicked.connect(self.listwidgetclicked) self.theme1.triggered.connect(lambda: self.theme01()) self.theme2.triggered.connect(lambda: self.theme02()) self.theme3.triggered.connect(lambda: self.theme03()) self.theme4.triggered.connect(lambda: self.theme04()) # def itemClicked(item): # print("sassss") # self.button = QPushButton("button", self) ####how to hid window flag # self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint) # self.hide() # self.show() def stopp(self): self.stop.setEnabled(False) self.videoplayer.stop() self.videoplayer.setPosition(0) def listwidgetclicked(self, item): t = item.text() pt = datetime.strptime(t, "%H:%M:%S") total_seconds = pt.second + pt.minute * 60 + pt.hour * 3600 if self.a == 0: self.videoplayer.setPosition(total_seconds * 1000) def list(self): if self.listviewstatus % 2 == 1: self.listView.hide() self.listbtn.setText("^") self.listviewstatus += 1 else: self.listbtn.setText("v") self.listviewstatus += 1 self.listView.show() # def resizeEvent(self, cls): # print(self.geometry()) # width = self.frameGeometry().width() # height = self.frameGeometry().height() # self.button.move(width - 200, height - 200) def mouseDoubleClickEvent(self, cls): if not self.isFullScreen(): # self.showFullScreen() self.fulls() else: self.unfull() # self.showNormal() def keyPressEvent(self, e): if e.key() == Qt.Key_Escape: if self.isFullScreen(): self.unfull() # self.showNormal() def screen(self): if not self.isFullScreen(): # self.showFullScreen() self.fulls() else: self.unfull() # self.showNormal() # forward media 5s def skipforw(self): self.videoplayer.setPosition(self.videoplayer.position() + 5000) def skipbac(self): self.videoplayer.setPosition(self.videoplayer.position() - 5000) # set increase rate def incRate(self): if self.videoplayer.playbackRate() == 0: x = self.videoplayer.playbackRate() + 1 else: x = self.videoplayer.playbackRate() self.videoplayer.setPlaybackRate(x + 0.25) # set decrease rate def decRate(self): if self.videoplayer.playbackRate() == 0: x = self.videoplayer.playbackRate() + 1 else: x = self.videoplayer.playbackRate() self.videoplayer.setPlaybackRate(x - 0.25) def addtolist(self): data = pd.read_excel("tags.xlsx") firstline = pd.DataFrame(data, index=[0]) x = pd.DataFrame(data, columns=[list(firstline)[0]]) self.listView.addItem(str(list(firstline)[1])) for i in range(x.size): self.listView.addItem(str(data.iat[i, 1])) def opensecond(self): login_page = LoginPage() login_page.setWindowFlags(QtCore.Qt.WindowCloseButtonHint) data = pd.read_excel("tags.xlsx") firstline = pd.DataFrame(data, index=[0]) x = pd.DataFrame(data, columns=[list(firstline)[0]]) login_page.tableWidget.setRowCount(x.size) login_page.tableWidget.insertRow(1) login_page.tableWidget.setItem( 0, 0, QtWidgets.QTableWidgetItem(list(firstline)[0])) login_page.tableWidget.setItem( 0, 1, QtWidgets.QTableWidgetItem(str(list(firstline)[1]))) for i in range(x.size): for j in range(2): login_page.tableWidget.setItem( i + 1, j, QtWidgets.QTableWidgetItem(str(data.iat[i, j]))) # self.listView.addItem(str(data.iat[i, j])) login_page.buttonBox.accepted.connect(lambda: login_page.shows(self)) login_page.tableWidget.setHorizontalHeaderLabels(["Tag", "Time"]) login_page.exec_() def fulls(self): self.decreaseRate.hide() self.increaseRate.hide() self.centralwidget.setContentsMargins(0, 0, 0, 0) self.play.hide() ################################################ # self.stop.hide() ################################################ self.open.hide() ################################################ self.skipforward.hide( ) ################################################ self.skipback.hide() ################################################ # self.horizontalSpacer_2.hide() # self.horizontalSpacer.hide() self.label.hide() ################################################ self.volume.hide() ################################################ self.menubar.hide( ) ################################################################ self.sliderfilm.hide( ) ################################################ self.statusBar.hide() self.showFullScreen() ################################################ self.listbtn.hide() self.listView.hide() def unfull(self): self.centralwidget.setContentsMargins(10, 10, 10, 10) self.decreaseRate.show() self.increaseRate.show() self.play.show() ################################################ # self.stop.show() ################################################ self.open.show() ################################################ self.skipforward.show( ) ################################################ self.skipback.show() ################################################ # self.horizontalSpacer_2.hide() # self.horizontalSpacer.hide() self.label.show() ################################################ self.volume.show() ################################################ self.menubar.show( ) ################################################################ self.sliderfilm.show( ) ################################################ self.statusBar.show() self.showNormal() ################################################ self.listbtn.show() # self.listView.show() ##setting position of film def setpos(self, position): self.videoplayer.setPosition(position) def position(self, position): hour = int((position / 3600000) % 24) if hour < 10: hour = "0" + str(hour) minute = int((position / 60000) % 60) if minute < 10: minute = "0" + str(minute) second = int((position / 1000) % 60) if second < 10: second = "0" + str(second) self.label.setText(f"{hour}:{minute}:{second}") self.sliderfilm.setValue(position) def changed(self, duration): self.sliderfilm.setRange(0, duration) ##setting position of volume def setvolpos(self, position): self.videoplayer.setVolume(position) ##stop button # def stopp(self): # self.stop.setEnabled(False) # self.play.setText("Start") # self.videoplayer.stop() # self.videoplayer.setPosition(0) ##open button or open from menu bar def Loadvideo(self, videoplayer): self.a = 0 filename, _ = QFileDialog.getOpenFileName(self, "Open Video") if filename != "": self.videoplayer.setPosition(0) types = (".mov" in filename) or (".png" in filename) or (".mp4" in filename) if types: if filename != "": self.videoplayer.setMedia( QMediaContent(QUrl.fromLocalFile(filename))) self.videoplayer.play() self.play.setEnabled(True) self.play.setIcon(self.style().standardIcon( QStyle.SP_MediaPause)) self.increaseRate.setEnabled(True) self.decreaseRate.setEnabled(True) ##play button def play_video(self): if self.videoplayer.state() == QMediaPlayer.PlayingState: self.play.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) self.videoplayer.pause() else: self.videoplayer.play() self.play.setIcon(self.style().standardIcon(QStyle.SP_MediaPause)) def theme01(self): self.videowidget.setStyleSheet("background-color: #404040") self.setStyleSheet("background-color: #A0A0A0") def theme02(self): self.videowidget.setStyleSheet("background-color: #330019") self.setStyleSheet("background-color: #990000") def theme03(self): self.videowidget.setStyleSheet("background-color: #35557F") self.setStyleSheet("background-color: #003366") def theme04(self): self.videowidget.setStyleSheet("background-color: #00FF00") self.setStyleSheet("background-color: #4C9900")
class IntroWindow(QMainWindow, Form): def __init__(self): Form.__init__(self) QMainWindow.__init__(self) self.setWindowIcon(QIcon("logo.png")) p = self.palette() p.setColor(QPalette.Window, Qt.gray) self.setPalette(p) self.setupUi(self) self.a = 1 self.videowidget = QVideoWidget() self.vertical.addWidget(self.videowidget) self.videoplayer = QMediaPlayer(None, QMediaPlayer.VideoSurface) self.videoplayer.setVideoOutput(self.videowidget) self.sliderfilm.setRange(0, 0) self.volume.setRange(0, 100) self.videoplayer.setVolume(100) self.volume.setValue(100) self.play.setEnabled(False) self.increaseRate.setEnabled(False) self.decreaseRate.setEnabled(False) self.sliderfilm.installEventFilter(self) self.volume.installEventFilter(self) self.frames.installEventFilter(self) self.frame_2.installEventFilter(self) self.frames.installEventFilter(self) # putting Icons on buttons self.increaseRate.setIcon(self.style().standardIcon( QStyle.SP_MediaSeekForward)) self.decreaseRate.setIcon(self.style().standardIcon( QStyle.SP_MediaSeekBackward)) self.play.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) self.open.setIcon(self.style().standardIcon(QStyle.SP_DirHomeIcon)) self.skipforward.setIcon(self.style().standardIcon( QStyle.SP_MediaSkipForward)) self.skipback.setIcon(self.style().standardIcon( QStyle.SP_MediaSkipBackward)) self.stop.setIcon(self.style().standardIcon(QStyle.SP_MediaStop)) self.sliderfilm.sliderMoved.connect(self.setpos) self.videoplayer.positionChanged.connect(self.position) self.videoplayer.durationChanged.connect(self.changed) self.videoplayer.volumeChanged.connect(self.setvolpos) self.volume.sliderMoved.connect(self.setvolpos) self.actionOpen.triggered.connect(self.Loadvideo) self.actionSearch_By_Tag.triggered.connect(self.opensecond) self.actionFullscreen.triggered.connect(self.screen) self.skipforward.clicked.connect(self.skipforw) self.skipback.clicked.connect(self.skipbac) self.increaseRate.clicked.connect(self.incRate) self.decreaseRate.clicked.connect(self.decRate) self.play.clicked.connect(self.play_video) self.open.clicked.connect(lambda: self.Loadvideo(self.videoplayer)) self.stop.clicked.connect(self.stopp) self.listView.hide() self.tolfilm = 0 self.listviewstatus = 0 self.listbtn.clicked.connect(lambda: self.list()) self.listView.itemClicked.connect(self.listwidgetclicked) self.theme1.triggered.connect(lambda: self.theme01()) self.theme2.triggered.connect(lambda: self.theme02()) self.theme3.triggered.connect(lambda: self.theme03()) self.theme4.triggered.connect(lambda: self.theme04()) self.actionFarsi.triggered.connect(lambda: self.farsi()) self.actionEnglish.triggered.connect(lambda: self.english()) self.filename = "" self.x = 0 self.videowidget3 = QVideoWidget() self.verticalLayout_8.addWidget(self.videowidget3) self.videoplayer3 = QMediaPlayer(None, QMediaPlayer.VideoSurface) self.videoplayer3.setVideoOutput(self.videowidget3) self.widget.hide() self.stop.setEnabled(False) self.m = 0 self.dataL = [] with open("config.txt") as f: self.config = f.read() if int(self.config) == 11: self.theme01() self.farsi() if int(self.config) == 12: self.theme01() self.english() elif int(self.config) == 21: self.farsi() self.theme02() elif int(self.config) == 22: self.english() self.theme02() elif int(self.config) == 31: self.farsi() self.theme03() elif int(self.config) == 32: self.english() self.theme03() elif int(self.config) == 41: self.farsi() self.theme04() elif int(self.config) == 42: self.english() self.theme04() def farsi(self): self.menuLanguage.setTitle("زبان") self.menuView.setTitle("نمایش") self.theme1.setText("تم ۱") self.theme2.setText("تم ۲") self.theme3.setText("تم ۳") self.theme4.setText("تم ۴") self.menuFile.setTitle("فایل") self.actionOpen.setText("باز کردن ویدیو") self.actionSearch_By_Tag.setText("پنل تگ ها") self.actionFullscreen.setText("تمام صفحه") self.actionEnglish.setText("انگلیسی") self.actionFarsi.setText("فارسی") self.decreaseRate.setStatusTip("کاهش سرعت") self.decreaseRate.setToolTip("کاهش سرعت") self.increaseRate.setStatusTip("افزایش سرعت") self.increaseRate.setToolTip("افزایش سرعت") self.open.setStatusTip("باز کردن ویدیو") self.open.setToolTip("باز کردن ویدیو") self.stop.setStatusTip("توقف") self.stop.setToolTip("توقف") self.skipback.setStatusTip("عقب رفتن") self.skipback.setToolTip("عقب رفتن") self.play.setStatusTip("شروع/ایست") self.play.setToolTip("شروع/ایست") self.skipforward.setStatusTip("جلو رفتن") self.skipforward.setToolTip("جلو رفتن") self.volume.setStatusTip("صدا") self.volume.setToolTip("صدا") self.listbtn.setStatusTip("دسترسی آسان") self.listbtn.setToolTip( "پنلی شامل تگ ها و پنجره ای برای پیش نمایش را نمایان/پنهان میکند که با کلیک کردن بر روی هر کدام ویدیو به آن لحظه میرود" ) with open("config.txt") as f: self.config = f.read() if int(self.config) // 10 == 1: with open("config.txt", "w") as f2: f2.write("11") if int(self.config) // 10 == 2: with open("config.txt", "w") as f2: f2.write("21") if int(self.config) // 10 == 3: with open("config.txt", "w") as f2: f2.write("31") if int(self.config) // 10 == 4: with open("config.txt", "w") as f2: f2.write("41") def english(self): self.menuLanguage.setTitle("Language") self.menuView.setTitle("View") self.theme1.setText("Theme1") self.theme2.setText("Theme2") self.theme3.setText("Theme3") self.theme4.setText("Theme4") self.menuFile.setTitle("File") self.actionOpen.setText("Open Video") self.actionSearch_By_Tag.setText("Tags Panel") self.actionFullscreen.setText("Fullscreen") self.actionEnglish.setText("English") self.actionFarsi.setText("Persian") self.decreaseRate.setStatusTip("Decrease Play Speed") self.decreaseRate.setToolTip("Decrease Play Speed") self.increaseRate.setStatusTip("Increase Play Speed") self.increaseRate.setToolTip("Increase Play Speed") self.open.setStatusTip("Open Video") self.open.setToolTip("Open Video") self.stop.setStatusTip("Stop") self.stop.setToolTip("Stop") self.skipback.setStatusTip("Previous") self.skipback.setToolTip("Previous") self.play.setStatusTip("Play/Pause") self.play.setToolTip("Play/Pause") self.skipforward.setStatusTip("Next") self.skipforward.setToolTip("Next") self.volume.setStatusTip("Volume") self.volume.setToolTip("Volume") self.listbtn.setStatusTip("Easy Access") self.listbtn.setToolTip( "Shows/Hides a panel for the tags that can be clicked on to take the video to its moment and also a preview window" ) with open("config.txt") as f: self.config = f.read() if self.config == "": with open("config.txt", w) as f2: f2.write("11") self.config = "11" if int(self.config) // 10 == 1: with open("config.txt", "w") as f2: f2.write("12") if int(self.config) // 10 == 2: with open("config.txt", "w") as f2: f2.write("22") if int(self.config) // 10 == 3: with open("config.txt", "w") as f2: f2.write("32") if int(self.config) // 10 == 4: with open("config.txt", "w") as f2: f2.write("42") def moviess(self): x = self.filename.split("/") file_name = self.filename[:self.filename.find(x[len(x) - 1])] png = "" png2 = "" folders = os.listdir(file_name + r"/") for file in folders: if file.find(".mp4") > 0: png = png + ";" + file_name + file png2 = ";" + file_name + file + png2 png = png + ";" self.png = png png2 = png2 + ";" self.png2 = png2 def hoverleave(self): self.widget.hide() def gotovolume(self): x, _ = win32api.GetCursorPos() self.videoplayer.setVolume( int((x - self.mapToGlobal(self.volume.pos()).x()) / self.volume.width() * 100)) self.volume.setValue( int((x - self.mapToGlobal(self.volume.pos()).x()) / self.volume.width() * 100)) if self.m % 2 == 1: self.m += 1 self.videoplayer.setMuted(False) def goto(self): x, _ = win32api.GetCursorPos() if self.filename != "": self.videoplayer.setPosition( (x - self.mapToGlobal(self.sliderfilm.pos()).x()) / self.sliderfilm.width() * self.dur * 1000) def onHovered(self): x, _ = win32api.GetCursorPos() if self.filename != "": if self.listviewstatus % 2 == 1: self.videoplayer3.setPosition( (x - self.mapToGlobal(self.sliderfilm.pos()).x()) / self.sliderfilm.width() * self.dur * 1000) self.widget.show() def eventFilter(self, obj, event): if obj == self.sliderfilm and event.type() == QtCore.QEvent.HoverMove: self.onHovered() elif (obj == self.frames or obj == self.frame_2) and event.type() == QtCore.QEvent.Enter: self.hoverleave() elif obj == self.sliderfilm and event.type( ) == QtCore.QEvent.MouseButtonPress: self.goto() elif obj == self.volume and event.type( ) == QtCore.QEvent.MouseButtonPress: self.gotovolume() elif obj == self.frames and event.type( ) == QtCore.QEvent.MouseButtonDblClick: if not self.isFullScreen(): self.fulls() else: self.unfull() return super(QMainWindow, self).eventFilter(obj, event) def stopp(self): self.stop.setEnabled(False) self.videoplayer.stop() self.videoplayer.setPosition(0) self.play.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) def listwidgetclicked(self, item): t = item.text() t = t[t.find(">") + 1:] pt = datetime.strptime(t, "%H:%M:%S") total_seconds = pt.second + pt.minute * 60 + pt.hour * 3600 if self.a == 0: self.videoplayer.setPosition(total_seconds * 1000) def list(self): if self.listviewstatus % 2 == 1: self.listView.hide() self.widget.hide() self.listbtn.setText("^") self.listviewstatus += 1 else: self.listbtn.setText("v") self.listviewstatus += 1 self.listView.show() def keyPressEvent(self, e): if e.key() == Qt.Key_Escape: if self.isFullScreen(): self.unfull() elif e.key() == Qt.Key_6: if self.filename != "": self.videoplayer.setPosition(self.videoplayer.position() + 5000) elif e.key() == Qt.Key_4: if self.filename != "": self.videoplayer.setPosition(self.videoplayer.position() - 5000) elif e.key() == Qt.Key_Space: if self.filename != "": self.play_video() elif e.key() == Qt.Key_M: if self.m % 2 == 0: self.m += 1 self.videoplayer.setMuted(True) self.volume.setEnabled(False) self.vvv = self.volume.value() self.volume.setValue(0) else: self.m += 1 self.volume.setValue(self.vvv) self.volume.setEnabled(True) self.videoplayer.setMuted(False) def screen(self): if not self.isFullScreen(): self.fulls() else: self.unfull() # forward media 5s def skipforw(self): a = self.png.find(self.filename) aa = self.png.find(";", a + 1) filename = self.png[aa + 1:self.png.find(";", aa + 1)] if filename != "": self.filename = filename self.videoplayer.setMedia( QMediaContent(QUrl.fromLocalFile(filename))) self.videoplayer3.setMedia( QMediaContent(QUrl.fromLocalFile(filename))) title = filename.split("/") title = title[len(title) - 1] self.setWindowTitle(f"Taz Player openning{title}") self.videoplayer3.play() self.videoplayer3.pause() self.widget.hide() self.videoplayer.setPosition(0) self.videoplayer.play() self.play.setIcon(self.style().standardIcon(QStyle.SP_MediaPause)) clip = VideoFileClip(filename) self.dur = clip.duration def skipbac(self): a = self.png2.find(self.filename) aa = self.png2.find(";", a + 1) filename = self.png2[aa + 1:self.png2.find(";", aa + 1)] if filename != "": self.filename = filename self.videoplayer.setMedia( QMediaContent(QUrl.fromLocalFile(filename))) self.videoplayer3.setMedia( QMediaContent(QUrl.fromLocalFile(filename))) title = filename.split("/") title = title[len(title) - 1] self.setWindowTitle(f"Taz Player openning{title}") self.videoplayer3.play() self.videoplayer3.pause() self.widget.hide() self.videoplayer.setPosition(0) self.videoplayer.play() self.play.setIcon(self.style().standardIcon(QStyle.SP_MediaPause)) clip = VideoFileClip(filename) self.dur = clip.duration # set increase rate def incRate(self): if self.videoplayer.playbackRate() == 0: x = self.videoplayer.playbackRate() + 1 else: x = self.videoplayer.playbackRate() self.videoplayer.setPlaybackRate(x + 0.25) # set decrease rate def decRate(self): if self.videoplayer.playbackRate() == 0: x = self.videoplayer.playbackRate() + 1 else: x = self.videoplayer.playbackRate() self.videoplayer.setPlaybackRate(x - 0.25) # Handling Tags def fillListView(self): for i in range(len(self.dataL)): self.listView.addItem(self.dataL[i][0] + "->" + self.dataL[i][1]) def updateTagFile(self): fname = self.fileName.split(".") fname = fname[0] with open(fname + ".csv", mode="w") as f: writer = csv.writer( f, delimiter=",", quotechar='"', quoting=csv.QUOTE_MINIMAL, lineterminator="\n", ) for line in self.dataL: writer.writerow(line) def giveTime(self): vidPos = self.videoplayer.position() h = int(vidPos / 1000 // 3600) m = int((vidPos / 1000 - h * 3600) // 60) s = int(((vidPos / 1000 - h * 3600 - m * 60) % 60) % 60) * 100 // 100 if h < 10: h = "0" + str(h) if m < 10: m = "0" + str(m) if s < 10: s = "0" + str(s) return f"{h}:{m}:{s}" def insertTag(self, tableWidget): t = tableWidget tag = "New Tag" tagTime = self.giveTime() l = len(self.dataL) i = 0 flag = False while tagTime > self.dataL[i][1]: i += 1 if i >= l: break if i < l: if tagTime == self.dataL[i][1]: flag = True if not flag: self.dataL.insert(i, [tag, tagTime]) t.insertRow(i) t.setItem( i, 0, QTableWidgetItem(tag), ) t.setItem( i, 1, QTableWidgetItem(tagTime), ) t.editItem(t.item(i, 0)) def removeRow(self, tableWidget): if len(self.dataL) > 0: self.dataL.remove(self.dataL[tableWidget.currentRow()]) tableWidget.removeRow(tableWidget.currentRow()) def updateList(self, tableWidget): for i in range(tableWidget.rowCount()): self.dataL[i] = [ tableWidget.item(i, 0).text(), tableWidget.item(i, 1).text(), ] def undoChanges(self): fname = self.fileName.split(".") fname = fname[0] with open(fname + ".csv", mode="r+") as f: data = csv.reader(f) self.dataL = list(data) def fillTable(self, tableWidget): tableWidget.setRowCount(len(self.dataL)) for i in range(len(self.dataL)): tableWidget.setItem(i, 0, QTableWidgetItem(self.dataL[i][0])) tableWidget.setItem(i, 1, QTableWidgetItem(self.dataL[i][1])) def openTagFile(self): filename, _ = QFileDialog.getOpenFileName( self, "Open Tag File", filter="*.csv", ) if filename != "": self.fileName = filename with open(filename, mode="r+") as f: data = csv.reader(f) self.dataL = list(data) def opensecond(self): login_page = LoginPage() login_page.setWindowFlags(QtCore.Qt.WindowCloseButtonHint) if int(self.config) % 10 == 1: login_page.Save.setText("برو به") login_page.apply.setText("اعمال تغییرات") login_page.buttonBox.button(QDialogButtonBox.Ok).setText("تایید") login_page.buttonBox.button( QDialogButtonBox.Cancel).setText("انصراف") login_page.AddRow.setText("افزودن تگ") login_page.DeleteRow.setText("حذف تگ") login_page.OpenTagButton.setText("باز کردن فایل تگ") login_page.tableWidget.setHorizontalHeaderLabels(["تگ", "زمان"]) else: login_page.tableWidget.setHorizontalHeaderLabels(["Tag", "Time"]) self.fillTable(login_page.tableWidget) login_page.buttonBox.accepted.connect(lambda: [ self.updateList(login_page.tableWidget), self.listbtn.setFocus(), self.listView.clear(), self.fillListView(), self.updateTagFile(), ]) login_page.buttonBox.rejected.connect(lambda: [ self.listbtn.setFocus(), self.undoChanges(), ]) login_page.apply.clicked.connect(lambda: [ self.updateList(login_page.tableWidget), self.listView.clear(), self.fillListView(), ]) login_page.AddRow.clicked.connect(lambda: [ self.insertTag(login_page.tableWidget), ]) login_page.Save.clicked.connect(lambda: [ login_page.shows(self), self.updateList(login_page.tableWidget), self.listbtn.setFocus(), self.listView.clear(), self.fillListView(), ]) login_page.DeleteRow.clicked.connect(lambda: [ self.removeRow(login_page.tableWidget), ]) login_page.OpenTagButton.clicked.connect(lambda: [ self.openTagFile(), self.fillTable(login_page.tableWidget), self.listView.clear(), self.fillListView(), ]) login_page.tableWidget.sortByColumn(1, Qt.AscendingOrder) # if int(self.config) % 10 == 2: # login_page.tableWidget.setHorizontalHeaderLabels(["Tag", "Time"]) # else: # login_page.tableWidget.setHorizontalHeaderLabels(["تگ", "زمان"]) login_page.exec_() # End of Handling Tags def fulls(self): self.decreaseRate.hide() self.increaseRate.hide() self.centralwidget.setContentsMargins(0, 0, 0, 0) self.play.hide() self.open.hide() self.skipforward.hide() self.skipback.hide() self.label.hide() self.label_2.hide() self.volume.hide() self.menubar.hide() self.sliderfilm.hide() self.statusBar.hide() self.showFullScreen() self.listbtn.hide() self.widget.hide() self.listView.hide() self.frame_2.hide() self.stop.hide() self.listviewstatus = 1 def unfull(self): self.frame_2.show() self.stop.show() self.list() self.centralwidget.setContentsMargins(10, 10, 10, 10) self.decreaseRate.show() self.increaseRate.show() self.play.show() self.open.show() self.skipforward.show() self.skipback.show() self.label.show() self.label_2.show() self.volume.show() self.menubar.show() self.sliderfilm.show() self.statusBar.show() self.showNormal() self.listbtn.show() ##setting position of film def setpos(self, position): self.videoplayer.setPosition(position) def position(self, position): position2 = self.tolfilm * 1000 - position + 1000 hour = int((position / 3600000) % 24) hour2 = int((position2 / 3600000) % 24) if hour < 10: hour = "0" + str(hour) if hour2 < 10: hour2 = "0" + str(hour2) minute = int((position / 60000) % 60) minute2 = int((position2 / 60000) % 60) if minute < 10: minute = "0" + str(minute) if minute2 < 10: minute2 = "0" + str(minute2) second = int((position / 1000) % 60) second2 = int((position2 / 1000) % 60) if second < 10: second = "0" + str(second) if second2 < 10: second2 = "0" + str(second2) self.label.setText(f"{hour}:{minute}:{second}") self.label_2.setText(f"{hour2}:{minute2}:{second2}") self.sliderfilm.setValue(position) if position2 < 1000: self.videoplayer.stop() self.sliderfilm.setValue(0) self.stop.setEnabled(False) self.play.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) def changed(self, duration): self.sliderfilm.setRange(0, duration) ##setting position of volume def setvolpos(self, position): self.videoplayer.setVolume(position) ##open button or open from menu bar def Loadvideo(self, videoplayer): self.a = 0 filename, _ = QFileDialog.getOpenFileName( self, "Open Video", filter="*.mp4;*.mov;*.wmv;*.webm;*.wmv;*.m4v;*.m4a;*.flv", ) if filename != "": self.videoplayer.setPosition(0) self.filename = filename if filename != "": self.fileName = filename.split(".")[0] fname = filename.split(".") fnmae = fname[0] if os.path.isfile(fnmae + ".csv"): with open(fnmae + ".csv", mode="r+") as f: data = csv.reader(f) self.dataL = list(data) self.listView.clear(), self.fillListView() clip = VideoFileClip(filename) self.dur = clip.duration self.videoplayer.setMedia( QMediaContent(QUrl.fromLocalFile(filename))) self.videoplayer3.setMedia( QMediaContent(QUrl.fromLocalFile(filename))) self.moviess() clip = VideoFileClip(filename) self.tolfilm = int(clip.duration) title = filename.split("/") title = title[len(title) - 1] self.setWindowTitle(f"Taz Player openning : {title}") self.videoplayer3.play() self.videoplayer3.pause() self.widget.hide() self.stop.setEnabled(True) self.videoplayer.play() self.play.setEnabled(True) self.play.setIcon(self.style().standardIcon( QStyle.SP_MediaPause)) self.increaseRate.setEnabled(True) self.decreaseRate.setEnabled(True) ##play button def play_video(self): if self.videoplayer.state() == QMediaPlayer.PlayingState: self.play.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) self.videoplayer.pause() else: self.videoplayer.play() self.stop.setEnabled(True) self.play.setIcon(self.style().standardIcon(QStyle.SP_MediaPause)) def theme01(self): self.videowidget.setStyleSheet("background-color: #404040") self.setStyleSheet("background-color: #A0A0A0") if self.theme1.text() == "Theme1": with open("config.txt", "w") as f: f.write("12") else: with open("config.txt", "w") as f: f.write("11") def theme02(self): self.videowidget.setStyleSheet("background-color: #330019") self.setStyleSheet("background-color: #990000") if self.theme1.text() == "Theme1": with open("config.txt", "w") as f: f.write("22") else: with open("config.txt", "w") as f: f.write("21") def theme03(self): self.videowidget.setStyleSheet("background-color: #35557F") self.setStyleSheet("background-color: #003366") if self.theme1.text() == "Theme1": with open("config.txt", "w") as f: f.write("32") else: with open("config.txt", "w") as f: f.write("31") def theme04(self): self.videowidget.setStyleSheet("background-color: #00FF00") self.setStyleSheet("background-color: #4C9900") if self.theme1.text() == "Theme1": with open("config.txt", "w") as f: f.write("42") else: with open("config.txt", "w") as f: f.write("41")
class InputManager: __instance = None def __init__(self): if not InputManager.__instance: self.ui_manager = UIManager.get_instance() self.radio_stations_manager = RadioStationsManager() self.player = None self.playlist = None self.probe = None self.load_state() if not self.playlist: self.init_state() self.init_signals() def init_signals(self): self.player.durationChanged.connect(self.duration_changed_slot) self.player.positionChanged.connect(self.position_changed_slot) self.player.currentMediaChanged.connect( self.current_media_changed_slot) self.player.stateChanged.connect(self.state_changed_slot) def set_position(self, new_pos): self.ui_manager.set_position_slider_value(new_pos) self.player.setPosition(new_pos) def get_duration(self): return self.player.duration() def get_position(self): return self.player.position() def duration_changed_slot(self, duration): self.ui_manager.set_position_slider_max_value(duration) def position_changed_slot(self, position): self.ui_manager.set_position_slider_value(position) def get_volume(self): return self.player.volume() def set_volume(self, value): self.ui_manager.set_volume_slider_value(value) self.player.setVolume(value) def current_media_changed_slot(self): self.ui_manager.sync_row(self.get_media_position()) def state_changed_slot(self, new_state): if new_state == QMediaPlayer.StoppedState or new_state == QMediaPlayer.PausedState: self.ui_manager.change_play_btn_state(False) else: self.ui_manager.change_play_btn_state(True) def next_media(self): self.playlist.next() def previous_media(self): self.playlist.previous() @classmethod def get_instance(cls, *args, **kwargs): if not cls.__instance: cls.__instance = InputManager(*args, **kwargs) return cls.__instance def init_state(self): self.player = QMediaPlayer() self.playlist = QMediaPlaylist() self.probe = QAudioProbe() self.probe.setSource(self.player) self.probe_connected = False self.timer = QTimer() self.timer.setInterval(100) self.timer.setSingleShot(True) self.recent_files_manager = RecentFilesManager() self.ui_manager.set_output(self.player) self.player.setPlaylist(self.playlist) def load_state(self): file = QFile("file.dat") file.open(QIODevice.ReadOnly) in_stream = QDataStream(file) cur_playlist = QVariant() in_stream >> cur_playlist self.playlist = cur_playlist.value() def get_radio_stations(self, limit=None, category=None): stations = self.radio_stations_manager.get_all_stations( limit, category) return stations def get_radio_categories(self): categories = self.radio_stations_manager.get_all_categories() return categories def save_state(self): file = QFile("file.dat") file.open(QIODevice.WriteOnly) out = QDataStream(file) out << QVariant(self.current_playlist) def add_folder(self, path: str): files = get_dir_files(path) for file in files: self.add_media(path + "/" + file, get_format(file)) def add_file(self, filename: str): format = get_format(filename) if format != FILE_FORMAT.INVALID: return self.add_media(filename, format) raise RuntimeError("Invalid file format") def add_media(self, filename: str, format: FILE_FORMAT): url = QUrl.fromLocalFile( filename) if format != FILE_FORMAT.URL else QUrl(filename) content = QMediaContent(url) self.ui_manager.append_playlist(url.fileName(), format) self.recent_files_manager.write_recent_file(url.path()) self.ui_manager.init_recent_files() self.playlist.addMedia(content) def set_media_position(self, pos): self.playlist.setCurrentIndex(pos) def get_media_position(self): return self.playlist.currentIndex() def get_current_format(self): position = self.get_media_position() if position == -1: return None item = self.ui_manager.get_list_item(self.get_media_position()) return item.data(PlaylistItemDataRole.FORMAT) def play(self): format = self.get_current_format() if format is None: return self.ui_manager.change_play_btn_state(True) if format == FILE_FORMAT.AUDIO: self.probe.audioBufferProbed.connect(self.process_buffer) self.probe_connected = True else: self.probe_connected = False self.ui_manager.show_video() self.player.play() def pause(self): self.player.pause() def stop(self): self.player.stop() def is_muted(self): return self.player.isMuted() def is_paused(self): return self.player.state() in (QMediaPlayer.StoppedState, QMediaPlayer.PausedState) def mute(self, toggle): self.ui_manager.change_mute_state(toggle, self.get_volume()) self.player.setMuted(toggle) def get_playback_rate(self): return self.player.playbackRate() def set_playback_rate(self, value): self.player.setPlaybackRate(value) def process_buffer(self, buffer): if not self.probe_connected: return if not self.timer.isActive(): self.timer.start() else: if self.timer.remainingTime() == 0: data = buffer.data() chunked = chunk(list(data.asarray(buffer.byteCount())), 12) to_visualizer = [int(sum(e) // 12 // 75) for e in chunked] self.show_visualization(to_visualizer) def show_visualization(self, to_visualizer): self.ui_manager.update_equalizer(to_visualizer) def get_audio_devices(self): return QAudioDeviceInfo.availableDevices(QAudio.AudioOutput) def get_recent_files(self): return self.recent_files_manager.get_recent_files() def clear_recent_files(self): return self.recent_files_manager.clear_recent_files() def exit(self): self.ui_manager.exit()