为了账号安全,请及时绑定邮箱和手机立即绑定

关于直接控制台到 Pyqt GUI 的两个问题

关于直接控制台到 Pyqt GUI 的两个问题

Qyouu 2023-08-08 10:51:37
我想将控制台定向到 Pyqt GUI代码如下所示class Stream(QtCore.QObject):    newText = QtCore.pyqtSignal(str)    def write(self, text):        self.newText.emit(str(text))class Window(QtGui.QMainWindow):    def __init__(self):        super(Window, self).__init__()        self.setGeometry(50, 50, 500, 300)        self.setWindowTitle("PyQT tuts!")        self.setWindowIcon(QtGui.QIcon('pythonlogo.png'))        self.home()        sys.stdout = Stream(newText=self.onUpdateText)    def onUpdateText(self, text):        cursor = self.process.textCursor()        cursor.movePosition(QtGui.QTextCursor.End)        cursor.insertText(text)        self.process.setTextCursor(cursor)        self.process.ensureCursorVisible()    def __del__(self):        sys.stdout = sys.__stdout__我有两个问题。为什么def write(self, text)定义了但不使用里面的参数是什么Stream(newText=self.onUpdateText)意思,我的pycharm给了我一个警告Unexpected argument
查看完整描述

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 的限制。


查看完整回答
反对 回复 2023-08-08
  • 1 回答
  • 0 关注
  • 61 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信