Я хочу сделать поля QlineEdit двойным щелчком, чтобы пользователь дважды щелкал по полю QlineEdit (например, 'qle01'), чтобы вызвать функцию.
Функция должна иметь возможность идентифицировать по имени имя объекта QLineEdit, который отправил сигнал в функцию.
Я не знаю, является ли «имя» правильным словом для описания «qle01» и «qle02» в моем примере кода ниже. Возможно, лучшим термином будет «ручка».
В моем скрипте ниже, если дважды щелкнуть qle01, моя цель - напечатать строку 9 «Имя поля QLineEdit -« qle01 »». Буду признателен за помощь в выяснении того, как вывести строку 9 «Имя поля QLineEdit -« qle01 »."
Предоставление кредита, когда требуется кредит, за исключением моего псевдокода в строке 9, остальная часть приведенного ниже кода взята из примера № 1 в публикации StackOverflow по адресу mouseDoubleClickEvent с QLineEdit
import sys
from PyQt4 import QtGui
class LineEdit(QtGui.QLineEdit):
def mouseDoubleClickEvent(self, event):
print("pos: ", event.pos())
# The next line is pseudo-code, because I don't know how to properly code it
print("The QLineEdit field's name is '" + ['qle01' or 'qle02'] + "'") # i.e., depending on which of the
# QLineEdit fields was double-clicked
class Widget(QtGui.QWidget):
def __init__(self, *args, **kwargs):
QtGui.QWidget.__init__(self, *args, **kwargs)
qle01 = LineEdit()
qle02 = LineEdit()
lay = QtGui.QVBoxLayout(self)
lay.addWidget(qle01)
lay.addWidget(qle02)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
У меня было несколько идей о том, как передать дескриптор или имя в слот / функцию, но я нигде не получил ничего полезного.
Одна идея заключалась в том, чтобы сигнал поля QLineEdit отправлял в слот fuction слот QWidget.effectiveWinId (идентификатор системы окон) поля, но я не мог выяснить, как получить доступ к QWidget.effectiveWinId.
Другая идея состояла в том, чтобы использовать функцию sender (), о которой я упоминал во многих публикациях и учебных пособиях (например, Как определить, кто излучал сигнал? ). Я попытался использовать функцию sender () следующим образом:
class ObjectName(object):
@QtCore.pyqtSlot()
def __getattribute__(self, name):
print "getting `{}`".format(str(name))
print('str(self.sender()) = ' + str(self.sender()))
Но последняя строка выдает этот вывод: str (self.sender ()) = Нет.
Я не могу найти ссылку на функцию sender () в Справочном руководстве PyQt4, расположенном по адресу https://www.riverbankcomputing.com/static/Docs/PyQt4/. Так что я не понимаю функцию sender () и, очевидно, не могу понять, как ее использовать.
Итак, нижняя строка, я был бы признателен за помощь в выяснении того, как заставить строку 9 печатать "Имя поля QLineEdit -" qle01 "."