コード例 #1
0
class App(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.setUpStuff()

    def setUpStuff(self):

        self.webView = QWebEngineView()
        self.webView.load(QUrl('http://youtube.com'))
        self.webView.setBaseSize(500, 500)
        self.webView.setVisible(True)
        self.gridLayout.addWidget(self.webView, 1, 0, 1, 2)
        self.webView.installEventFilter(self)

        self.getActualURL()
        self.downloadButton.clicked.connect(self.youtubeDownload)
        self.setURL.clicked.connect(self.setURLm)
        self.getActualURL()

    def getActualURL(self):
        print("getactualurl")
        i = self.webView.url()
        print(i)
        i = str(i)
        i = i[19:]
        ilen = i.__len__()
        url = i[:ilen - 2]
        print(url)
        self.urlInput.setText(url)

    @pyqtSlot()
    def youtubeDownload(self):
        self.getActualURL()
        print("ytdownload")
        try:
            with youtube_dl.YoutubeDL({}) as ydl:
                dirname = os.path.split(os.path.abspath(__file__))
                path = dirname[0] + "\\Downloads"
                print("script: __file__ is", path)
                if not os.path.exists(path):
                    os.makedirs(path)
                os.chdir(path)
                ydl.download([str(self.urlInput.displayText())])
        except:
            msgBox = QMessageBox()
            msgBox.setText("Error:")
            msgBox.setInformativeText(
                "An unknown error occurred. Ensure video link is correct")
            msgBox.setStandardButtons(QMessageBox.Ok)
            msgBox.setDefaultButton(QMessageBox.Ok)
            msgBox.exec_()

    @pyqtSlot()
    def setURLm(self):
        print("seturlm")
        try:
            shortcut = False
            url = self.urlInput.displayText()
            i7 = url[:7]
            i8 = url[:8]
            if (i7 == "http://" or i8 == "https://"):
                pass
            else:
                url = "http://" + url
            print(url)

            self.webView.load(QUrl(url))
        except:
            pass

        def eventFilter(self, obj, event):

            #if(obj == self.webView):
            self.getActualURL()
            if event.type() == QtCore.QEvent.MouseButtonPress:
                print("t")
            #in (QtCore.QEvent.MouseButtonPress,QtCore.QEvent.MouseButtonDblClick):
            if event.button() == QtCore.Qt.LeftButton:
                print("left")
            if event.button() == QtCore.Qt.ExtraButton1:
                self.webView.back()
            if event.button() == QtCore.Qt.ExtraButton2:
                self.webView.forward()

            return QtGui.QWidget.eventFilter(self, obj, event)
コード例 #2
0
class Browser(QWidget):
    def __init__(self):
        super().__init__()
        # Create a search url widget
        self.search_url = QLineEdit()
        self.search_url.setStyleSheet(
            "background-color:black; color:white; border-radius:14px; margin:0px,10px,0px,10px; border:2px solid grey; padding: 2px 10px 2px 10px; font-weight:bold;"
        )
        self.search_url.setFont(QtGui.QFont("sans-serif", 11))
        self.search_url.setPlaceholderText("Search in Google or Type a URL")
        self.search_url.setMinimumWidth(500)
        self.search_url.returnPressed.connect(self.webb)
        self.search_url.setEnabled(True)
        self.search_url.setAlignment(Qt.AlignCenter)

        # Create a vbox
        vbox = QVBoxLayout()

        # Back Button
        self.back_button = QPushButton()
        self.back_button.setIcon(self.style().standardIcon(
            QStyle.SP_ArrowBack))
        self.back_button.setEnabled(False)
        self.back_button.clicked.connect(self.go_back)

        # forword Button
        self.forword_button = QPushButton()
        self.forword_button.setIcon(self.style().standardIcon(
            QStyle.SP_ArrowForward))
        self.forword_button.clicked.connect(self.go_fast)

        # Reload Button
        self.reload_button = QPushButton()
        self.reload_button.setIcon(self.style().standardIcon(
            QStyle.SP_BrowserReload))
        self.reload_button.clicked.connect(self.go_reload_buton)

        # Reload Button
        self.stop_button = QPushButton()
        self.stop_button.setIcon(self.style().standardIcon(
            QStyle.SP_BrowserStop))
        self.stop_button.setEnabled(False)
        self.stop_button.clicked.connect(self.go_stop_button)

        # Create a Hbox
        hbox = QHBoxLayout()
        hbox.addWidget(self.back_button)
        hbox.addWidget(self.forword_button)
        hbox.addWidget(self.reload_button)
        hbox.addWidget(self.stop_button)
        hbox.addWidget(self.search_url)

        self.web = QWebEngineView()
        self.web.load(QUrl(f"https://google.com/"))
        self.web.show()
        vbox.addLayout(hbox)
        vbox.addWidget(self.web)
        self.setLayout(vbox)
        self.show()

    def webb(self):
        self.stop_button.setEnabled(True)
        self.back_button.setEnabled(True)
        if 'http://' or 'https://' not in self.search_url:
            self.web.load(QUrl(f"https://{self.search_url.text()}/"))
            self.web.show()

        else:
            self.web.load(QUrl(self.search_url.text()))
            self.web.show()

    def go_back(self):
        self.web.back()

    def go_fast(self):
        self.web.forward()

    def go_reload_buton(self):
        self.web.reload()

    def go_stop_button(self):
        self.web.stop()
コード例 #3
0
class MainWidget(QWidget):
    def __init__(self, url):
        super().__init__()
        fontDB = QFontDatabase()
        fontDB.addApplicationFont(':/mono-font')
        # fontDB.addApplicationFont(':/Taipei-font')
        screen = QDesktopWidget().screenGeometry()
        self.width, self.height = screen.width(), screen.height()
        self.html = ''
        self.url = url
        self.GI = None
        self.DL = None
        self.web_view = QWebEngineView(self)
        self.web_view.load(QUrl(self.url))
        self.web_view.page().titleChanged.connect(self.get_html)
        btnExit = QPushButton('', self)
        btnExit.setIcon(QIcon(':/exit-icon'))
        btnExit.setIconSize(QSize(32, 32))
        btnExit.setToolTip('Exit')
        btnExit.clicked.connect(QApplication.quit)
        self.btnHome = QPushButton('', self)
        self.btnHome.setIcon(QIcon(':/home-icon'))
        self.btnHome.setIconSize(QSize(32, 32))
        self.btnHome.setToolTip('Home')
        self.btnHome.clicked.connect(self.goHome)
        self.btnBack = QPushButton('', self)
        self.btnBack.setIcon(QIcon(':/go_back-icon'))
        self.btnBack.setIconSize(QSize(32, 32))
        self.btnBack.setToolTip('Backward')
        self.btnBack.clicked.connect(self.goBack)
        self.btnBack.setDisabled(True)
        self.btnNext = QPushButton('', self)
        self.btnNext.setIcon(QIcon(':/go_forward-icon'))
        self.btnNext.setIconSize(QSize(32, 32))
        self.btnNext.setToolTip('Forward')
        self.btnNext.clicked.connect(self.goForward)
        self.btnNext.setDisabled(True)
        self.cmbDownList = QComboBox(self)
        self.cmbDownList.setMinimumHeight(40)
        # font = self.cmbDownList.font()
        font = QFont('Liberation Mono')
        font.setPointSize(14)
        self.cmbDownList.setFont(font)
        self.cmbDownList.setIconSize(QSize(24, 24))
        self.cmbDownList.currentIndexChanged.connect(self.onIndexChanged)
        self.cmbDownList.setToolTip('Select a stream to download')
        self.cmbCapsList = QComboBox(self)
        self.cmbCapsList.setMinimumHeight(40)
        # font = QFont('Taipei Sans TC Beta')
        font = self.cmbCapsList.font()
        font.setPointSize(14)
        self.cmbCapsList.setFont(font)
        self.cmbCapsList.setToolTip('Select a caption/subtitle to download')
        btnSettings = QPushButton('', self)
        btnSettings.setIcon(QIcon(':/settings-icon'))
        btnSettings.setIconSize(QSize(32, 32))
        btnSettings.setToolTip('Settings')
        btnSettings.clicked.connect(self.onSettings)
        self.btnDLoad = QPushButton('', self)
        self.btnDLoad.setIcon(QIcon(':/download-icon'))
        self.btnDLoad.setIconSize(QSize(32, 32))
        self.btnDLoad.setToolTip('Download')
        self.btnDLoad.clicked.connect(self.goDownload)
        self.btnDLoad.setDisabled(True)
        self.progressBar = QProgressBar(self)
        self.progressBar.setMinimum(0)
        self.progressBar.setMaximum(100)

        hBox1 = QHBoxLayout()
        hBox1.addWidget(btnExit, 0)
        hBox1.addWidget(self.btnHome, 0)
        hBox1.addWidget(self.btnBack, 0)
        hBox1.addWidget(self.btnNext, 0)
        hBox1.addWidget(self.cmbDownList, 1)
        hBox1.addWidget(self.cmbCapsList, 0)
        hBox1.addWidget(btnSettings, 0)
        hBox1.addWidget(self.btnDLoad, 0)
        vBox = QVBoxLayout()
        vBox.addLayout(hBox1)
        vBox.addWidget(self.web_view)
        vBox.addWidget(self.progressBar)
        self.setLayout(vBox)
        self.setWindowTitle('Youtube Download Helper')
        self.setGeometry(QRect(round((self.width - 760) / 2), round((self.height - 550) / 2), 760, 550))
        self.setMinimumSize(QSize(760, 550))

    def store_html(self, html):
        # print('store_html()')
        self.html = html
        if self.web_view.page().action(QWebEnginePage.Back).isEnabled():
            self.btnBack.setEnabled(True)
        else:
            self.btnBack.setDisabled(True)
        if self.web_view.page().action(QWebEnginePage.Forward).isEnabled():
            self.btnNext.setEnabled(True)
        else:
            self.btnNext.setDisabled(True)
        if self.web_view.title() != 'YouTube' and self.web_view.title() != 'https://www.youtube.com':
            # print(self.web_view.title())
            self.btnHome.setEnabled(True)
        else:
            self.btnHome.setDisabled(True)
        self.cmbDownList.clear()
        self.cmbCapsList.clear()
        url = self.web_view.page().url().url()
        if 'video-id' in self.html and '?v=' in url:
            # fp = open(self.web_view.title() + '.html', 'w')
            # fp.write(self.html)
            # fp.close()
            self.GI = GetItem(url)
            self.GI.addItem.connect(self.onAddItem)
            self.GI.addCaption.connect(self.onAddCaption)
            self.GI.finished.connect(self.onAddItemFinished)
            self.GI.start()
        else:
            self.btnDLoad.setDisabled(True)

    def get_html(self):
        # print('get_html')
        self.web_view.page().toHtml(self.store_html)

    def goHome(self):
        self.web_view.setUrl(QUrl(self.url))

    def goBack(self):
        self.web_view.back()

    def goForward(self):
        self.web_view.forward()

    def goDownload(self):
        global download_ongoing
        download_ongoing = True
        self.btnDLoad.setDisabled(True)
        self.progressBar.setValue(0)
        self.DL = DownLoad(self.web_view.page().url().url(), self.cmbDownList.currentIndex(),
                           self.cmbCapsList.currentIndex())
        self.DL.valueChanged.connect(self.onValueChanged)
        self.DL.dlCompleted.connect(self.onDlCompleted)
        self.DL.start()

    def onAddItem(self, icon, item):
        self.cmbDownList.addItem(QIcon(icon), item)

    def onAddCaption(self, cap):
        self.cmbCapsList.addItem(cap)

    def onAddItemFinished(self):
        if not download_ongoing:
            self.btnDLoad.setEnabled(True)

    def onValueChanged(self, per):
        self.progressBar.setValue(round(per))
        # print('%.2f%% completed' % per)

    def onDlCompleted(self):
        global download_ongoing
        download_ongoing = False
        self.btnDLoad.setDisabled(True)
        self.progressBar.setValue(0)

    def onIndexChanged(self):
        if not download_ongoing:
            self.btnDLoad.setEnabled(True)

    def onSettings(self):
        sWnd = SettingsDlg(self.width, self.height)
        sWnd.exec()
        if sWnd.SettingsChanged:
            # print('Settings saved!')
            if self.web_view.title() != 'YouTube' and self.web_view.title() != 'https://www.youtube.com':
                self.web_view.reload()