PySide2 終了時のメモリアクセスエラー
原因調べるのが面倒くさいので困ります
from PySide2 import QtWidgets import sys if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) main = QtWidgets.QMainWindow() action = QtWidgets.QAction(main) action.setText('Action') action.triggered.connect(lambda: print('action executed')) menu = QtWidgets.QMenu('menu') menu.addAction(action) main.menuBar().addMenu(menu) main.show() sys.exit(app.exec_())
↑たとえばコレ。一見ちゃんと動いてそうなプログラムですが、メニューからアクションを実行すると終了時にエラーが出ます。こんなのPySide1でも起きてましたっけ?これを回避するには
# parentをちゃんと指定する # QMenuを入れ子にする場合も全部のSubmenuに指定する menu = QtWidgets.QMenu('menu', main)
こう書いておく必要があります。デフォルト引数で「parent = Q_NULLPTR」とか書いてあるからaddMenuしたときに設定してくれるのかな~とか、淡い期待を抱いてた時期が私にもありました(なんでデフォルトNULLなんだい?)とりあえずメモリアクセスエラーに出会ったらparent指定してない箇所を見なおすことにしました。QtビルドしてPDB作るのは面倒くさいからやらないです⇒やりました