出現警告的代碼如下:
import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget() # <-- 這裏是出現黃色警告地方, 警告信息: "parameter 'flags' unfilled"
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('Simple')
w.show()
sys.exit(app.exec_())
雖然運行不會有問題, 但是作爲有強迫症的人想要消除這個警告. 那麼先找到它的原因.
按 ctrl + b 定位源碼, 長這個樣子:
def __init__(self, parent=None, flags, Qt_WindowFlags=None, Qt_WindowType=None, *args, **kwargs): # real signature unknown; NOTE: unreliably restored from __doc__
pass
從參數上來看, parent 是有默認參數的, flags 卻沒有, 很明顯是 “錯誤” 的寫法, pyqt 官方會出現這種錯誤嗎?
從 這個回答 來看, 這裏的正確寫法應該是:
def __init__(self, parent:QWidget = None, flags:Union[Qt.WindowFlags, Qt.WindowType]=Qt.WindowFlags()):
pass
也就是說初始化中只有 parent 和 flags 兩個參數, 問題是出在這個註釋上: # real signature unknown; NOTE: unreliably restored from __doc__
這個註釋的作用是, 將從 __doc__
中恢復正常的傳參. 在源碼文件中也確實能夠找到正確的寫法:
也就是說, 官方的寫法並沒有錯, 只是在運行時纔會被正確地生成, 至少排除了官方失誤這種低級問題. 反過來說就是 pycharm 在 “智能檢測” 功能上做得還不夠完善.
那麼如何消除這個黃色警告, 就只好從 ide 上入手了.
方法1是設置本項目忽略這個錯誤情況 (好處是該屏蔽規則只在本項目有效, 壞處是如果本項目的其他地方, 特別是自己寫的類如果忘了傳參就只能等運行時報錯了), 方法2是隻忽略本行代碼的報錯, 即在這行前面加一個suppress:
import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
app = QApplication(sys.argv)
# 加一個suppress規則:
# noinspection PyArgumentList
w = QWidget() # 這樣這裏的警告就消失了
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('Simple')
w.show()
sys.exit(app.exec_())
參考: