为GUI开发设置PySide / Qt

时间:2013-07-22 12:15:06

标签: python qt user-interface pyside

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

PySide-1.2.0.win32-py3.3.exe 

我从here获取并已安装

qt-win-opensource-4.8.5-vs2010

我从here开始。

我使用.py as is explained in PySide Wiki.ui个文件(我使用QtDesigner制作)生成了pyside-uic.exe个文件。

当我使用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执行正常。

4 个答案:

答案 0 :(得分:5)

此错误:

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

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

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

答案 1 :(得分:1)

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

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

是的,您可以将cx_freeze与PyQt / PySide一起使用,您需要在构建选项的“includes”项中包含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。

答案 2 :(得分:1)

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

答案 3 :(得分: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位版本)打包时没有错误。我使用问题中写的命令来打包它。它运作成功。