问题是在工具栏(或qpushbutton)中的操作上设置图标并在触发时显示qmessagebox。如果我删除图标,则会显示消息框。如果我删除了消息框但保留了图标,则应用程序保持打开状态。另一个奇怪的事情是,如果我将图标添加到按钮而不是操作,并单击该操作,它仍会关闭应用程序。奇怪的是,如果我在qapplication.exec_()之前添加main.qpush_button_clicked,则会显示消息框。但是,下次我点击其中任何一个时,它会关闭应用程序。
我查看过多个帖子,其中一些想法是使用setQuitOnLastWindowClosed,但这并没有解决问题。我还实施了一个活动,看看发生了什么。当我点击任一项时,它会触发ChildAdded事件,然后关闭。
此外,这仅在我在Mac上使用cx_Freeze时不起作用。我还没试过过Win。当使用Eclipse或CLI运行时,它可以正常工作。
是否有人对可能导致此问题的原因有任何想法,或者除了不使用图标之外如何修复它。
我使用的图标来自Android图标包。
如果需要,我可以添加崩溃日志。
class Main(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.qicon = QIcon('../ic_add_black_24dp_1x.png')
self.tool_bar = self.addToolBar('main')
qaction = QAction(self)
self.tool_bar.addAction(qaction)
qaction.setText('add')
qaction.setIcon(self.qicon)
qaction.triggered.connect(self.qpush_button_clicked)
qpush_button = QPushButton('add')
self.setCentralWidget(qpush_button)
qpush_button.setIcon(self.qicon)
qpush_button.clicked.connect(self.qpush_button_clicked)
def qpush_button_clicked(self, *args, **kwargs):
QMessageBox.critical(self, 'test', 'testing')
if __name__ == '__main__':
qapplication = QApplication(sys.argv)
main = Main()
main.show()
main.raise_()
qapplication.exec_()
这是设置文件
name = 'dialog'
version = '0.1'
description = 'description'
packages = ('os',)
excludes = ('tkinter',)
include_files = ('ic_add_black_24dp_1x.png',)
build_exe = dict(packages=packages,
excludes=excludes,
include_files=include_files)
options = dict(build_exe=build_exe)
base = 'Win32GUI' if sys.platform == 'win32' else None
script = 'dialog.py'
executables = (Executable(script, base=base),)
setup(name=name,
version=version,
description=description,
options=options,
executables=executables)