【问题标题】:Unable to package and open my PyQt GUI using Fman FBS无法使用 Fman FBS 打包和打开我的 PyQt GUI
【发布时间】:2019-12-10 10:00:50
【问题描述】:

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

这是默认代码:

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 安装程序”打包应用程序时,它无法正常打开。它确实适用于默认代码,这让我相信将其从 QMainWindow 更改为 QWidget 会导致它无法工作

【问题讨论】:

    标签: python pyqt pyinstaller fbs


    【解决方案1】:

    逻辑类似 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)
    

    【讨论】:

    • 大帮助,谢谢!我将继续实现我的其余代码,并希望它能正常工作。最大的障碍是实现其他本地文件,因为我必须读取一些 CSV/XML 文件并调用另一个 Python 脚本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    相关资源
    最近更新 更多