怎么做 - 在QlineEdit里面插入按钮.[pyqt4]

And*_*huk 5 qt4 pyqt4 pyside qlineedit qtoolbutton

朋友,我需要你的帮助,怎么办 - 里面QLineEdit插入调用功能的按钮.

例如,在谷歌图片中如何:

按钮在行编辑

Ava*_*ris 11

下面是从Qt代码的几乎直接翻译在这里.

区别:

  • 按钮始终可见
  • 点击按钮会发出buttonClicked(bool)信号

码:

from PyQt4 import QtGui, QtCore

class ButtonLineEdit(QtGui.QLineEdit):
    buttonClicked = QtCore.pyqtSignal(bool)

    def __init__(self, icon_file, parent=None):
        super(ButtonLineEdit, self).__init__(parent)

        self.button = QtGui.QToolButton(self)
        self.button.setIcon(QtGui.QIcon(icon_file))
        self.button.setStyleSheet('border: 0px; padding: 0px;')
        self.button.setCursor(QtCore.Qt.ArrowCursor)
        self.button.clicked.connect(self.buttonClicked.emit)

        frameWidth = self.style().pixelMetric(QtGui.QStyle.PM_DefaultFrameWidth)
        buttonSize = self.button.sizeHint()

        self.setStyleSheet('QLineEdit {padding-right: %dpx; }' % (buttonSize.width() + frameWidth + 1))
        self.setMinimumSize(max(self.minimumSizeHint().width(), buttonSize.width() + frameWidth*2 + 2),
                            max(self.minimumSizeHint().height(), buttonSize.height() + frameWidth*2 + 2))

    def resizeEvent(self, event):
        buttonSize = self.button.sizeHint()
        frameWidth = self.style().pixelMetric(QtGui.QStyle.PM_DefaultFrameWidth)
        self.button.move(self.rect().right() - frameWidth - buttonSize.width(),
                         (self.rect().bottom() - buttonSize.height() + 1)/2)
        super(ButtonLineEdit, self).resizeEvent(event)
Run Code Online (Sandbox Code Playgroud)

用法:

import sys
from PyQt4 import QtGui

def buttonClicked():
    print 'You clicked the button!'

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)

    main = ButtonLineEdit('/path/to/my_fancy_icon.png')
    main.buttonClicked.connect(buttonClicked)
    main.show()

    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

  • 从 Qt 5.2 开始,有 [QLineEdit.addAction()](http://doc.qt.io/qt-5/qlineedit.html#addAction) 这是一种内置的方法。[QLineEdit.setClearButtonEnabled()](http://doc.qt.io/qt-5/qlineedit.html#clearButtonEnabled-prop) 在右侧添加一个十字按钮(如某些 OSX 控件)以清除小部件的内容. (3认同)

alp*_*ric 9

这是可运行的代码:

在此输入图像描述

from PyQt4.QtGui import *
from PyQt4.QtCore import *
from sys import argv, exit

class ButtonInLineEdit(QLineEdit):
    def __init__(self,parent=None):
        QLineEdit.__init__(self,parent)

        self.ButtonShowKeyboard = QToolButton(self)
        self.ButtonShowKeyboard.setCursor(Qt.PointingHandCursor)

        self.ButtonShowKeyboard.setFocusPolicy(Qt.NoFocus)
        self.ButtonShowKeyboard.setIcon(QIcon("icons/myIcon.png"))
        self.ButtonShowKeyboard.setStyleSheet("background: transparent; border: none;")

        layout = QHBoxLayout(self)
        layout.addWidget(self.ButtonShowKeyboard,0,Qt.AlignRight)

        layout.setSpacing(0)
        layout.setMargin(5)

        self.ButtonShowKeyboard.setToolTip(QApplication.translate("None", "Show virtual keyboard", None, QApplication.UnicodeUTF8))

def MyFunction(arg=None):
    print "MyFunction() called: arg = %s"%arg

a=QApplication(argv)
LineEdit = ButtonInLineEdit()
LineEdit.connect(LineEdit.ButtonShowKeyboard, SIGNAL("clicked()"), MyFunction)
LineEdit.show()
exit(a.exec_())
Run Code Online (Sandbox Code Playgroud)


bla*_*s75 7

从 Qt 5.2 开始,QLineEdit.addAction()是一种内置方法。此外QLineEdit.setClearButtonEnabled()在右侧添加一个十字按钮(如某些 OSX 控件)以清除小部件的内容。