QLineEdit
関数を呼び出すことができるボタンを内部に挿入するのに助けが必要です。
たとえば、次のGoogle画像のように:
QLineEdit
関数を呼び出すことができるボタンを内部に挿入するのに助けが必要です。
たとえば、次のGoogle画像のように:
以下は、ここからの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)
使用法:
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_())
実行可能なコードは次のとおりです。
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_())
Qt 5.2の時点で、これを行うための組み込みの方法であるQLineEdit.addAction()があります。また、 QLineEdit.setClearButtonEnabled()は、ウィジェットのコンテンツをクリアするために(特定のOSXコントロールのように)右側にクロスボタンを追加します。
#this code for example in btninlineedit.py
from PyQt4.QtGui import *
from PyQt4.QtCore import Qt
from PyQt4 import QtCore, QtGui
#Andrey Zhuk.
#####
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class ButtonInLineEdit(QLineEdit):
def __init__(self,parent=None):
QLineEdit.__init__(self,parent)
self.ButtonShowKeyboard = QToolButton(self)
self.ButtonShowKeyboard.setCursor(Qt.PointingHandCursor)
#self.ButtonShowKeyboard.show()
self.ButtonShowKeyboard.setFocusPolicy(Qt.NoFocus)
self.ButtonShowKeyboard.setIcon(QtGui.QIcon("images/YourIcon.svg"))
self.ButtonShowKeyboard.setStyleSheet("background: transparent; border: none;")
layout = QHBoxLayout(self)
layout.addWidget(self.ButtonShowKeyboard,0,Qt.AlignRight)
layout.setSpacing(0)
layout.setMargin(5)
# ToolTip
self.ButtonShowKeyboard.setToolTip(QtGui.QApplication.translate("None", "Show virtual keyboard", None, QtGui.QApplication.UnicodeUTF8))
#this code for example in main.py
class main(/////****///**/):
def __init__(self):
#blablablablaaaa
self.KeyboardShow = False
self.connect(self.LineEdit.ButtonShowKeyboard, QtCore.SIGNAL("clicked()"), self.KeyboardShowHide)
def KeyboardShowHide(self):
try:
if self.KeyboardShow:
self.KeyboardShow = False
self.WidgetKeyboard.hide()
else:
self.KeyboardShow = True
self.WidgetKeyboard.show()
except:
debug ("ошибка при вызове функции скрытые или показа клавиатуры (Main Window)")
#this code for example in btninlineedit.py
from forms.btninlineedit import ButtonInLineEdit
self.LineEdit = ButtonInLineEdit()
qt C ++では、pushButton
の左側にドラッグアンドドロップできますLineEdit
。その後、私はこのコードで設定styleSheet
する必要があります:LineEdit
int FramWidth = lineEdit->style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
lineEdit->setStyleSheet(QString("QLineEdit{padding-right: %1px; }").arg(ui->pushButton->sizeHint().width() + FramWidth +5));
そしてそれは私のために働きます。それがお役に立てば幸いです。
class LineEditFileDialogWidget(QtWidgets.QLineEdit):
def __init__(self, parent=None):
super(LineEditFileDialogWidget, self).__init__(parent)
self.setReadOnly(True)
icon = QtWidgets.QApplication.style().standardIcon(QtWidgets.QStyle.SP_DirIcon)
self.action = self.addAction(icon, QtWidgets.QLineEdit.TrailingPosition)
self.action.triggered.connect(some function)
これは、QLineEditと一緒にアイコンを使用する例です。