无法使用 Fman FBS 打包和打开我的 PyQt GUI
Unable to package and open my PyQt GUI using Fman FBS
我正在尝试将我的 GUI 应用程序打包到使用 FMan FBS 的应用程序中。我能够创建和打开基本的普通应用程序;但是,当我尝试将自己的代码集成到默认代码中时,一旦我尝试 运行 应用程序,它就会立即关闭而无需 运行ning。
这里是默认代码:
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 作为我的 window 而不是 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 会导致它无法工作
逻辑类似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)
我正在尝试将我的 GUI 应用程序打包到使用 FMan FBS 的应用程序中。我能够创建和打开基本的普通应用程序;但是,当我尝试将自己的代码集成到默认代码中时,一旦我尝试 运行 应用程序,它就会立即关闭而无需 运行ning。
这里是默认代码:
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 作为我的 window 而不是 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 会导致它无法工作
逻辑类似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)