python - 如何使用 PySide 重新实现事件并传递参数

标签 python pyside

我拼命地想得到一个似乎非常简单的问题的答案。因此,我的主要代码是一个具有 QTextEdit 的 UI,我想将字符数限制为 140。在我看来,最好的方法是重新实现 keyPressEvent和 KeyReleaseEvent 函数。

为此,我使用自定义文本编辑小部件创建一个类:

class CustomTextEdit(QtWidgets.QTextEdit):
   def keyPressEvent(self, event, text):
       if len(text) > 140:
           return
       else:
           self.setText(text)

我不需要在这里举办事件。我只需要传递一个参数来保存文本编辑器中已经编写的文本。但是,当我尝试创建 QEditText 并通过在主 UI 中输入当前文本时:

self.text_edit = QtWidgets.CustomTextEdit()
self.text_edit.keyPressEvent(self.text_edit.toPlainText())

程序将其理解为好像我正在传递一个 QKeyEvent 事件,当然说它没有长度。

我做错了什么?如何传递事件和参数?这可能吗?

我一直在阅读类似问题的答案,但仍然没有得到答案。请帮忙!

最佳答案

keyPressEvent 只能采用两个参数:selfevent (根据您的意愿命名)。要访问编辑器中已编写的文本,您可以在使用 event.accept() 接受事件之前使用 self.toPlainText() 。因此,对于将字符数限制为 140 个的情况,我建议采用以下解决方法:

class CustomTextEdit(QWidgets.QTextEdit):
    def keyPressEvent(self, event):
        current_text = self.toPlainText()
        super().keyPressEvent(event)  # event.accept() is not working for me for some reasons
        if len(self.toPlainText()) > 140:
            self.setText(current_text)

关于python - 如何使用 PySide 重新实现事件并传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54853040/

相关文章:

python - 如何从相似记录中获取最后日期? | Django

Python RPG 困惑

python - 如何更改 QPalette 的当前颜色组

python - 用于安全密码处理的 pyside 小部件

python - 在 Python 中覆盖 "private"方法

python - 如何在Python中设置动态全局变量?

python - 通过python编译PySide资源

qt - Autodesk Maya 模型面板调整大小事件

python - Qt 不允许我创建一个以我的应用程序命名的菜单项,其中包含字符串 "About"、 "Preferences"或“退出?有什么提示吗?

在网格中查找相邻单元格的 Pythonic 和有效方法