2010-12-14 3 views

答えて

1

ドキュメントをお読みください。この特定のケースでは、http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#pyuic4

The pyuic4 utility is a command line interface to the uic module. The command has the following syntax: 

pyuic4 [options] .ui-file 

The full set of command line options is: 
-h, --help A help message is written to stdout. 
--version The version number is written to stdout. 
-i N, --indent=N 
    The Python code is generated using an indentation of N spaces. If N is 0 then a tab is used. The default is 4. 
-o FILE, --output=FILE 
    The Python code generated is written to the file FILE. 
-p, --preview The GUI is created dynamically and displayed. No Python code is generated. 
-w, --pyqt3-wrapper 
    The generated Python code includes a small wrapper that allows the GUI to be used in the same way as it is used in PyQt v3. 
-x, --execute The generated Python code includes a small amount of additional code that creates and displays the GUI when it is executes as a standalone application. 
--from-imports Resource modules are imported using from . import rather than a simple import. 
+2

おかげで、PySideはPyQtは – ArtDijk

+1

D'オハイオ州のように動作しているようです!完全にPySideビットを見逃してしまった。幸運にも、PyQt4は多くのことを正しく行い、PySideはそれほど変更する必要はありませんでした:) – delnan

2

QUiLoaderクラスには、中間ファイルを作成せずに仕事を行います。そのようなmanページを指定するよう

http://www.pyside.org/docs/pyside/PySide/QtUiTools/QUiLoader.html

+2

Decemeber 2010 pysideの開発者としては、quiloaderはまだ用意されていません。代わりにpyside-uicを使用してください。 – Neon22

+2

ソース?このポジションは変更されていますか? –

+2

上記のSvenの例で判断すると、これが現在機能しています。 Yay – Neon22

30

pyside-UICは、多かれ少なかれ、同じpyuic4にある:

Usage: 
     pyside-uic [options] <ui-file> 

Options: 
    --version 
     show program's version number and exit 

    -h,--help 
     show this help message and exit 

    -oFILE,--output=FILE 
     write generated code to FILE instead of stdout 

    -x,--execute 
     generate extra code to test and display the class 

    -d,--debug 
     show debug output 

    -iN,--ident=N 
     set indent width to N spaces, tab if N is 0 (default: 4) 

私は通常、このようにそれを使用します。

pyside-uic -o output.py input.ui 
+1

私は通常、次のように使用します(ウィンドウ内): 'pyside-uic.exe useful_filename.ui> useful_filename_ui.py' 次に、この単純な命名規則を使って追跡することができます。 将来私はこれ以上使用しないで、代わりにQUILoaderクラスを使用します(下記の@Svenを参照してください)。 – Neon22

+0

私はpyside-uicとvsを使用してUIコードを作成したいと思っています。 XMLコードでは、実際にどのようにレイアウトされているのか分かりません。だからあなたは動的にQtを自分でコード化する方法に苦労しています。 ** 2nd **:pyにコンパイルすると、pycはあなたのスクリプトを起動するたびにあなたを変更するまで、一度起こります! ** 3rd **:コードから複雑さを払わないでください。それは 'import'とこのローダーの全てのものです!私はそれが本当にもう時間の問題ではないことを知っていますが、私はいつもxmlを "読み込む"ときにたくさんの無駄を感じています。 – ewerybody

4
pyside-uic.exe MyWindow.ui -o MyWindow.py 

は私がやっていることで、それはうまくいきます(私が知る限り)

19

がうまく動作しますが、PysideのQUILoaderを試してみました:

from PySide import QtGui 
from PySide import QtCore 
from PySide import QtUiTools 

class MyWidget(QtGui.QMainWindow): 
    def __init__(self, *args): 
     apply(QtGui.QMainWindow.__init__, (self,) + args) 

     loader = QtUiTools.QUiLoader() 
     file = QtCore.QFile("pyside_ui_qtdesigner_form_test.ui") 
     file.open(QtCore.QFile.ReadOnly) 
     self.myWidget = loader.load(file, self) 
     file.close() 

     self.setCentralWidget(self.myWidget) 

