Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python `QTextEdit`光标在覆盖其`dropEvent'后变为冻结状态`_Python_Python 3.x_Pyqt_Pyqt5 - Fatal编程技术网

Python `QTextEdit`光标在覆盖其`dropEvent'后变为冻结状态`

Python `QTextEdit`光标在覆盖其`dropEvent'后变为冻结状态`,python,python-3.x,pyqt,pyqt5,Python,Python 3.x,Pyqt,Pyqt5,在程序中,我希望接受将文件拖放到QTextExit中,以便编辑其中的某些部分 拖放工作正常,但是在QTextEdit中拖放文件后,QTextEdit的光标将冻结(停止闪烁且无法再移动) 下面是一个简单的例子: 拖放后: (d&d工作正常,但光标冻结) 我可以在textEdit中编辑内容,但在textEdit失去焦点后光标仍然可见。 代码: 由QtDesigner生成的拖放窗口.py # -*- coding: utf-8 -*- # Form implementation generate

在程序中,我希望接受将文件拖放到
QTextExit
中,以便编辑其中的某些部分

拖放工作正常,但是在
QTextEdit
中拖放文件后,
QTextEdit
的光标将冻结(停止闪烁且无法再移动)

下面是一个简单的例子:

拖放后: (d&d工作正常,但光标冻结)

我可以在textEdit中编辑内容,但在textEdit失去焦点后光标仍然可见。

代码:

由QtDesigner生成的拖放窗口.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Drag_drop_window.ui'
#
# Created: Sun Apr  5 17:53:03 2015
#      by: PyQt5 UI code generator 5.3.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        self.verticalLayout = QtWidgets.QVBoxLayout(Form)
        self.verticalLayout.setObjectName("verticalLayout")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))

我发现在
dropEvent
的末尾添加以下四行可以使事情正常进行:

        mimeData = QtCore.QMimeData()
        mimeData.setText("")
        dummyEvent = QtGui.QDropEvent(event.posF(), event.possibleActions(),
                mimeData, event.mouseButtons(), event.keyboardModifiers())

        super(override_textEdit, self).dropEvent(dummyEvent)
您已经覆盖了
QTextEdit
控件的
dropEvent
方法,但您没有调用被覆盖的超类方法。我想在重写的方法中有一些清理代码需要运行,以便解决游标的问题。但是,只需使用drop事件调用超类方法,即

        super(override_textEdit, self).dropEvent(event)
没有做你所希望的。这会将删除文件的URL输入文本编辑控件

在调用超类之前,我没有发现调用
accept()
ignore()
setDropAction(Qt.IgnoreAction)
的任何组合都有任何效果。我怀疑超类方法会自行决定是否接受或忽略事件,这可能会覆盖您的子类所做的事情

因此,我创建了一个“伪”拖放事件,除了文本数据是空的之外,它与接收到的事件相同,并将这个伪事件传递给超类。当然,如果超类想在某个地方插入这个空文本,它是受欢迎的,但是如果它这样做了,它就不会有任何效果

        super(override_textEdit, self).dropEvent(event)