プロジェクトでは、Python 3とPyQt5を使用してGUIを作成しています。私のチームの外にいる人が使用できる必要があるため、プログラムの他の部分で既にいくつかのフォームに記入するまで、メニューのアクションを無効にしたい(たとえば、最終的なソリューションビューが設定されていないときに無効にする初期データ接続を開始する)。問題は、QActionのsetEnabled関数を作成した関数の外で呼び出すと(しかし全体のクラスの中でも)、スクリプトがエラーコードなしでクラッシュするため、問題を理解できません。下のスナイピットでは、「ソリューションの表示」メニューオプションをtrueに設定しようとしています。このメニューにはいくつかのオプションがありますが、ここを削除して読みやすくしています。Python3 PyQt5がクラッシュの原因となるQActionのsetEnabled
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QMessageBox, QStackedLayout
class MediaPlanner(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# Menu bar example from: zetcode.com/gui/pyqt5/
exitAction = QAction('&Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit application')
exitAction.triggered.connect(self.close)
newProject = QAction('&New Project', self)
newProject.setShortcut('Ctrl+N')
newProject.setStatusTip('Start A New Project')
newProject.triggered.connect(self.createNewProject)
openProject = QAction('&Open Project',self)
openProject.setShortcut('Ctrl+O')
openProject.setStatusTip('Open A Saved Project')
openProject.setEnabled(False)
viewSolution = QAction('&View Solution',self)
viewSolution.setStatusTip('View the Current Solution (If Built)')
viewSolution.setEnabled(False)
self.statusBar()
menubar = self.menuBar()
filemenu = menubar.addMenu('&File')
filemenu.addAction(newProject)
filemenu.addAction(openProject)
filemenu.addAction(exitAction)
viewmenu = menubar.addMenu('&View')
viewmenu.addAction(viewSolution)
self.setGeometry(300,300,700,300)
self.setWindowTitle('Menubar')
self.show()
def createNewProject(self):
print('Project Created')
self.viewSolution.setEnabled(True)
if __name__ == '__main__':
app = QApplication(sys.argv)
gui = MediaPlanner()
sys.exit(app.exec_())
ありがとうございました! –