2013-07-22 37 views
3

我一直在試圖設置PySide/Qt與Python3.3一起使用。我已經安裝了設置用於GUI開發的PySide/Qt

PySide-1.2.0.win32-py3.3.exe 

,我從here了,我已經安裝了

qt-win-opensource-4.8.5-vs2010 

,我從here了。

我生成.py文件從文件.ui使用pyside-uic.exeas is explained in PySide Wiki(即我使用QtDesigner製造)。

製作.py文件在我使用Qt5.1/QtCreator時正在工作。當我發現我需要使用Qt4.8 as explained on Qt-forums時,我停止使用它。使用Qt4.8它不起作用。

  • 我想用PySide開發GUI。
  • 我想要一個製作骨架GUI的拖放界面,所以我使用的是QtDesigner。
  • 我在Windows 7

我要打包開發成使用CX-凍結.exe文件的GUI。

我的問題在短期
有什麼用,使.ui與QtDesigner正確的工具?如何將它們轉換爲.py文件以便在Python中使用PySide?

cx_freeze能夠使我的普通文件爲.exe它可以用來將Qt/PySide製作的GUI轉換爲.exe文件嗎? Qt是否需要其他計算機上的GUI分佈的或者它是自包含的?


我用

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文件一樣正常執行。

+0

你可以使用Qt Creator創建你的UI。 –

+0

@Reza但問題是如何在Python中正確使用'.ui'文件。我是否使用pyside-uic將它們轉換爲Python類,還是需要動態加載它們?將結果應用程序轉換爲功能性exe文件需要做些什麼?我通常使用cxfreeze,它可以工作,但帶GUI的exe無法正常工作。我只是難住。 –

+0

我不知道究竟是什麼原因導致你的錯誤,但在Qt中生成相關的.cpp文件的UI,然後在項目中編譯它,花費一些時間在Qt文檔中搜索直接加載'.ui'文件if有可能的。 –

回答

1

認爲FileNotFoundError,我有一個問題打包一個python 3應用程序用這幾天。在Windows 7 64位機器上,它工作得很好。當我在win7 32bit上構建它並試圖運行.exe文件時,我得到了所有這些文件錯誤。看到這個線程後,我檢查了pyside的版本。在win64上它是1.1.2在win32上它是1.2.0 我在win32上卸載了pyside 1.2.0並下載並安裝了1.1.2 win32版本。現在它工作正常。 這可能是一個停止差距措施,直到1.2.1發佈。

1

我正在做類似的事情(但我正在從PyQt遷移到PySide)。

您應該使用pyside-uic在QtCreator中創建UI文件後生成GUI的代碼(如果這是PyQt「pyuic gui.ui> gui.py」會產生所需的代碼,我認爲pyside-uic有類似的行爲)。然後,我將這個生成的代碼子類化以定製用戶界面。

是的,你可以在PyQt/PySide中使用cx_freeze,你需要在構建選項的「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項目主頁簡單的例子。

我沒有得到你或其他答案正在得到的問題,但後來我在PySide 1.1.2中使用Python 3.3.1。

+0

我真的解決了將.py文件轉換爲.ui文件的問題。安裝PySide後,似乎'distribute'不知何故停止工作。你可以舉一個如何使用cx_freeze來指定包含的例子嗎?我一直在使用'cx_freeze-quickstart'批處理文件。它沒有給出太多的選擇,我不明白cx_freeze wiki的解釋。 –

+0

更新了問題。我認爲這是上次發生的同樣的問題。 –

+0

我將在明天發佈我用於cx_freeze的構建腳本。 – Alex

5

此錯誤:

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

將被固定在下一個pyside釋放(1.2.1)。它將在下週發佈。

btw:如果您不想生成自定義綁定,則不需要安裝qt,pyside安裝程序包含所有qt庫和devel工具。

+0

我也曾在qt-forums上聽說過。你能澄清開發工具到底在哪裏嗎?我試圖找到Qt設計師,但是直到我安裝了Qt本身之後纔有人出席。我想要一個用於製作GUI的拖放界面。自定義綁定究竟意味着什麼? –

+1

設計者,語言學家,lrelease,lupdate,pyside-rcc和pyside-lupdate與pyside libs位於同一文件夾中,在我的sustem上,這是路徑c:\ Python27_64 \ Lib \ site-packages \ PySide-1.2.0-py2。 7雙贏amd64.egg \ PySide。自定義綁定是當你想用shiboken爲你的C++類生成python包裝時。 – rlacko

+0

非常感謝。我終於找到了設計師,語言學家等在場的人。我已經安裝了未被阻止的Qt/PySide 3次,並認爲這是一個順序問題。也許有些文件意外地替換了其他文件。我可以等一個星期。你能告訴我PySide社區一般在哪裏?試過QtForums並沒有得到太多。 –

0

PySide 1.2.1發佈。它修復了錯誤。我通過安裝新版本並使用cx_freeze來檢查它。

使用Python 3.3.2(32位)和PySide 1.2.1(32位)在Windows 7(64位)上使用的cx_freeze 4.3.1(32位版本的Python 3.3) )。我使用問題中編寫的命令來打包它。它工作成功。