我正在尝试编写一个简单的菜单驱动的GUI程序。
以下是环境:
使用pip3安装PyQt5。
以下是我正在使用的代码:
from PyQt5.QtWidgets import (QMainWindow, QApplication,
QWidget, QPushButton, QAction)
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
class myApp(QMainWindow):
def __init__(self):
super().__init__()
self.title = 'Some App'
self.left = 10
self.top = 10
self.width = 480
self.height = 260
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
self.statusBar()
pkMenuBar = self.menuBar()
mnuFile = pkMenuBar.addMenu("File")
mnuFile.addAction("Create New")
mnuQuit = QAction(QIcon("ico1.png"), " Quit", self)
mnuQuit.setShortcut("Ctrl+Q")
mnuQuit.setStatusTip("Quit Application")
mnuFile.addAction(mnuQuit)
mnuFile.triggered[QAction].connect(self.triggerAct)
self.show()
def triggerAct(self, x):
if x.text() == "Create New":
print("Trigger Create New...")
elif x.text() == " Quit":
mnuQuit.triggered.connect(self.close)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
ex = myApp()
sys.exit(app.exec_())
在执行代码(使用IDLE)时,GUI加载,菜单项(Actions)也按预期工作。
当菜单项"退出"被称为app关闭以及python图标(来自系统托盘)。但是大约5-10秒之后,我不断收到一条消息说“#34; Python意外退出"。
我一直试图用可能的溶液来解决问题。通过跟踪网络上的线索(如sys.exit(),app.quit()),但每次我都面临相同的结果。
我在ABAP / 4和VB.Net上有编码经验,但就Python / PyQt的GUI编码而言,这是我的早期阶段。
如果提供了潜在客户,我将不胜感激,以便我可以在我的新努力中取得进展。
由于
答案 0 :(得分:2)
问题非常简单:mnuQuit
是一个不是类成员的变量,所以它不能被类的其他方法访问,而且我认为不必使用那行代码,只需要调用close()
:
def triggerAct(self, x):
if x.text() == "Create New":
print("Trigger Create New...")
elif x.text() == " Quit":
self.close()
# mnuQuit.triggered.connect(self.close)
在GUI中调用exit()
是不合适的,因为GUI必须释放内存,如果你调用exit()
,它就不会给你时间。使用close()
GUI正确关闭。
答案 1 :(得分:0)
def triggerAct(self, x):
if x.text() == "Create New":
print("Trigger Create New...")
elif x.text() == " Quit":
exit()
我认为 exit()可以正常使用。