【发布时间】:2019-06-05 09:03:28
【问题描述】:
我想让 QlineEdit 字段可双击,以便用户双击 QlineEdit 字段(例如,'qle01')调用一个函数。 该函数应该能够通过“名称”识别向函数发送信号的 QLineEdit 对象。
我不知道在下面的示例代码中“name”是否是描述“qle01”和“qle02”的正确词。也许更好的术语是“手柄”。
在下面的脚本中,如果双击 qle01,我的目标是在第 9 行打印“QLineEdit 字段的名称是 'qle01'。”我将不胜感激帮助弄清楚如何使第 9 行打印“QLineEdit 字段的名称是 'qle01'。”
在信用到期的地方给予信用,除了我在第 9 行的伪代码,下面的其余代码来自 StackOverflow 中的示例 1,mouseDoubleClickEvent with 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 字段的信号发送到该字段的 QWidget.effectiveWinId(窗口系统标识符)的功能槽,但我不知道如何访问 QWidget.effectiveWinId。
-
另一个想法是使用我在许多帖子和教程中提到的 sender() 函数(例如How to determine who emitted the signal?)。我尝试使用 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()) = None。
我在位于https://www.riverbankcomputing.com/static/Docs/PyQt4/ 的 PyQt4 参考指南下找不到对 sender() 函数的任何参考。所以我看不懂 sender() 函数,我显然不知道怎么用。
所以,最重要的是,我希望能帮助我弄清楚如何让第 9 行打印“QLineEdit 字段的名称是 'qle01'。”
【问题讨论】: