2012-02-27 25 views
1

私はGUIを作成するためにPythonを使用しようとしています。私はwxPythonをダウンロードし、 "こんにちは世界"のウィンドウを作った。しかし、私は自分のコードが少し異なるコードの例であることを発見しました。特に、他の例でGUIを作成したい場合は、wxライブラリを継承していますが、そうではありませんが、私のクラスと他のクラスの違いは何ですか?継承、Python、wxWidget

私のソースコード:

import wx 
class Window(): 
    def init (self, parent, id, windowname): 
     mywindow = wx.Frame (parent, id, windowname) 
     mywindow.Show(True) 
     return True 

app = wx.App(False) 
wind = Window() 
wind.init(None, wx.ID_ANY, "windowname") 
t.oninit("Hello World" , "watch") 
app.MainLoop() 

ブックからのサンプルソースコード:

import wx 
class App(wx.App): 
    def OnInit(self): 
     frame = wx.Frame(parent=None, title='Bare') 
     frame.Show() 
     return True 

app = App() 
app.MainLoop() 

答えて

1

wx.Appクラスは、アプリケーションが初期化されたときに呼び出されるOnInit()と呼ばれる方法があります。 2番目のコードチャンクは、そのメソッドをカスタムコード、つまりフレームを表示するコードでオーバーライドします。

あなたのコードではこれが行われていないため、問題が発生している可能性があります。

1

これをウィンドウと呼んでも問題ありません。

wxクラスから継承すると、既存のすべての機能が得られます。この例では、Appクラスはwx.Appクラスの構造と動作をすべて継承しています。つまり、既に多くのことを起動方法、入力イベントの処理方法、通知されたときのシャットダウン方法など)。

あなたのfrom-scratchクラスは何も継承しません。あなたが定義したもの以外のロジックはありません。実際にはウィンドウのように動作するには不十分です。

2

これはそれを行うための正しい方法である:他の人が言ったように

import wx 
class Window(wx.Frame): 
    def __init__ (self, parent, id, windowname): 
     mywindow = wx.Frame (parent, id, windowname) 
     mywindow.Show(True) 


app = wx.App(False) 
wind = Window(None, -1, "windowname") 
app.MainLoop() 

、クラスのインスタンス「ウィンドウ」を命名することは何を意味します。あなたはそれを正しく行うためにwx.Frameからサブクラス化する必要があります。実際には、後で混乱させるかもしれない "wx.Window"と呼ばれるより高いレベルのウィジェットが実際にあるので、私はそれを "Window"と呼んでいません。

あなたはzetcode wxPythonのチュートリアルを経る必要があります:あなたはまた、唯一の子としてwx.Panelインスタンスを追加する必要がありますhttp://www.blog.pythonlibrary.org/

http://zetcode.com/wxpython/と多分wxPythonをデモ、ウィキやブログでの例のいくつかをチェックアウトすべてのシステムで正しく見えるようにし、ウィジェット間のタブ移動を有効にします。

+0

+1:適切な説明とこれを行う方法の表示 – tom10