Загрузить и сохранить веб-приложение, Url которого задается в QLineEdit

Рейтинг: 1Ответов: 1Опубликовано: 01.04.2023

Нужно реализовать веб-приложение где пользователь вводит адрес сайта и по нажатию на кнопку появляется окно с этим сайтом, после закрытия страница сайта сохраняется в файл .pdf.

Вопрос состоит в том как перенести данные из QLineEdit одного класса
(Ui_Form()()) в QUrl другого класса (MainWindow())?

Пробовал унаследовать MyWindow() от Ui_Form(), но это ничего не дало.

Вот сам код, но при нажатии на кнопку приложение закрывается без вывода какой-либо ошибки:

main.py

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
from PyQt6.QtWebEngineWidgets import *


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(280, 90)
        Form.setMinimumSize(QtCore.QSize(280, 90))
        Form.setMaximumSize(QtCore.QSize(280, 90))
        Form.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(86, 204, 242, 255), stop:1 rgba(47, 128, 237, 255));")
        self.url_edit = QtWidgets.QLineEdit(Form)
        self.url_edit.setGeometry(QtCore.QRect(30, 30, 181, 32))
        self.url_edit.setStyleSheet("background-color: transparent;\n"
"font: 11pt \"MS Shell Dlg 2\";\n"
"background-color: rgb(255, 255, 255);\n"
"border-radius: 10px;                     /* <----  20px  */ \n"
"border: 2px solid #243b47 ;")
        self.url_edit.setObjectName("url_edit")
        self.search_button = QtWidgets.QPushButton(Form)
        self.search_button.setGeometry(QtCore.QRect(215, 30, 32, 32))
        self.search_button.setStyleSheet("font: 17pt \"MS Shell Dlg 2\";\n"
"background-color: rgb(255, 255, 255);\n"
"border-radius: 10px;  ")
        self.search_button.setObjectName("search_button")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Сохранение cайта в PDF"))
        self.url_edit.setToolTip(_translate("Form", "<html><head/><body><p>Введите адрес сайта</p></body></html>"))
        self.search_button.setToolTip(_translate("Form", "<html><head/><body><p>Найти и сохранить сайт в PDF</p></body></html>"))
        self.search_button.setText(_translate("Form", "🔍"))
        self.search_button.clicked.connect(self.web_s)

    def web_s(self):
        class MainWindow(QMainWindow):
            def __init__(self):
                super(MainWindow, self).__init__()

                self.tex = self.Ui
                self.setWindowTitle("Пример загрузки внешней веб-страницы")
                self.setGeometry(5, 30, 1355, 730)
                self.browser = QWebEngineView()
                self.browser.page().pdfPrintingFinished.connect(lambda *args: print('finished', args))

                self.browser.load(QUrl(**НУЖНО ПЕРЕНЕСТИ ДАННЫЕ QLineEdit (url_edit) СЮДА**))
                self.setCentralWidget(self.browser)
                self.browser.loadFinished.connect(self.emit_pdf)

            def emit_pdf(self, finished):
                self.browser.show()
                self.browser.page().printToPdf("1.pdf")

        app = QApplication(sys.argv)
        win = MainWindow()
        win.show()
        app.exit(app.exec())


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

Ответы

▲ 0Принят

У меня PyQt5, а выглядит это примерно так:

# ???from PyQt5 import QtCore, QtGui, QtWidgets
import sys
'''
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
from PyQt6.QtWebEngineWidgets import *
'''

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
from PyQt5.QtWebEngineWidgets import *


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
#        Form.resize(280, 90)
#        Form.setMinimumSize(QtCore.QSize(280, 90))
#        Form.setMaximumSize(QtCore.QSize(280, 90))
        Form.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(86, 204, 242, 255), stop:1 rgba(47, 128, 237, 255));")
        self.url_edit = QtWidgets.QLineEdit(Form)
        self.url_edit.setGeometry(QtCore.QRect(30, 30, 181, 32))
        self.url_edit.setStyleSheet("background-color: transparent;\n"
"font: 11pt \"MS Shell Dlg 2\";\n"
"background-color: rgb(255, 255, 255);\n"
"border-radius: 10px;                     /* <----  20px  */ \n"
"border: 2px solid #243b47 ;")
        self.url_edit.setObjectName("url_edit")
        self.search_button = QtWidgets.QPushButton(Form)
        self.search_button.setGeometry(QtCore.QRect(215, 30, 32, 32))
        self.search_button.setStyleSheet("font: 17pt \"MS Shell Dlg 2\";\n"
"background-color: rgb(255, 255, 255);\n"
"border-radius: 10px;  ")
        self.search_button.setObjectName("search_button")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Сохранение cайта в PDF"))
        self.url_edit.setToolTip(_translate("Form", "<html><head/><body><p>Введите адрес сайта</p></body></html>"))
        self.search_button.setToolTip(_translate("Form", "<html><head/><body><p>Найти и сохранить сайт в PDF</p></body></html>"))
        self.search_button.setText(_translate("Form", "🔍"))
# ???        self.search_button.clicked.connect(self.web_s)


# ???    def web_s(self):
#class MainWindow(QMainWindow):
class MainWindow(QWidget, Ui_Form):
    def __init__(self):
        super(MainWindow, self).__init__()
        
        self.setupUi(self)
        
# ?        self.tex = self.Ui
        self.setWindowTitle("Пример загрузки внешней веб-страницы")
        self.setGeometry(5, 30, 1255, 630)
        
        self.url_edit.setText('https://ru.stackoverflow.com/questions/1509831')
        self.search_button.clicked.connect(self.web_s)
        
        self.browser = QWebEngineView()
        self.browser.page().pdfPrintingFinished.connect(
            lambda *args: print('finished', args))

#        self.browser.load(QUrl(
#            'https://ru.stackoverflow.com/questions/1509831'))
#        self.setCentralWidget(self.browser)
#        self.browser.loadFinished.connect(self.emit_pdf)
        
        self.gridLayout = QtWidgets.QGridLayout(self)
        self.gridLayout.addWidget(self.url_edit, 0, 0, 1, 1)
        self.gridLayout.addWidget(self.search_button, 0, 1, 1, 1)
        self.gridLayout.addWidget(self.browser, 1, 0, 1, 2)

    def emit_pdf(self, finished):
        self.browser.show()
        self.browser.page().printToPdf("1.pdf")

    def web_s(self):
        url = self.url_edit.text()
        if not url:
            return
        self.browser.load(QUrl(url))
        self.browser.loadFinished.connect(self.emit_pdf)            
    
    

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    app.exit(app.exec())

введите сюда описание изображения