Загрузить и сохранить веб-приложение, Url которого задается в QLineEdit
Нужно реализовать веб-приложение где пользователь вводит адрес сайта и по нажатию на кнопку появляется окно с этим сайтом, после закрытия страница сайта сохраняется в файл .pdf.
Вопрос состоит в том как перенести данные из QLineEdit одного класса (Ui_Form) в QUrl другого класса (MainWindow)?
Пробовал унаследовать MyWindow от Ui_Form, но это ничего не дало.
Вот сам код, но при нажатии на кнопку приложение закрывается без вывода какой-либо ошибки:
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
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_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
У меня 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())
