这与我在这里发现的另一个问题有关,该问题似乎已经不活跃了几个月,所以我认为值得再次询问。
我创建了一个简单的QDialog,其中包含一个QTextEdit和一个QPushButton。当用户右键单击并选择“添加注释”选项时,它会在我的应用程序中弹出。我希望他们能够编写自由格式的文本,我将保存他们编写的任何内容作为长字符串,不考虑换行等内容。
当用户单击按钮时,它将执行类似于以下代码的操作:
我创建了一个简单的QDialog,其中包含一个QTextEdit和一个QPushButton。当用户右键单击并选择“添加注释”选项时,它会在我的应用程序中弹出。我希望他们能够编写自由格式的文本,我将保存他们编写的任何内容作为长字符串,不考虑换行等内容。
当用户单击按钮时,它将执行类似于以下代码的操作:
self.connect(accept_button,QtCore.SIGNAL('clicked()'),lambda arg=str(view_textedit.toPlainText()): self.updateGroupComments(arg))
def updateGroupComments(self,new_comment_str):
print "Updating user comment to have new string: " + new_comment_str
self.group_entry.list_of_user_comments[self.currentFrameCounter] = new_comment_str
这并不能检测到可见的TextEdit文本(它只能检测到在创建时设置的TextEdit文本)。我如何创建一个简单的命令,返回当前从QTextEdit中可见的文本。同样,该函数
toPlainText()
不起作用...它无法找到当前可见的文本,只能找到用户进行更改或添加之前屏幕上显示的文本。
如果不能在不使用子类化和光标位置的情况下完成此操作,则整个过程似乎毫无意义...因此,请仅提出不使用子类化或操纵光标实现的建议。只需返回所有当前可见文本应该非常简单明了...我错过了什么?
lambda
时,您将调用的结果传递给connect
。这更可能导致错误,因为updateGroupComments
返回了None
,而None
不可调用。当您使用lambda
时,您创建了一个新函数,该函数传递给connect
,然后由信号/插槽机制稍后调用。这与PyQt无关,这实际上是Python基础知识,没有任何魔法参与。请参阅我的编辑-您可以使用正常的内部命名函数代替没有问题的匿名函数。 - Cat Plus Plusself.updateGroupComments(...)
和lambda: self.updateGroupComments(...)
都是有效的Python表达式——除了第一个会立即调用updateGroupComments
(就像你正在调用self.connect
一样),而另一个则创建一个将调用updateGroupComments
的函数。在交互式解释器中使用它进行测试(在更简单的示例中,且不使用PyQt)。 - Cat Plus Plus