#python #html #python-3.x #pyqt #pyqt5
#python #HTML #python-3.x #pyqt #pyqt5
Вопрос:
Итак, я использовал Qt Designer для создания базовой основы графического интерфейса для программы, которую я разрабатывал на Python. Я работал над добавлением в него всей моей функциональности и логики. Пока все хорошо. Я создал метод, который при выборе rocket в QListWidget слева должен извлекать информацию из словаря и заполнять ее в QTextBrowser в центре, используя текст, сгенерированный из блока HTML в качестве шаблона. Чего я пытаюсь достичь в данный момент, так это иметь возможность использовать мои переменные Python внутри фрагмента сгенерированного HTML, который в данный момент заполняет QTextBrowser. Я попробовал несколько методов, все из которых разозлили мою IDE. Я полагаю, что если я смогу заставить это работать с заголовком, я смогу разобраться с остальным. Итак, я прошу вашей помощи в выяснении того, как этого добиться. Я прочитал все, что смог найти об этом, и более обобщенные версии этого, но пока ничего не сработало. Я смог заставить все это работать в Tkinter, но решил провести рефакторинг в PyQt, поскольку он выглядит намного современнее, но с оговоркой, что он намного сложнее.
Я добавил рассматриваемый кодовый блок, но создание минимально воспроизводимого примера было бы огромным и, честно говоря, выходит за рамки вопроса. Извините за это.
Я пытался:
- замена «ROCKET» на %s и добавление % rocketName в конец HTML-блока
- замена «ROCKET» на {rocketName} и добавление .format(rocketName=Ракетное имя) в конец HTML
- f»html html html»{rocketName}»html html html»
- «html html html» rocketName «html html html»
- «html html html» str(rocketName) «html html html»
Я застрял на этом в течение нескольких часов. Любая информация была бы очень признательна.
# ***** Define what happens when a rocket is selected from listWidget ******
def selectionChanged(self):
_translate = QtCore.QCoreApplication.translate
rocketName = self.listWidget.currentItem().text()
self.textBrowser.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">n"
"<html><head><meta name="qrichtext" content="1" /><style type="text/css">n"
"p, li { white-space: pre-wrap; }n"
"</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:9.75pt; font-weight:400; font-style:normal;">n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:18pt; font-weight:600; color:#ffffff;">ROCKET</span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Agency:</span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Manufacturer:</span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Payload Capacity to LEO: </span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Height: </span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Diameter: </span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Mass: </span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Years in Operation: </span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Country: </span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Operational Status: </span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Number of Stages: </span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Burn Time: </span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Thrust: </span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">ISP: </span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Cost Per Launch: </span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Fuel Type: </span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">---------------------------------------------------------------------------------------------------------------</span></p>n"
"<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Arial, sans-serif'; font-size:12pt; color:#ffffff; background-color:transparent;">Additional Information:</span></p></body></html>"))
Комментарии:
1. Использование форматированных строк должно работать просто отлично. Какие ошибки вы получаете при попытке любого из методов, которые вы описываете?
2. @Heike Ты был прав, это действительно сработало! По-видимому, я помещал «f» в начале всего блока html-кода, а не конкретной строки. Я не понимал, что все это были отдельные строки, поскольку в них не было запятых — впервые для меня. Однако спасибо, что попытались помочь!
Ответ №1:
При использовании строковых литералов f в HTML, когда сам HTML находится внутри Python, обязательно обратите внимание, что запятые между блоками HTML не нужны. Из-за этого «f» следует размещать в начале определенного блока кода, а не всего блока HTML.