if __name__ == '__main__': 
    import sys 
    import os 
    print("Running in " + os.getcwd() + " .\n") 

    app = QtGui.QApplication(sys.argv) 

    win = MyWidget() 
    win.show() 

    app.connect(app, QtCore.SIGNAL("lastWindowClosed()"), 
       app, QtCore.SLOT("quit()")) 
    app.exec_() 

を私は.uiファイル(モジュールを右クリックし、作成するために、EclipseとQTDesignerを使用し、 "新規作成 - その他> .."、「Qtのデザイナーを選択してください - > Qtデザイナーフォーム)。明示的な呼び出しは必要ありません。

+1

+1良い、完全な例を提供します。しかし、この1つのことで、私は立ち往生しましたが、QFileはこのコードが存在するディレクトリではなく、ファイルパスのパッケージトップディレクトリに向かいました。未来に立ち往生している人のために。 – IsaacS

+3

問題は、loader.loadがオブジェクトを返すことです。しかし、私たちはクラスを取得し、必要に応じてクラスをサブクラス化できます。しかし、loader.loadでは、常にインスタンス化されたオブジェクトを返すので、サブクラス化やカスタマイズは必要ありません。それでも、カスタムウィジェットを読み込むことはできません:このバグを参照してください:https://bugreports.qt-project.org/browse/PYSIDE-77 – Sarim

5
import pysideuic 
import xml.etree.ElementTree as xml 
from cStringIO import StringIO 

def loadUiType(uiFile): 
    """ 
    Pyside "loadUiType" command like PyQt4 has one, so we have to convert the 
    ui file to py code in-memory first and then execute it in a special frame 
    to retrieve the form_class. 
    """ 
    parsed = xml.parse(uiFile) 
    widget_class = parsed.find('widget').get('class') 
    form_class = parsed.find('class').text 

    with open(uiFile, 'r') as f: 
     o = StringIO() 
     frame = {} 

     pysideuic.compileUi(f, o, indent=0) 
     pyc = compile(o.getvalue(), '<string>', 'exec') 
     exec pyc in frame 

     # Fetch the base_class and form class based on their type 
     # in the xml from designer 
     form_class = frame['Ui_%s'%form_class] 
     base_class = eval('QtGui.%s'%widget_class) 

    return form_class, base_class 

あなたはUIをロードするためにこの方法を使用することができますし、また、戻り値の型としてだけでなく、基本クラスをform_class得ることができます...しかし、あなたはしたくない場合は変換する、そうでない場合は、次の正しい方法です。 Cで

pyside-uic.exe MyWindow.ui -o MyWindow.py 
+0

どこから得たのですか?これはPySideパッケージに含まれていないためです。 – Romulus

0

ルック:\ Python27 \ Libの\サイト - パッケージ\ PySideのスクリプトはuic.pyを\(またはあなたが持っているどこにPythonがインストールされている)\。このスクリプトを見ると、マニュアルページ(ウィンドウ上で正しく表示する方法がわからない)のようにラベル付けされたオプションが表示されます。http://manpages.ubuntu.com/manpages/precise/man1/pyside-uic.1.html

私はしばらく混乱していますC:\ Python27 \ Lib \ site-packages \ pysideuic \ pyside-uic.1を見て、呼び出されているファイルでなければならないと考えました。すべての余分な文字のためにマニュアルページとしてそれを見ることは不可能です。どんな文字が余分か、どの文字がそうでないかを推測しようとすると、構文を覚えることはできません!

ウィンドウでは、上記の行(参考のために)にuic_generator.batのような.bat拡張子を持つテキストファイルを保存することで、バッチファイルでこれを自動化できます。

pyside-UIC MyWindow.ui -o MyWindow.py

+0

[windows man page reader](https://stackoverflow.com/a/944571/984421) – ekhumoro

関連する問題