我拼命地想得到一个似乎非常简单的问题的答案。因此,我的主要代码是一个具有 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
只能采用两个参数:self
和 event
(根据您的意愿命名)。要访问编辑器中已编写的文本,您可以在使用 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/