一般的なQtアプリケーションのオブジェクトは、親子関係で一緒に接続されています。多くの場合、ルートオブジェクトとして機能するトップレベルのメインウィンドウがあり、他のすべてのオブジェクト(ウィジェット、レイアウトなど)はその下の階層に配置されています。
この場合、他のすべてのオブジェクトはself
でアクセスできるので、すべてのGUI関連のプログラムロジックをメインウィンドウクラスに入れるのは非常に自然です。しかし、すべてのGUI関連のロジックを別々のモジュールの関数に入れると、self
は利用できません。その欠けている機能を提供することはあなた次第です。
これを行うための最も明白な方法は、他のモジュールがそれをインポートできるように、アプリケーションを起動するモジュール内のトップレベルウィンドウへの参照を保持するために、次のようになります。また
from app_module import main_window
# my_functions.py
def fill_table():
for row in range(10):
for col in range(10):
item_value = "...."
item = QtGui.QTableWidgetItem()
item.setText(str(item_value))
main_window.table_widget.setItem(row, col, item)
、あなたは彼らは1つのオブジェクトのみ(またはオブジェクトのクラス)で動作するように、すべての機能を再設計し、その後、明示的にインスタンスに渡すことができます。しかし
# my_functions.py
def fill_table(table_widget):
...
、あなたがそれを行うどのような方法、それは難しい方法を確認しますこれはコードを構造化するための「最良の」方法である可能性があります。
ほとんどのGUIアプリケーションは、すべてを1つの機能ユニットにまとめる中央コントローラ/マネージャとともに、より多くの独立した機能を果たすいくつかの大きなサブコンポーネントで構成されています。サブコンポーネントは通常ウィジェットサブクラス(おそらく別々のモジュールにあります)であり、コントローラ/マネージャとしても機能するメインウィンドウの子になります。これらの行に沿ってコードを整理することは、Qtが動作するように設計されている方法に沿ったものであり、アプリケーションのさまざまな部分間の潜在的な通信問題の大部分を自動的に回避します。
必要に応じて関数を新しいファイルに書き換えて、メインスクリプトから呼び出すことができます。 –