亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于直接控制臺到 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 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號