首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Fman FBS打包和打开我的PyQt图形用户界面

无法使用Fman FBS打包和打开我的PyQt图形用户界面
EN

Stack Overflow用户
提问于 2019-08-02 02:42:45
回答 1查看 516关注 0票数 0

我正在尝试使用FMan FBS将我的图形用户界面应用程序打包成一个应用程序。我可以创建并打开基本的普通应用程序;但是,当我尝试将自己的代码集成到默认代码中时,一旦我尝试运行该应用程序,它就会立即关闭,而不是运行。

以下是默认代码:

代码语言:javascript
复制
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作为我的窗口。我相信这可能是程序在打包时无法打开的原因。

下面是我的代码示例:

代码语言:javascript
复制
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会导致它无法工作

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-02 02:49:58

逻辑类似于fbs API已经创建了一个QApplication,所以您必须创建它,在这种情况下,您只需对fbs提供的示例进行以下修改:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57315224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档