Python 如何确定哪个小部件发出信号

Python 如何确定哪个小部件发出信号,python,pyqt,pyqt4,Python,Pyqt,Pyqt4,我想使QlineEdit字段可双击,以便用户双击QlineEdit字段(例如,“qle01”)调用函数。 函数应该能够通过“名称”识别向函数发送信号的QLineEdit对象 在下面的示例代码中,我不知道“name”是否是描述“qle01”和“qle02”的正确词语。也许更好的术语应该是“手柄” 在我下面的脚本中,如果双击qle01,我的目标是打印第9行,“QLineEdit字段的名称是‘qle01’”。我希望您能帮助我了解如何打印第9行“QLineEdit字段的名称是‘qle01’” Givng

我想使QlineEdit字段可双击,以便用户双击QlineEdit字段(例如,“qle01”)调用函数。 函数应该能够通过“名称”识别向函数发送信号的QLineEdit对象

在下面的示例代码中,我不知道“name”是否是描述“qle01”和“qle02”的正确词语。也许更好的术语应该是“手柄”

在我下面的脚本中,如果双击qle01,我的目标是打印第9行,“QLineEdit字段的名称是‘qle01’”。我希望您能帮助我了解如何打印第9行“QLineEdit字段的名称是‘qle01’”

Givng credit在信用到期的情况下,除了第9行的伪代码外,下面的其余代码取自StackOverflow过账中的示例1

关于如何将句柄或名称传递给插槽/函数,我有一些想法,但我没有得到任何有用的东西

  • 一个想法是让QLineEdit字段的信号发送到功能插槽字段的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())=None

    我在位于的PyQt4参考指南下找不到对sender()函数的任何引用。因此,我不理解sender()函数,显然我不知道如何使用它


    因此,总而言之,我希望您能帮助我弄清楚如何使第9行打印“QLineEdit字段的名称为'qle01'。

    变量的名称不能识别对象,例如在以下代码中:

    qle01=LineEdit()
    foo_name=qle01
    
    标识QLineEdit的变量的名称是什么?井qle01和foo_名称,因为它们都是内存空间的别名

    可以做的是识别一个对象,即指向同一对象的所有变量都将具有相同的id

    另一方面,最好实现一个信号来通知是否在QLineEdit中进行了双击,因为这将允许我们通过QObject的sender()方法获取对象

    导入系统 从PyQt4导入QtCore、QtGui 类LineEdit(QtGui.QLineEdit): 双击=QtCore.pyqtSignal() def mouseDoubleClickEvent(自身,事件): self.doubleClicked.emit() super(LineEdit,self).鼠标双击事件(event) 类小部件(QtGui.QWidget): 定义初始化(self,*args,**kwargs): 超级(小部件,自我)。\uuuuu初始化(*args,**kwargs) self.qle01=LineEdit(双击=self.on\u双击) self.qle02=LineEdit(双击=self.on\u双击) lay=QtGui.QVBoxLayout(自) lay.addWidget(self.qle01) lay.addWidget(self.qle02) @QtCore.pyqtSlot() 双击(自身)上的def: 如果self.sender()为self.qle01: 打印(“QLineEdit字段的名称为'qle01'。”) elif self.sender()是self.qle02: 打印(“QLineEdit字段的名称为'qle02'。”) 如果名称=“\uuuuu main\uuuuuuuu”: app=QtGui.QApplication(sys.argv) w=Widget() w、 show() sys.exit(app.exec_())
    非常感谢您!我有一个相关的问题,如果你有时间回答的话。在哪里可以找到sender()函数的技术参考?我在这个url下找不到它:我想找到技术参考,这样我就可以更多地了解如何使用sender()函数。@user235218 PyQt4的文档与Qt4的文档相似,因为它是一个包装器,所以请检查谢谢。在您的帮助下,我在以下位置找到了它:
    class ObjectName(object):
    @QtCore.pyqtSlot()
    def __getattribute__(self, name):
        print "getting `{}`".format(str(name))
        print('str(self.sender()) = ' + str(self.sender()))