gpt4 book ai didi

Python3 PyQt5 setEnabled 的 QAction 导致崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 14:59:26 24 4
gpt4 key购买 nike

对于一个项目,我正在使用 Python 3 和 PyQt5 创建一个 GUI。因为它必须可供我的直接团队之外的人员使用,所以我想禁用菜单上的操作,直到他们已经填写了程序其他部分的某些表单(例如,当他们没有设置时禁用最终解决方案 View )建立初始数据连接)。问题是,当我尝试在创建它的函数之外(但仍在整个类内部)调用 QAction 的 setEnabled 函数时,它会导致我的脚本崩溃且没有错误代码,因此我无法理解该问题。在下面的片段中,我尝试将“查看解决方案”菜单选项设置为 true。该菜单中还有更多选项,但我在这里删除了它们以使其更易于阅读。

代码的结构如下:

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_())

最佳答案

问题是 viewSolution 是一个变量,但它不是类的成员,因此您将无法通过 self 实例访问它。一种可能的解决方案是使 viewSolution 成为该类的成员,如下所示:

self.viewSolution = QAction('&View Solution',self)
self.viewSolution.setStatusTip('View the Current Solution (If Built)')
self.viewSolution.setEnabled(False)
...
viewmenu.addAction(self.viewSolution)

另一种可能的解决方案是使用 sender() 函数,该函数返回发出信号的对象,使用以下内容:

def createNewProject(self):
print('Project Created')
self.sender().setEnabled(True)

关于Python3 PyQt5 setEnabled 的 QAction 导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45244807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com