【问题标题】:Setting up PySide/Qt for GUI development为 GUI 开发设置 PySide/Qt
【发布时间】:2013-07-21 04:08:34
【问题描述】:

我一直在尝试设置 PySide/Qt 以用于 Python3.3。我已经安装了

PySide-1.2.0.win32-py3.3.exe 

我从here 获取并安装了

qt-win-opensource-4.8.5-vs2010

我从here 获取的。

我使用pyside-uic.exe as is explained in PySide Wiki.ui 文件(我使用QtDesigner 创建的)生成.py 文件。

当我使用 Qt5.1/QtCreator 时,制作 .py 文件可以正常工作。当我发现我需要使用 Qt4.8 as explained on Qt-forums 时,我停止使用它。对于 Qt4.8,它无法正常工作。

  • 我想使用 PySide 开发 GUI。
  • 我想要一个用于制作骨架 GUI 的拖放界面,所以我使用 QtDesigner。
  • 我使用的是 Windows 7

我想用cx-freeze将开发的GUI打包成.exe文件。

简而言之我的问题
使用 QtDesigner 制作 .ui 的正确工具是什么?如何使用 PySide 将它们转换为 .py 文件以在 Python 中使用?

cx_freeze 能够将我的普通文件转换为.exe 可以用来将Qt/PySide 制作的GUI 转换为.exe 文件吗?在 GUI 的 .exe 被分发的其他计算机上是否需要 Qt 或者它是独立的?


我用过

cxfreeze testGUI.py  --include-modules=PySide

制作exe和相关文件。使用许多文件创建了一个目录 dist。运行时什么也没发生。所以我用命令行来找出原因。错误是

Traceback (most recent call last):
  File "C:\Python33\lib\site-packages\cx_Freeze\initscripts\Console3.py", line 27, in <module>
    exec(code, m.__dict__)
  File "testGUI.py", line 12, in <module>
  File "C:\Python\32-bit\3.3\lib\importlib\_bootstrap.py", line 1558, in _find_and_load
  File "C:\Python\32-bit\3.3\lib\importlib\_bootstrap.py", line 1525, in _find_and_load_unlocked
  File "C:\Python33\lib\site-packages\PySide\__init__.py", line 55, in <module>
    _setupQtDirectories()
  File "C:\Python33\lib\site-packages\PySide\__init__.py", line 11, in _setupQtDirectories
    pysideDir = _utils.get_pyside_dir()
  File "C:\Python33\lib\site-packages\PySide\_utils.py", line 87, in get_pyside_dir
    return _get_win32_case_sensitive_name(os.path.abspath(os.path.dirname(__file__)))
  File "C:\Python33\lib\site-packages\PySide\_utils.py", line 83, in _get_win32_case_sensitive_name
    path = _get_win32_long_name(_get_win32_short_name(s))
  File "C:\Python33\lib\site-packages\PySide\_utils.py", line 58, in _get_win32_short_name
    raise WinError()
FileNotFoundError: [WinError 3] The system cannot find the path specified.

有人知道这个堆栈跟踪是什么意思吗?

这里有很多win32。但我有 Windows 7 64 位。我使用的是 32 位 Python,并且所有模块都安装了 32 位。这会导致问题吗?我认为它不应该像我为简单的 Python 脚本制作的其他 exe 一样执行良好。

【问题讨论】:

  • 您可以使用 Qt Creator 创建您的 UI。
  • @Reza 但问题是如何在 Python 中正确使用 .ui 文件。我是使用 pyside-uic 将它们转换为 Python 类还是需要动态加载它们?将生成的应用程序转换为功能性 exe 需要做什么?我正常使用 cxfreeze 并且它可以工作,但是带有 GUI 的 exe 没有工作。我只是被难住了。
  • 我不知道到底是什么导致了你的错误,但是在 C++ Qt 中生成了相关的 UI 的.cpp 文件,然后在项目中编译它,花点时间在 Qt 文档中搜索 Loading @ 987654342@如果可能的话直接归档。
  • 出于好奇:您是否在使用和部署自定义小部件?
  • @cfi 我刚开始在 Python 中使用 PySide 和 GUI,所以还没有。在尝试使用任何特定工具包之前,我只是想弄清楚这些细节。

标签: python qt user-interface pyside


【解决方案1】:

这个错误:

FileNotFoundError: [WinError 3] The system cannot find the path specified.

将在下一个 pyside 版本 (1.2.1) 中修复。将于下周发布。

顺便说一句:如果您不想生成自定义绑定,则不需要安装 qt,pyside 安装程序包含所有 qt 库和开发工具。

