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

How to reimplement event and pass and argument to it using PySide

我正在拼命寻找一个看似非常简单的问题的答案。所以,我的主要代码是 UI,其中包含 QTextEdit,我想将字符数限制在 140 个以内。在我看来,最好的方法是重新实现 keyPressEventKeyReleaseEvent函数。

为此,我正在使用我的自定义文本编辑小部件创建 class:

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

我不需要在这里举办活动。我只需要传递一个参数来保存已经在文本编辑器中编写的文本。但是,当我尝试创建一个 QEditText 并通过在我的 main 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)