1

私は独自のクラスを持つノートブックを持っています。そのノートブックにはチェックボタンがあります。そのチェックボタンをバインドしようとしていますが、別のクラスにある別のパネルに静的テキストが表示されます。

元。

class ButtonPage(wx.Notebook)
    def __init__(etc.....):
        but_img = wx.Bitmap('./button.png',wx.BITMAP_TYPE_PNG)
    self.but_img = wx.StaticBitmap(self,bitmap=but_img,pos=((10,170)),style=wx.NO_BORDER)

class PanelPage(wx.Frame)
    def __init__(etc....)
    self.mainPanel = wx.Panel(self,etc....)

では、このボタンを「ボタンページ」にバインドして、2つの別々のクラスにある場合に、PanelPageに静的テキストを表示するにはどうすればよいですか。私はボタンの親(自己)を作成することに慣れていますが、この例のように見ると、そうすることは意味がありません...。

編集:わかりました、私は実際にそれを理解しました。しかし、何らかの理由でwx.StaticTextはEVT呼び出しに応答しません。これがなぜであるかについて何か考えはありますか?それを回避する方法は?

4

2 に答える 2

0

何が欲しいのかわかりません。StaticTextは単なるラベルです。ユーザーはラベルを操作しないため、このウィジェットのイベントは実際にはありません。ラベルが表示されている画面のセクションにいくつかのマウスイベントをバインドできる場合がありますが、それだけだと思います。

wxPythonの2つのクラスを相互に通信させる良い方法は、pubsubを使用することです。これがあなたのためのチュートリアルですhttp://www.blog.pythonlibrary.org/2010/06/27/wxpython-and-pubsub-a-simple-tutorial/

編集:ノートブックに表示されるページを変更するには、ノートブックのSetSelection()メソッドまたはChangeSelectionメソッドを使用する必要があります。両方のパネルが同じノートブックにあると仮定すると、ページを変更するためにノートブックインスタンスを呼び出すだけです。これは、pubsubがなくても機能するはずです。

ただし、ノートブック以外のことについて話している場合は、pubsubメソッドが最適です。

于 2012-06-25T14:42:32.573 に答える
0

ちょっと汚い解決策として、たとえばinitメソッドを介してStaticTextへの参照を「ボタンページ」に渡すことができます。次に、ボタンページクラスのメソッドをEVT_BUTTONイベントにバインドして、を呼び出すことができますSetLabel。そこからのラベル。

ただし、もう少し良い解決策は、ButtonPageとPanelPagesがノートブックの兄弟であるという音によって、親レベルでこれを行うことです。したがって、ノートブッククラスからButtonPageのボタンをバインドし、上記と同じメソッドを使用できます。 。兄弟のオブジェクト/メソッドの参照を渡すよりも、親にこれを実行させる方が少し良いです。

小さなプロジェクトで、何かをすばやく機能させる必要がある場合は、これについて言及したいと思いました。

あるいは、Mikesのソリューションは、セットアップして理解するためにもう少し作業が必要です(ただし、それだけの価値はあります)。それはより読みやすく、上記のソリューションを使用すると、コードがかなり「結合」され、将来状況が変化した場合、解きほぐすのが少し面倒になります。

于 2012-06-25T16:10:44.307 に答える