【讨论】:

  • 我也在 qt-forums 上听说过。你能澄清一下开发工具到底在哪里吗?我试图找到 Qt 设计器,但直到我安装 Qt 本身才出现。我想要一个用于制作 GUI 的拖放界面。自定义绑定到底是什么意思?
  • designer、linguist、lrelease、lupdate、pyside-rcc 和 pyside-lupdate 与 pyside 库位于同一文件夹中,在我的系统中,这是路径 c:\Python27_64\Lib\site-packages\PySide -1.2.0-py2.7-win-amd64.egg\PySide。自定义绑定是当您想使用 shiboken 为您的 c++ 类生成 python 包装器时。
  • 非常感谢。我终于找到了设计师、语言学家等在哪里。我已经安装了 3 次未安装的 Qt/PySide,并认为这是一个顺序问题。也许某些文件不小心替换了其他文件。我可以等一个星期。你能告诉我 PySide 社区通常在哪里吗?尝试了 QtForums 并没有得到太多。
  • 您从哪里得知这是一个将在下一版本中修复的错误?我试图找到它,但除了 github 上似乎没有人阅读的问题之外,没有任何此类消息。
【解决方案2】:

关于 FileNotFoundError,我在用它打包 python 3 应用程序几天时遇到了问题。在 Windows 7 64 位机器上,它运行良好。当我在 32 位 win7 上构建它并尝试运行 .exe 文件时,我得到了所有这些文件错误。看到这个帖子后,我检查了 pyside 的版本。在 win64 上是 1.1.2 在 win32 上是 1.2.0 我在win32上卸载了pyside 1.2.0,下载安装了1.1.2的win32版本。现在可以正常工作了。 在 1.2.1 发布之前,这可能是一种权宜之计。

【讨论】:

    【解决方案3】:

    我正在做类似的事情(但是我正在从 PyQt 迁移到 PySide)。

    在 QtCreator 中创建 UI 文件后,您应该使用 pyside-uic 生成 GUI 代码(如果这是 PyQt "pyuic gui.ui > gui.py" 将生成所需的代码,我假设 pyside-uic 有类似的行为)。然后,我将生成的代码子类化以自定义用户界面。

    是的,您可以将 cx_freeze 与 PyQt/PySide 一起使用,您需要在构建选项的“包含”项中包含 PySide。

    是的,您可以创建一个完全独立的可执行文件 - 您不需要 Python、Qt 或其他任何东西。

    这是我在 PySide GUI 应用程序中使用的构建。

    __author__ = 'AlexM'
    import sys
    from cx_Freeze import setup, Executable
    import MyPySideGui
    import PySide, os
    
    base = None
    if sys.platform == "win32":
        base = "Win32GUI"
    
    QGifRelDir = "imageformats\qgif4.dll"
    PySideDir = (os.path.join(os.path.dirname(PySide.__file__),"plugins"))
    
    shortcut_table = [
        ("App Shortcut",                 # Shortcut
         "ProgramMenuFolder",            # Directory_
         "MyPySideGUI",                  # Name
         "TARGETDIR",                    # Component_
         "[TARGETDIR]MyPySideApp.exe",   # Target
         None,                           # Arguments
         None,                           # Description
         None,                           # Hotkey
         None,                           # Icon
         None,                           # IconIndex
         None,                           # ShowCmd
         'TARGETDIR'                     # WkDir
         )
    ]
    
    build_exe_options = {
        "include_files" : ["documentTemplate.html", "loading.gif", (os.path.join(PySideDir,QGifRelDir), QGifRelDir)],
        "packages" : ["CustomHelperPackage", "AnotherCustomPackage", "MyPySideGui"],
        "includes" : ["PySide"],
        "excludes" : ["tkinter"],
        'optimize': 2,
    }
    
    # Now create the table dictionary
    msi_data = {"Shortcut": shortcut_table}
    
    # Change some default MSI options and specify the use of the above defined tables
    bdist_msi_options = {'data': msi_data}
    
    executables = [ Executable("MyPySideGui.py", base = base) ]
    
    setup(
        name = "MyFirstPySideApplication",
        version = str(MyPySideGui.version),
        description = "MyPySideApp.exe Demonstrates PySide guis.",
        options = {
            "build_exe": build_exe_options,
            "bdist_msi": bdist_msi_options
        },
        executables = executables
    )
    

    这个例子对你来说可能有点复杂,但你可以在 cx_freeze 项目主页上找到更简单的例子。

    我没有收到您或其他答案遇到的问题,但是我正在使用 Python 3.3.1 和 PySide 1.1.2。

    【讨论】:

    • 我实际上解决了将.py转换为.ui文件的问题。似乎distribute 在安装 PySide 后不知何故停止工作。您能否举例说明如何使用 cx_freeze 指定包含?我一直在使用cx_freeze-quickstart 存在的批处理文件。它没有提供太多选择,我无法理解 cx_freeze wiki 的解释。
    • 更新了问题。我认为这与上次发生的问题相同。
    • 明天我将发布我与 cx_freeze 一起使用的构建脚本。
    • 使用构建脚本更新了答案。
    【解决方案4】:

    PySide 1.2.1 已发布。它已修复错误。我通过安装新版本并使用 cx_freeze 来检查它。

    在 Windows 7(64 位)上与 Python 3.3.2(32 位)和 PySide 1.2.1(32 位)一起使用 cx_freeze 4.3.1(Python 3.3 的 32 位版本)打包时没有错误.我使用问题中写的命令来打包它。它成功了。

    【讨论】:

      猜你喜欢
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 2012-01-06
      • 1970-01-01
      • 2015-03-05
      • 1970-01-01
      • 2012-12-04
      相关资源
      最近更新 更多