3

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

PySide-1.2.0.win32-py3.3.exe 

我从这里拿走了,我已经安装了

qt-win-opensource-4.8.5-vs2010

我从这里拿的。

我使用PySide Wiki 中解释的文件(我使用 QtDesigner 创建的)生成.py文件。.uipyside-uic.exe

.py当我使用 Qt5.1/QtCreator 时,制作文件正在工作。当我发现我需要按照Qt-forums 上的说明使用 Qt4.8 时,我停止使用它。对于 Qt4.8,它不起作用。

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

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

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

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


我用了

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 执行得很好。

4

4 回答 4

5

这个错误:

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

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

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

于 2013-07-22T22:33:10.287 回答
1

我正在做类似的事情(但是我正在从 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 一起使用。

于 2013-07-22T15:36:05.953 回答
1

关于 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 发布之前,这可能是一种权宜之计。

于 2013-08-08T09:21:49.660 回答
0

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 位版本)打包时没有错误。我使用问题中写的命令来打包它。它成功地工作了。

于 2013-08-20T09:45:18.170 回答