0

wxpythonでは、イベントハンドラーごとに個別の関数を作成してイベントを処理する方が良いですか(ボタンクリックごとに個別の関数を作成します)、または大きなbutton_handlerを1つ作成して、そこからクリックされたボタンを決定しますか?

基本的に、個別のものごとに多くの異なるイベントを監視する方がリソースを集中的に使用するのか、それとも、発生したときにどれがクリックされたかを把握する 1 つの大きなイベントだけを使用するのか、疑問に思っています。

4

3 に答える 3

2

ここではリソースの集中度は問題ではありませんが、これには 1 つの大きなイベント ループを使用することをお勧めします。Global Interpreter Lock により、Python の多くのイベント ハンドラーはイベント キューを処理する厄介な方法を持っており、一部のイベント ハンドラーでは、スタックからイベントを削除せずにイベントをチェックすることさえ不可能な場合があります (たとえば、VPython)。このような場合、コード内で複数のチェックを使用すると、奇妙で​​追跡が困難なエラーが発生する可能性があります。1 つの大きなイベントを使用する場合、これは発生しません。発生した場合でも、追跡がはるかに簡単になります。

Ravenspoint の言うとおり、どちらのアプローチでもリソースの強度は些細なものであり、リソースの強度だけに基づいて考える必要はありませんが、単一のイベント ループの方が保守がはるかに簡単です。

于 2012-07-09T17:14:07.883 に答える
2

ご心配なく。どちらのスキームにも必要なリソースは、特に python スクリプトでは些細なものです。理解しやすく保守しやすい方法でコードを設計することに重点を置いてください。

于 2012-07-09T16:52:12.283 に答える
1

根本的に異なることを行う 3 つのボタンがある場合、デバッグしやすいので、それぞれに異なるイベント ハンドラーが必要です。わずかに異なる書式設定オプションが適用されたすべての印刷ボタンである場合は、それらすべてを同じハンドラーに接続し、event.GetEventObject() を使用して、どちらが呼び出されたかを特定します。同じハンドラーによって複数のイベントが処理されたのは、ツールバー ボタンとメニュー項目の両方が同じものを呼び出す場合でした。それは、プログラムの流れとデバッグのしやすさにもっと関係があり、それはただ練習するだけです。

于 2012-07-09T19:10:57.477 に答える