Изменить цвет случайных слов текста в QLabel
Есть QLabel с текстом и кнопка.
По нажатию на кнопку несколько случайных слов должны изменить цвет на красный.
При повторном нажатии на кнопку действие должно повториться с другими случайными словами.
Как это можно реализовать?
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(299, 417)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10, 40, 281, 371))
font = QtGui.QFont()
font.setPointSize(16)
self.label.setFont(font)
self.label.setStyleSheet("QLabel {\n"
" background-color:rgb(221, 221, 221);\n"
"}")
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(10, 10, 281, 23))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "Сквозь волнистые туманы\n"
"Пробирается луна,\n"
"На печальные поляны\n"
"Льет печально свет она.\n"
"\n"
"По дороге зимней, скучной\n"
"Тройка борзая бежит,\n"
"Колокольчик однозвучный\n"
"Утомительно гремит.\n"
"\n"
"Что-то слышится родное\n"
"В долгих песнях ямщика:\n"
"То разгулье удалое,\n"
"То сердечная тоска…"))
self.pushButton.setText(_translate("MainWindow", "Кнопка"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Можно попробовать примерно так:
from random import choices, randint
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(299, 417)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(10, 40, 281, 371))
font = QtGui.QFont()
font.setPointSize(16)
self.label.setFont(font)
self.label.setStyleSheet("QLabel {\n"
" background-color:rgb(221, 221, 221);\n"
"}")
self.label.setObjectName("label")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(10, 10, 281, 23))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "Сквозь волнистые туманы\n"
"Пробирается луна,\n"
"На печальные поляны\n"
"Льет печально свет она.\n"
"\n"
"По дороге зимней, скучной\n"
"Тройка борзая бежит,\n"
"Колокольчик однозвучный\n"
"Утомительно гремит.\n"
"\n"
"Что-то слышится родное\n"
"В долгих песнях ямщика:\n"
"То разгулье удалое,\n"
"То сердечная тоска…"))
self.pushButton.setText(_translate("MainWindow", "Кнопка"))
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.text = self.label.text() # !!!
self.pushButton.clicked.connect(self.on_clicked)
def on_clicked(self):
lst = self.text.split()
n = randint(3, 5)
words = choices(lst, k=n)
text = self.text
for word in words:
text = text.replace(word, f'<span style="color: #f00;">{word}</span>') # !!!
text = text.replace('\n', '<br>') # !!!
self.label.setTextFormat(QtCore.Qt.RichText) # !!!
self.label.setText(text)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())

