Python PyQt扩展内置Widges

Python PyQt扩展内置Widges,python,class,Python,Class,通过扩展内置QLineEdit并使其“可双击”,定义了自定义小部件: class Clickable_LineEdit(QtGui.QLineEdit): def __init__(self, type, parent=None): super(DCLineEdit, self).__init__(parent) def mouseDoubleClickEvent(self, event): print "CLICK" 现在,我可以使用这个“

通过扩展内置QLineEdit并使其“可双击”,定义了自定义小部件:

class Clickable_LineEdit(QtGui.QLineEdit):

    def __init__(self, type, parent=None):
        super(DCLineEdit, self).__init__(parent)

    def mouseDoubleClickEvent(self, event):
        print "CLICK"
现在,我可以使用这个“自定义”可单击的编辑小部件来填充主对话框窗口。一切都很好。但每次双击都会在主对话框窗口类之外注册。。。意味着所有主对话框类的变量、所有遗留的数据以及不可点击的编辑类实例

我想知道是否可以在不离开主对话框类的情况下从LineEdit获得双击功能

稍后编辑: 下面是一篇文章的修改示例:

from PyQt4 import QtCore, QtGui


class Clickable_LineEdit(QtGui.QLineEdit):

    def __init__(self, parent=None):
        super(QtGui.QLineEdit, self).__init__(parent)

    def mouseDoubleClickEvent(self, event):
        print "CLICK"

class Ui_Dialog(QtGui.QWidget):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(348, 195)
        self.lineEdit = Clickable_LineEdit(Dialog)
        self.lineEdit.setGeometry(QtCore.QRect(50, 40, 113, 20))
        self.lineEdit.setObjectName("lineEdit")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None,     QtGui.QApplication.UnicodeUTF8))

    def runOnDoubleClick(self):
        print "DOUBLE CLICK"       

import sys
def main():

    app = QtGui.QApplication(sys.argv)
    ex = Ui_Dialog()
    ex.setupUi(ex)
    ex.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我在每次双击self.lineEdit小部件(而不是mouseDoubleClickEvent()函数)时都要运行的“Ui_Dialog()”类下添加了一个“runOnDoubleClick”函数。如何实现呢?

根据我的理解,您需要一个lineEdit,每当双击lineEdit时,它都会感知双击信号

from PyQt4 import QtCore, QtGui


class Clickable_LineEdit(QtGui.QLineEdit):

    def __init__(self, parent=None):
        super(QtGui.QLineEdit, self).__init__(parent)

    def mouseDoubleClickEvent(self, event):
        print "CLICK"

class Ui_Dialog(QtGui.QWidget):
    def setupUi(self, Dialog):
        Dialog.setObjectName(_fromUtf8("Dialog"))
        Dialog.resize(348, 195)
        self.lineEdit = Clickable_LineEdit(Dialog)
        self.lineEdit.setGeometry(QtCore.QRect(50, 40, 113, 20))
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None,     QtGui.QApplication.UnicodeUTF8))

import sys
def main():

    app = QtGui.QApplication(sys.argv)
    ex = Ui_Dialog()
    ex.setupUi(ex)
    ex.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

这似乎对我很有用。

好吧,据我所知,您想要一个lineEdit,每当双击lineEdit时,它会感应双击信号,而您的自定义lineEdit不会感应到其他双击??