さて、私はあなたが2つの現実的なことのいずれかを行うことができると思います:
- pyside-uicを使用して .ui ファイルを .py ファイルにコンパイルし、コードを変更して、ユーザー インターフェイス用に py ファイルの条件付き読み込みを行い、png ファイルを Qt リソース ファイルに配置します。
- その中にuiファイルを含むQtリソースファイルを作成し、それをpyside-rccでコンパイルしてから、QtUiToolsまたは同様のプロセスを使用してuiファイルをロードします
pyside-uic
pyside-uic
C++ での Qt の知識と相関するプログラムに ui ファイルをロードする最も簡単な方法であるため、ui ファイルをロードする方法を使用することを非常に好みます。pyside-uic
は PySide アプリケーションに含まれており、私にとっては、Python インストールの Scripts ディレクトリにありますC:\Python27\Scripts\pyside-uic.exe
。C++ コンパイルが ui ファイルを処理する方法からメモを取ると、通常、ui ファイルを ui_[ui ファイルの名前].py のような名前にコンパイルします。
C:\Python27\Scripts\pyside-uic mainwindow.ui > ui_mainwindow.py
その結果の .py ファイル内で、pyside-uic は、Ui_ を前に付けた ui ファイルの基本クラスと同じ名前のクラスを作成します。したがって、たとえば、MainWindow という名前のクラスの定義を含む mainwindow.ui を作成した場合、作成されるクラスは Ui_MainWindow になります。ui ファイルで SourceWindow という名前のクラスが定義されている場合、.py ファイル内のクラスは Ui_SourceWindow. objectName
Qt Designerでは、オブジェクト ツリーのルート要素 (ウィンドウの右上) に設定することで、クラス名を設定します。
ファイル cafeteria_menu,ui および dialog_login.ui を使用すると、派生クラス Ui_cafeteria_menu および Ui_dialog_login を取得できます。
.py ファイルを生成したら、それをウィジェットの定義ファイルにインポートして使用し、Ui ファイルのクラスの setupUi メソッドを使用して使用できます。
from PySide import QtCore, QtGui
from ui_mainwindow import Ui_MainWindow
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
クラスの ui を定義したら、ウィジェットのすべての接続と ui 要素に self.ui からアクセスする必要があります。
self.ui.lineEdit.textChanged[str].connect(self.processText)
.png ファイルを Qt リソース ファイルに配置する必要があるため、それについては次のセクションで説明します。
pyside-rcc
Likepyside-uic
はpyside-rcc
PySide アプリケーションに含まれていますが、私のものは Scripts ではなく Python の site-packages ディレクトリにあります (同じ場所にある場合は、いつでもコピーできます)。
C:\Python27\lib\site-packages\PySide\pyside-rcc.exe
Qt リソース ファイルをコンパイルする前に、まず Qt ツールの 1 つを使用して作成する必要があります。Qt Creator は、Qt に関連するほぼすべての機能を 1 つのアプリケーションで実行できるため、Qt Creator を使用しています。Qt リソース システムのドキュメントによると、リソース ファイルは実際には、リソース システムのファイル パスと内部パスを定義する単なる XML ファイルです。必要に応じてファイルを設定および編成できますが、コンパイルに関しては、リソース ファイルで定義されたすべてのファイルが同じディレクトリまたはファイルのサブディレクトリにある必要があります。リソース ファイルを定義したら、pyside-rcc.exe を使用して .py ファイルにコンパイルする必要があります。通常、リソース ファイルにはプロジェクトと同じ名前を付け、すべてを 1 つのリソース ファイルにまとめて、リソースをより簡潔に処理できるようにします。
C:\Python27\lib\site-packages\PySide\pyside-rcc.exe -py2 MyProject.qrc > MyProject_Resources.py
-py2 スイッチは、ファイルからの出力を Python 2.x 用にフォーマットする必要があることを定義します。Python 3.x を使用している場合、または将来使用する予定がある場合は、-py3 スイッチを使用すると、結果は Python 3.x と互換性があります。
すべてを一緒に入れて
既に ui ファイルを直接ロードしているためQUiLoader
、QUiLoader ステートメントをリファクタリングして、リソース システムから ui リソースを開く QFile をロードするだけです。リソース システムのファイルを使用するには、pyside-rcc から生成された Resource .py ファイルをプログラムのメイン スクリプト ファイルにインポートするだけです。リソース ファイルの最後の行は、プログラム全体で使用されるリソースを初期化する qInitResources()。QFile を使用してファイルをロードするには、「:」で始まるパスを使用し、リソース ファイルで定義されたパスを参照します。サブカテゴリとして定義された ui ファイルと png ファイルを持つ ui と images を持つファイル msResources.qrc を作成できます。
したがって、リソースファイルが次のようになっている場合
/ui
cafeteria_menu.ui
dialog_login.ui
/images
cafeteria-menu.png
exit.png
logo.png
mail-fetch.ong
そして、これらのファイルをロードしたい場合は、次のように QIcon または QFile を作成するだけです:
cafeteriaMenuIcon = QtGui.QIcon(":/images/cafeteria-menu.png")
cafeteriaMenuUi = QtCore.QFile(":/ui/cafeteria_menu.ui")
msCafeteriaMenu の GUICafeteriaMenu のコードで使用する場合、GuiCafeteriaMenu の__init__
メソッドを変更して、リソースから ui ファイルをロードして使用するだけです。
uiFile = QFile(":/ui/cafeteria_menu.ui")
uiFile.open(QFile.ReadOnly)
UiLoader.load(uiFile, self)
uiFile.close()
おそらく、pyside-rcc から metsuite_libs パッケージへの出力を msResources.py のようなものに配置し、msResources ファイルを__init__.py
パッケージの一部としてファイルにインポートします。そうすれば、.py ファイルを作成してプログラムにインポートすると、余分なファイルがパッケージにカプセル化され、setup.py ファイルを変更する必要がなくなります。py2exe 変換を行う前に、リファクタリングされたプログラムを実行すると、正常に動作するはずです。さらに、ui ファイルの処理方法に関係なく、常にリソース ファイルを使用して、アイコンをプログラムにパッケージ化できるようにする必要があります。移植性の理由から、アイコンにリソース ファイルを使用することは、おそらく慣れるには良い習慣です。