Есть ли способ поместить текст QCheckBox над значком?
У меня есть сетка, которая содержит несколько флажков. Я хотел добавить изображение к флажкам, а также текст. Проблема у меня заключается в том, что расположение флажка слева направо (флажок, значок, текст).
Есть ли способ разместить текст над значком? Не уверен, что использование таблицы стилей будет работать для этого или нет, или даже как это будет выглядеть.
Спасибо.
1 ответ
Ответ: в PyQt4. Нет, ты не можешь этого сделать.
Зачем? Я читаю исходный код QCheckBox
Qt4 (C++) здесь и здесь. Я видел это использовать по умолчанию QStyleOptionButton
показать флажок, текст и значок. Это использовать drawControl
нарисовать весь элемент в QStyleOptionButton
указанным конфигом в QStyleOptionButton
, Также есть LayoutDirection
, И направление макета в QStyleOptionButton
, Я не знаю в Qt4 C++ и наследовать его и поменять направление. Но в PyQt4 это невозможно сделать.
По-другому? Да, есть другой способ решить, но не напрямую. Вы просто создаете свой собственный виджет, как QCheckBox
и отключить значок в QCheckBox
и сделать свой собственный QLabel
не показывать свой значок и установить его с тем же QLayout
,
Пример;
import sys
from PyQt4 import QtGui, QtCore
class QCustomCheckBox (QtGui.QWidget):
stateChanged = QtCore.pyqtSignal(int)
def __init__ (self, text, parentQWidget = None):
super(QCustomCheckBox, self).__init__(parentQWidget)
self.customQCheckBox = QtGui.QCheckBox(text)
self.iconQLabel = QtGui.QLabel()
allQHBoxLayout = QtGui.QHBoxLayout()
allQHBoxLayout.addWidget(self.customQCheckBox)
allQHBoxLayout.addWidget(self.iconQLabel)
allQHBoxLayout.addStretch(1)
self.setLayout(allQHBoxLayout)
self.customQCheckBox.stateChanged.connect(self.stateChanged.emit)
def setPixmap (self, newQPixmap, width = 48, height = 48):
self.iconQLabel.setPixmap(newQPixmap.scaled(width, height, QtCore.Qt.KeepAspectRatio))
def pixmap (self):
return self.iconQLabel.pixmap()
class QCustomWidget (QtGui.QWidget):
def __init__ (self, parent = None):
super(QCustomWidget, self).__init__(parent)
allQVBoxLayout = QtGui.QVBoxLayout()
firstQCustomCheckBox = QCustomCheckBox('First Check Box')
firstQCustomCheckBox.setPixmap(QtGui.QPixmap('1.jpg'))
allQVBoxLayout.addWidget(firstQCustomCheckBox)
secondQCustomCheckBox = QCustomCheckBox('Second Check Box')
secondQCustomCheckBox.setPixmap(QtGui.QPixmap('2.jpg'))
allQVBoxLayout.addWidget(secondQCustomCheckBox)
self.setLayout(allQVBoxLayout)
if __name__ == '__main__':
myQApplication = QtGui.QApplication(sys.argv)
myQCustomWidget = QCustomWidget()
myQCustomWidget.show()
sys.exit(myQApplication.exec_())