簡體   English   中英

如何創建使用pyqt5制作的gui的exe文件?(有幾個ui文件)

[英]How do I create an exe file of gui made using pyqt5?(There are several ui files)

我試圖創建一個exe文件。

我有幾個 ui 文件,其中我嘗試制作 user_view_ui.py,它充當 main_window,一個可執行文件。

步驟 1) user_view_ui.py

def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

form_ui = uic.loadUiType("ui\\user_view.ui")[0]

class UserViewUi(QMainWindow, form_ui):
...

而且,我在其他 python 文件中添加了“resource_path”函數。

Step2) 我修改了 user_view_ui.spec 文件。

ui_list = ['.\\ui\\user_view.ui', '.\\ui\\change_list_view.ui', '.\\ui\\move_to_another_changelist.ui', '.\\ui\\login.ui', '.\\ui\\user_settings.ui']

a = Analysis(['user_view_ui.py'],
             pathex=[],
             binaries=[],
             datas=ui_list,

但是,當我執行“pyinstaller --onefile user_view_ui.spec”時,會出現以下錯誤。

Traceback (most recent call last):
  File "c:\users\appdata\local\programs\python\python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\users\appdata\local\programs\python\python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\AppData\Local\Programs\Python\Python36\Scripts\pyinstaller.exe\__main__.py", line 7, in <module>
  File "c:\users\appdata\local\programs\python\python36\lib\site-packages\PyInstaller\__main__.py", line 124, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "c:\users\appdata\local\programs\python\python36\lib\site-packages\PyInstaller\__main__.py", line 58, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "c:\users\appdata\local\programs\python\python36\lib\site-packages\PyInstaller\building\build_main.py", line 803, in main
    build(specfile, distpath, workpath, clean_build)
  File "c:\users\appdata\local\programs\python\python36\lib\site-packages\PyInstaller\building\build_main.py", line 725, in build
    exec(code, spec_namespace)
  File "user_view_ui.spec", line 20, in <module>
    noarchive=False)
  File "c:\users\appdata\local\programs\python\python36\lib\site-packages\PyInstaller\building\build_main.py", line 287, in __init__
    for name, pth in format_binaries_and_datas(datas, workingdir=spec_dir):
  File "c:\users\appdata\local\programs\python\python36\lib\site-packages\PyInstaller\building\utils.py", line 506, in format_binaries_and_datas
    for src_root_path_or_glob, trg_root_dir in binaries_or_datas:
ValueError: too many values to unpack (expected 2)

在您的 .spec 文件中,datas 字段需要一個元組列表,其中包含數據文件的路徑以及在執行時應將其復制到的目標文件夾。

例如:

ui_list = [
('.\\ui\\user_view.ui','.\\ui'), 
('.\\ui\\change_list_view.ui','.\\ui'), 
('.\\ui\\move_to_another_changelist.ui','.\\ui'),
('.\\ui\\login.ui', '.\\ui'),
('.\\ui\\user_settings.ui','.\\ui')
]

a = Analysis(['user_view_ui.py'],
             pathex=[],
             binaries=[],
             datas=ui_list,

您可以嘗試在資源函數中使用相對路徑。

def resource_path(relative_path):
    base_path = os.path.dirname(os.path.abspath(__file__))
    uipath = os.path.join(base_path, relative_path)
    return os.path.relpath(uipath, '.')

form_ui = uic.loadUiType(os.path.join(resource_path("ui"),"user_view.ui"))[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM