首先我会展示代码。
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()
使用来自QLineEdit右侧的QLabel的自定义按钮创建QLineEdit对象。我只有两个问题:
如果我更改XLineEdit(“XLineEdit对象”.setFont(QFont))的字体,图像按钮在垂直方向看起来会很好,但在水平方向看起来会很难看。看起来垂直尺寸会随着改变QLineEdit字体的大小而改变,但水平尺寸则不然。我怎样才能解决这个问题?有没有其他方法可以使用清除按钮创建QLineEdit?我尝试使用自定义QIcon创建QPushButton,但图标根本不会改变它的大小(既不垂直也不水平)。
当用户点击QLabel时,如何创建新信号? QPushButton的'clicked'似乎没有模拟。
谢谢!
答案 0 :(得分:1)
虽然@reclosedev已经通过指向清除按钮方面的C ++示例的链接评论了您的问题,但我想添加有关您的第二个问题的信息......
您可以通过重载MousePressEvent并发出自己的自定义信号来创建可点击的QLabel。
来自PyQt4.QtCore的导入pyqtSignal 来自PyQt4.QtGui导入QLabel,QStyle
class ClickLabel(QLabel):
clicked = pyqtSignal()
def __init__(self, *args, **kwargs)
super(ClickLabel, self).__init__(*args, **kwargs)
def mousePressEvent(self, event):
event.accept()
self.clicked.emit()
关于其他评论中提供的C ++链接的评论。他们不是使用HBoxLayout,而只是直接将按钮添加到QLabel小部件,并使用resizeEvent将其移动到QLabel的右侧。