猫史档案馆


pyside6支持的web浏览器!

用户:Gin琴蕾Gin琴蕾查看:0 回复:0 评论:0 创建时间:2023-08-04T14:31:22


center_image

import datetime
import os
import sys

from PySide6.QtWidgets import *
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWebEngineWidgets import *
from PySide6.QtWebEngineCore import *


class WebEngineView(QWebEngineView):
    def __init__(self, mainwindow, parent=None):
        super(WebEngineView, self).__init__(parent)
        self.mainwindow = mainwindow
        ##############
        self.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True)  # 支持视频播放
        self.page().windowCloseRequested.connect(self.on_windowCloseRequested)  # 页面关闭请求
        self.page().profile().downloadRequested.connect(self.on_downloadRequested)  # 页面下载请求

    def on_windowCloseRequested(self):
        the_index = self.mainwindow.tabWidget.currentIndex()
        self.mainwindow.tabWidget.removeTab(the_index)

    def on_downloadRequested(self, downloadItem):
        if downloadItem.isFinished() == False and downloadItem.state() == 0:
            the_filename = downloadItem.url().fileName()
            if len(the_filename) == 0 or "." not in the_filename:
                cur_time = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
                the_filename = "下载文件" + cur_time + ".xls"
            the_sourceFile = os.path.join(os.getcwd(), the_filename)
            downloadItem.setPath(the_sourceFile)
            downloadItem.accept()
            downloadItem.finished.connect(self.on_downloadfinished)

    def on_downloadfinished(self):
        js_string = '''
            alert("下载成功,请到软件同目录下,查找下载文件!");
            '''
        self.page().runJavaScript(js_string)

    def createWindow(self, QWebEnginePage_WebWindowType):
        new_webview = WebEngineView(self.mainwindow)
        self.mainwindow.create_tab(new_webview)
        return new_webview

    def certificateError(self):
        return True


class Ui_Form(object):
    def setupUi(self, Form):
        self.widget = QWidget(Form)
        self.widget.setObjectName(u"widget")
        self.widget.setGeometry(QRect(0, 0, 1900, 980))
        self.gridLayout = QGridLayout(self.widget)
        self.gridLayout.setObjectName(u"gridLayout")
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.widget1 = QWidget(self.widget)
        self.widget1.setObjectName(u"widget1")
        self.horizontalLayout = QHBoxLayout(self.widget1)
        self.horizontalLayout.setObjectName(u"horizontalLayout")
        self.pushButton = QPushButton(self.widget1)
        self.pushButton.setObjectName(u"pushButton")

        self.horizontalLayout.a喵Widget(self.pushButton)

        self.pushButton_2 = QPushButton(self.widget1)
        self.pushButton_2.setObjectName(u"pushButton_2")

        self.horizontalLayout.a喵Widget(self.pushButton_2)

        self.pushButton_3 = QPushButton(self.widget1)
        self.pushButton_3.setObjectName(u"pushButton_3")

        self.horizontalLayout.a喵Widget(self.pushButton_3)

        self.pushButton_4 = QPushButton(self.widget1)
        self.pushButton_4.setObjectName(u"pushButton_4")

        self.horizontalLayout.a喵Widget(self.pushButton_4)

        self.lineEdit = QLineEdit(self.widget1)
        self.lineEdit.setObjectName(u"lineEdit")

        self.horizontalLayout.a喵Widget(self.lineEdit)

        self.widget_2 = QWidget(self.widget1)
        self.widget_2.setObjectName(u"widget_2")

        self.horizontalLayout.a喵Widget(self.widget_2)

        self.gridLayout.a喵Widget(self.widget1, 0, 0, 1, 1)

        self.widget_3 = QWidget(self.widget)
        self.widget_3.setObjectName(u"widget_3")
        self.horizontalLayout_2 = QHBoxLayout(self.widget_3)
        self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
        self.comboBox = QComboBox(self.widget_3)
        self.comboBox.setObjectName(u"comboBox")

        self.horizontalLayout_2.a喵Widget(self.comboBox)

        self.gridLayout.a喵Widget(self.widget_3, 1, 0, 1, 1)

        self.tabWidget = QTabWidget(self.widget)
        self.tabWidget.setObjectName(u"tabWidget")
        self.tabWidget.setTabsClosable(True)
        self.gridLayout.a喵Widget(self.tabWidget, 2, 0, 1, 1)

        self.retranslateUi(Form)

        QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(QCoreApplication.translate("Form", u"Form", None))
        self.pushButton.setText(QCoreApplication.translate("Form", u"<-", None))
        self.pushButton_2.setText(QCoreApplication.translate("Form", u"->", None))
        self.pushButton_3.setText(QCoreApplication.translate("Form", u"@", None))
        self.pushButton_4.setText(QCoreApplication.translate("Form", u"|^|", None))


class Web(QWidget, Ui_Form):
    def __init__(self,win,parent=None):
        super().__init__(parent)
        Ui_Form.__init__(self)
        self.setupUi(self)
        self.win = win
        self.lw = []
        self.num = 0
        self.main_web()
        self.tabWidget.currentChanged.connect(self.change_lw)
        self.tabWidget.tabCloseRequested.connect(self.close_Tab)
        self.pushButton.clicked.connect(self.back)
        self.pushButton_2.clicked.connect(self.forward)
        self.pushButton_3.clicked.connect(self.reload)
        self.pushButton_4.clicked.connect(self.main_web)
        self.tabWidget.currentChanged.connect(self.change_lw)
        self.lineEdit.returnPressed.connect(self.navigate_to_url)

    def main_web(self):
        url = "https://hao.360.com/?src=lm&ls=n4e1d7e8c99"
        webview = WebEngineView(self) 
        webview.setUrl(QUrl(url))
        self.create_tab(webview)

    def navigate_to_url(self):
        q = QUrl(self.lineEdit.text())
        if q.scheme() == '':
            q.setScheme('http')
        self.tabWidget.currentWidget().load(q)

    def create_tab(self, webview):
        self.tab = QWidget()
        self.tabWidget.addTab(self.tab, "正在加载中. . .")
        self.tabWidget.setCurrentWidget(self.tab)
        self.Layout = QHBoxLayout(self.tab)
        self.Layout.setContentsMargins(0, 0, 0, 0)
        self.Layout.addWidget(webview)
        self.lw.append(webview)
        self.lw[self.num].loadFinished.connect(lambda: self.maker(webview, self.tab))
        self.lw[self.num].urlChanged.connect(self.renew_urlbar)

    def maker(self, web, tab):
        a = web.page().icon()
        self.setWindowIcon(a)
        self.tabWidget.setTabIcon(self.tabWidget.indexOf(tab), web.page().icon())
        self.tabWidget.setTabText(self.tabWidget.indexOf(tab), web.page().title())

    def close_Tab(self, index):
        if self.tabWidget.count() > 1:
            self.tabWidget.removeTab(index)
        else:
            if self.win:
                self.close() 

    def renew_urlbar(self, q):
        self.lineEdit.setText(q.toString())
        self.lineEdit.setCursorPosition(0)

    def change_lw(self, txt):
        self.num = txt
        qurl = self.lw[self.num].url()
        self.renew_urlbar(qurl)

    def back(self):
        self.lw[self.num].back()

    def forward(self):
        self.lw[self.num].forward()

    def reload(self):
        self.lw[self.num].reload()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    browser = Web(0)
    browser.show()
    sys.exit(app.exec())


作品未经作者同意授权禁止转载,进行商业交易,但可以在本编辑器单独复制运行。


回复

上一页1 页 / 共 0下一页