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

时间:2019-02-24 14:46:36

标签: python pyside

我拼命地试图得到一个似乎很简单的问题的答案。因此,我的主要代码是一个拥有QTextEdit的UI,并且我希望将字符数限制为140个。我认为,最好的方法是重新实现keyPressEventKeyReleaseEvent功能。

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

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事件,并且当然会说它没有长度。

我在做什么错?如何传递事件和参数?甚至有可能吗?

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

1 个答案:

答案 0 :(得分:0)

keyPressEvent只能接受两个参数:selfevent(根据需要命名)。要访问已经在编辑器中编写的文本,可以在接受self.toPlainText()的事件之前使用event.accept()。因此,针对您的情况,将字符数限制为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)