1 回答
TA贡献1860条经验 获得超8个赞
1. 为什么定义了 def write(self, text) 但没有使用
print
要了解为什么要实现 write 方法,只需阅读内置文档:
打印(*对象,sep='',end='\n',file=sys.stdout,flush=False)
将对象打印到文本流文件,以 sep 分隔,后跟 end。sep、end、file 和flush(如果存在)必须作为关键字参数给出。
所有非关键字参数都像 str() 一样转换为字符串并写入流中,以 sep 分隔,后跟 end。sep 和 end 都必须是字符串;它们也可以是 None,这意味着使用默认值。如果没有给出对象, print() 将只写 end。
文件参数必须是具有 write(string) 方法的对象;如果它不存在或没有,则将使用 sys.stdout。由于打印的参数被转换为文本字符串,因此 print() 不能与二进制模式文件对象一起使用。对于这些,请使用 file.write(...) 代替。
输出是否缓冲通常由文件决定,但如果flush关键字参数为true,则强制刷新流。
版本 3.3 中的更改:添加了lush关键字参数。
(强调我的)
如前所述,“print”函数实现了一个逻辑,可以通过 write 方法将简单单词的文本(添加 sep、end 等)写入默认为 sys.stdout 的文件中。
因此,目标不是在 sys.stdout 设备上写入,而是重定向文本,因此必须修改该方法,以便它通过信号发送信息newText
。
2. Stream(newText=self.onUpdateText) 中的参数是什么意思,我的pycharm给了我一个警告 Unexpected argument。
默认情况下,QObject 可以接收 qproperties 初始值的 kwargs 并建立 qsignals 的连接。在这种情况下,它是第二个选项,所以
sys.stdout = Stream(newText=self.onUpdateText)
等于
sys.stdout = Stream() sys.stdout.newText.connect(self.onUpdateText)
Pycharm 指示警告“意外参数”,因为它指示的逻辑是用 C++ 实现的(通过 SIP),并且 IDE 无法处理它们。跳过它,因为它只是 IDE 的限制。
添加回答
举报