Je vais d'abord montrer le code.PyQt4: QLabel avec bouton d'effacement
class XLineEdit(QtGui.QLineEdit):
'''QLineEdit with clear button, which appears when user enters text.'''
def __init__(self, pixmap, parent=None):
QtGui.QLineEdit.__init__(self, parent)
self.layout = QtGui.QHBoxLayout(self)
self.image = QtGui.QLabel(self)
self.image.setCursor(QtCore.Qt.ArrowCursor)
self.image.setFocusPolicy(QtCore.Qt.NoFocus)
self.image.setStyleSheet("border: none;")
self.image.setPixmap(pixmap)
self.image.setSizePolicy(
QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
self.image.adjustSize()
self.image.setScaledContents(True)
self.layout.addWidget(
self.image, alignment=QtCore.Qt.AlignRight)
self.textChanged.connect(self.changed)
self.image.hide()
def changed(self, text):
if len(text) > 0:
self.image.show()
else: # if entry is empty
self.image.hide()
Cela crée un objet QLineEdit avec le bouton personnalisé de QLabel sur le côté droit de QLineEdit. J'ai seulement deux problèmes:
Si je change la police de XLineEdit ("objet XLineEdit" .setFont (QFont)), le bouton d'image bien paraître par vertical, mais regardera laid par horizontal. Il semble que la taille verticale change en changeant la taille de la police de QLineEdit, mais pas la taille horizontale. Comment puis-je réparer cela? Y a-t-il un autre moyen de créer QLineEdit avec le bouton Effacer? J'ai essayé de créer QPushButton avec QIcon personnalisé, mais l'icône ne change pas du tout sa taille (ni verticale, ni horizontale).
Comment puis-je créer un nouveau signal lorsque l'utilisateur clique sur QLabel? Il semble qu'il n'y ait pas d'analogue pour "cliqué" sur QPushButton.
Merci!
Avez-vous essayé d'utiliser un QToolButton pour l'image que vous voulez cliquable? http://doc.qt.nokia.com/4.7-snapshot/qtoolbutton.html – gfortune
Jetez un oeil à cet exemple [Lineedit avec un bouton d'effacement] (http://labs.qt.nokia.com/2007/06/ 06/lineedit-avec-un-clear-button /). Mais il est écrit en C++. – reclosedev
@gfortune: merci, je vais essayer. – ghostmansd