20

私はPythonが初めてで、PyQT4.7とPython 2.6を使用して(できれば)GUIプログラミングを独学で学び始めています

PyQT Web サイトから PyQT/QT4 パッケージ全体 (QTDesigner を含む) をダウンロードしたところですが、各ウィジェットのすべての属性/プロパティ/デフォルトなどを視覚的に見ることができるため、初心者として使用するには QTDesigner のように見えます。プロパティを編集するのは素晴らしいことですが、PyQT は QTDesigner を PyQT および PyQTs python コード生成スクリプトと直接統合するように設定していないようです:

つまり、「View Code」を押すと、pyuic.py スクリプトの代わりに (uic) という Designer->C++ スクリプトを実行しようとします。

QTDesigner を PyQT と密接に統合して、C++ のようにオンザフライでコードを生成する方法はありますか?

そうでない場合、Python IDE 内で QT GUI 全体をコーディングし、すべてのウィジェットのすべてのドキュメントとボイラープレート コードを検索する必要があるということですか? (QTDesigner + Pythonの統合と比較して、非常に非効率的で洗練されていないようです)。

PyQT で Designer を使用する通常のツールチェーン//プロダクション フローは何ですか? (直接の統合が不可能な場合 -- python+pyQT ユーザーは、QTDesigner の使用をスキップして、Python ですべての QT GUI コードを手動で記述しますか?)

PyQT 初心者向けの追加のヒントや提案をいただければ幸いです。ありがとう!

ps 多くの人が、QT UI をすべて手作業でコーディングするように言うかもしれませんが、上記のように学習中に Designer を使用する場合は、学習できるようにその方法を提供してください。もっと簡単に、ありがとう!

4

4 に答える 4

20

私は最初の PyQT アプリケーションを書き始めました (PyQT は GUI を処理するためだけに使用されます)。良いツールチェーンは、.ui を生成してリソースを処理する QtDesigner と、それらを編集するように QtDesigner を設定できるいくつかの IDE のようです。私はEclipseを使用しています。これは高度にカスタマイズできるためです。アプリケーションの開始時、セットアップ時、またはその他の時点で、次のようにして、必要に応じて .qrc および .ui をコンパイルできます。

os.system("pyrcc4.exe -o ui/images_rc.py ui/images/images.qrc")
uic.compileUiDir(appDir + '/ui', True)

生成されたクラスを次のように使用します。

class MyMainWindow(QtGui.QMainWindow):

    def __init__(self, owner):
        QtGui.QMainWindow.__init__(self)
        # 'Ui_MyMainWindow' is the class, that was generated by uic, 
        # naming convention is: 'Ui_' plus the name of root widget in designer
        self.ui = Ui_MyMainWindow()
        self.ui.setupUi(self)

または、コンテナの初期化時に .ui を直接ロードできます。

    QtGui.QMainWindow.__init__(self)
    self.ui = None
    uic.loadUi('MyMainWindowUI.ui', self.ui)
    #now you have the instance of Ui_MyMainWindow in self.ui too, as above

.ui ファイルの名前に UI サフィックスを追加したことに注意してください。これは、名前の交差を避けるために行われました。これは、uic によって生成された .py ファイルの名前が「Ui_」で始まるクラス名ではなく、ルート ウィジェットの名前であるためです。

もう 1 つの注意: 生成されたファイルの最後に uic は 'import %.qrc name%_rc' (デフォルトでは import images_rc) 文字列を配置するため、pyrcc4 を使用する場合はこれに注意する必要があります。

全体のアプローチは十分に柔軟です。すべてのダミー UI コーディング作業が必要です。ただし、Ui_MyMainWindow のインスタンスが置かれている MyMainWindow.ui 属性で微調整を行うことができます。不要な継承を回避します。個人的には、MyMainWindow に _connectSlots メソッドと _initInterfrace メソッドを作成して、デザイナーができない作業を行います。

それでも、自分でインターフェイス コードを記述するのは良い方法であることに注意する必要があります。これは、uic によって生成されたコードが醜いためです。このため、 loadUi() によって .ui を適切にロードすることを好みます :) そして、カスタム PyQT コントロールがたくさんある場合、それらを QtDesigner に取り込むのは非常に面倒です..

于 2010-03-24T10:27:06.880 に答える
2

私がしたことは、pyuic.py スクリプトのラッパーである独自の uic 実行可能ファイルを作成することでした。

あなたは必要になるでしょう...

  1. py2exeを入手してインストールするには

  2. 以下の uic.py コードの PYTHON_PATH を置き換えます

  3. site-packages\PyQt4 の qt.conf ファイルを編集し、作成後に Binaries=Path を uic exe を含むフォルダーに設定します。

  4. uic.py と setup.py を同じフォルダに入れる

  5. コマンド プロンプトで、setup.py と uic.py があるフォルダーに移動し、次のコマンド「python setup.py py2exe」を実行します。

//----uic.py

#uic.py
import subprocess
import sys

args = ""

for arg in sys.argv: 
    if sys.argv[0] != arg:
        args += arg + " "


# Start pyuic.py script
command = 'python %PYTHON_PATH%\\PyQt4\\uic\\pyuic.py '+ args
out = ''


child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE)
complete = False
while True:
    out = child.stderr.read(1)
    if out == '' and child.poll() != None:
        break
    if out != '':
        sys.stdout.write(out)
        sys.stdout.flush()

//----- setup.py

#setup.py    
from distutils.core import setup
import py2exe

setup(windows=[{"script":"uic.py"}], options={"py2exe" : {"includes" : ["sip", "PyQt4.QtCore"]}})
于 2012-11-19T20:16:49.933 に答える
1

コンソールで、手から実行pyuic(またはむしろ) できます。pyuic4C++ で行う場合と同様に、デザイナーを使用して Python で GUI を作成できます。

ところで、私は自分のアプリ (10k のコード) のすべての GUI を手作業で書きました。何かを微調整する必要があるときに、GUI デザイナーや生成されたコードで作業するのはあまり好きではありません。

于 2010-03-22T18:11:49.100 に答える
0

QtDesigner はuic.exe、オンザフライで C++ コードを生成するために使用します。uic.exeはコマンド ライン ツールであり、入力パラメーターとしてファイル名を取得します。Python と統合するには、 を使用する python プログラムを作成しpyuic.py、その入力をuic.exeの入力 (順序、スイッチなど) と一致させ、(py2exe を使用して) 実行可能ファイルに変換し、実行可能ファイルの名前をuic.exe. 次に、Qtのbinディレクトリにあるuic.exeに置き換えます(私が知っているように、uic.exeはPyQtに存在しません)。uic.exeおよび手書きマクロの入力引数には注意する必要があります (それらは一緒に一致する必要があります)。

あなたのプログラムは(pyuicを使用するために)pythonのパスを知る必要があると思います。Windows を使用している場合は、レジストリからパスを取得できます。

于 2010-08-29T18:15:06.720 に答える