我正在尝试使用FMan FBS将我的图形用户界面应用程序打包成一个应用程序。我可以创建并打开基本的普通应用程序;但是,当我尝试将自己的代码集成到默认代码中时,一旦我尝试运行该应用程序,它就会立即关闭,而不是运行。
以下是默认代码:
from fbs_runtime.application_context.PyQt5 import ApplicationContext
from PyQt5.QtWidgets import QMainWindow
import sys
if __name__ == '__main__':
# 1. Instantiate ApplicationContext
appctxt = ApplicationContext()
window = QMainWindow()
window.resize(250, 150)
window.show()
# 2. Invoke appctxt.app.exec_()
exit_code = appctxt.app.exec_()
sys.exit(exit_code)这是可行的。但是,我的应用程序大量使用布局,所以我使用QWidget而不是QMainWindow作为我的窗口。我相信这可能是程序在打包时无法打开的原因。
下面是我的代码示例:
class Interface:
def __init__(self):
self.app = QApplication([])
def main(self):
window = QWidget()
window.setGeometry(550, 300, 850, 550)
window.setWindowTitle("GUI")
layout = QGridLayout()
self.app.setStyle("Fusion")
tabs = QTabWidget()
tab1 = QWidget()
tab2 = QWidget()
tab3 = QWidget()
tabs.addTab(tab1, "Tab1")
tabs.addTab(tab2, "Tab2")
layout1 = QGridLayout()
layout2 = QGridLayout()
# ...
tab1.setLayout(layout1)
tab2.setLayout(layout2)
window.setLayout(layout)
window.show()
self.app.exec_()我可以用"FBS run“很好地运行我的程序;但是,当实际使用"FBS freeze/ FBS installer”打包应用程序时,它不能正确打开。它确实可以使用默认代码,这让我相信将它从QMainWindow更改为QWidget会导致它无法工作
发布于 2019-08-02 02:49:58
逻辑类似于fbs API已经创建了一个QApplication,所以您必须创建它,在这种情况下,您只需对fbs提供的示例进行以下修改:
from fbs_runtime.application_context.PyQt5 import ApplicationContext
from PyQt5.QtWidgets import QWidget, QTabWidget, QGridLayout
import sys
class Interface:
def main(self):
self.window = QWidget()
self.window.setGeometry(550, 300, 850, 550)
self.window.setWindowTitle("GUI")
layout = QGridLayout()
tabs = QTabWidget()
tab1 = QWidget()
tab2 = QWidget()
tab3 = QWidget()
tabs.addTab(tab1, "Tab1")
tabs.addTab(tab2, "Tab2")
layout1 = QGridLayout()
layout2 = QGridLayout()
# ...
tab1.setLayout(layout1)
tab2.setLayout(layout2)
self.window.setLayout(layout)
self.window.show()
if __name__ == '__main__':
# 1. Instantiate ApplicationContext
appctxt = ApplicationContext()
interface = InterFace()
inteface.main()
appctxt.app.setStyle("Fusion")
# 2. Invoke appctxt.app.exec_()
exit_code = appctxt.app.exec_()
sys.exit(exit_code)https://stackoverflow.com/questions/57315224
复制相似问题