Форма, совмещающая QLabel и QPushButton в PyQt5
Необходимо реализовать такую форму, при нажатие на которой, можно было бы поменять ей цвет (то-есть необходима функция у этой формы, которая похожа на функцию QPushButton.clicked.connect) и одновременно с этим, чтобы текст в этой форме мог изменяться пользователем(допустим двойным кликом на эту форму).
Не могу найти такую форму, помогите пожалуйста. Буду рад любой помощи.
Ответы (1 шт):
Чтобы помочь вам решить конкретную проблему - не нужен ваш весь проект. Вы должны составить минимально-воспроизводимый пример, который хоть что-то продемонстрирует о вашем вопросе.
На сколько я понял, вы хотите создать кликабельный QLabel.
Для этого вы должны создать свой класс Label, наследуя его от QLabel
и наполнить его функционалом, необходимым для решения вашей задачи.
Клик Левой КМ - меняет цвет фона label.
Двойной клик Правой КМ - позволит редактировать текст label.
Окончание редактирования вы завершаете при нажатии клавиши Return или Enter.
import sys
import random
from PyQt5 import QtCore, QtGui, QtWidgets
class Label(QtWidgets.QLabel):
clicked = QtCore.pyqtSignal()
doubleClicked = QtCore.pyqtSignal()
def __init__(self, parent=None):
super(Label, self).__init__(parent)
self.resize(100, 100)
self.setText("Hello World")
pixmap = QtGui.QPixmap('_+_.png').scaled(80, 80)
cursor = QtGui.QCursor(pixmap)
self.setCursor(cursor)
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.clicked.emit()
def mouseDoubleClickEvent(self, event):
if event.button() == QtCore.Qt.RightButton:
self.doubleClicked.emit()
class Test(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.resize(500, 500)
self.setObjectName('test')
self.label = Label(self)
self.label.setWordWrap(True)
self.color = QtGui.QColor(*random.sample(range(255), 3)).name()
self.label.setStyleSheet(f"background-color: {self.color}")
self.label.clicked.connect(self.onClicked)
self.label.doubleClicked.connect(self.onDoubleClicked)
self.lineEdit = QtWidgets.QLineEdit(self)
self.lineEdit.editingFinished.connect(self.editFinished)
self.lineEdit.setGeometry(self.label.geometry())
self.lineEdit.hide()
def onClicked(self):
self.color = QtGui.QColor(*random.sample(range(255), 3)).name()
self.label.setStyleSheet(f"background-color: {self.color}")
def onDoubleClicked(self):
self.lineEdit.setText(self.label.text())
self.lineEdit.setStyleSheet(f"background-color: {self.color}")
self.lineEdit.show()
self.lineEdit.setFocus()
def editFinished(self):
self.label.setText(self.lineEdit.text())
self.lineEdit.hide()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
app.setFont(QtGui.QFont("Times", 10, QtGui.QFont.Bold))
app.setStyleSheet("""
QWidget {background-color: #77f;}
QLabel {background-color: #5f9;}
""")
w = Test()
w.show()
sys.exit(app.exec_())
_+_.png


