2013-02-17 7 views
9

私はPythonを学び、UI開発のためのwxpythonを試しています。 私は、パネル、ボタン、およびテキスト入力ボックスでフレームを作成することができました。 ボタンをクリックすると、テキストボックスにテキストを入力して、ボックスに入力したテキストに対してプログラムが処理を実行できるようにしたいと考えています。これを行う方法についていくつかの示唆を得ることができますか?たとえば、パネルにwx.TextCtrlコントロールに入力されたテキストを表示したいとします。どうすればいいですか?wx.TextCtrlを使用し、wxpythonでボタンをクリックした後にデータを表示する簡単な例 -

import wx 
class ExamplePanel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     self.quote = wx.StaticText(self, label="Your quote :", pos=(20, 30)) 

     # A button 
     self.button =wx.Button(self, label="Save", pos=(200, 325)) 

    self.lblname = wx.StaticText(self, label="Your name :", pos=(20,60)) 
    self.editname = wx.TextCtrl(self, value="Enter here your name", pos=(150, 60), size=(140,-1)) 


app = wx.App(False) 
frame = wx.Frame(None) 
panel = ExamplePanel(frame) 
frame.Show() 
app.MainLoop() 

答えて

15

GUIの操作を行うには、イベントをウィジェットにバインドする必要があります。基本的にwxPythonアプリケーションに、イベント(ボタン押下)が発生したときに呼び出されるメソッド(イベントハンドラ)を指定します。

また、サイザーを学習してレイアウトに使用することも考えています。あなたの例を少し変えました。

import wx 
class ExampleFrame(wx.Frame): 
    def __init__(self, parent): 
     wx.Frame.__init__(self, parent) 

     self.panel = wx.Panel(self)  
     self.quote = wx.StaticText(self.panel, label="Your quote:") 
     self.result = wx.StaticText(self.panel, label="") 
     self.result.SetForegroundColour(wx.RED) 
     self.button = wx.Button(self.panel, label="Save") 
     self.lblname = wx.StaticText(self.panel, label="Your name:") 
     self.editname = wx.TextCtrl(self.panel, size=(140, -1)) 

     # Set sizer for the frame, so we can change frame size to match widgets 
     self.windowSizer = wx.BoxSizer() 
     self.windowSizer.Add(self.panel, 1, wx.ALL | wx.EXPAND)   

     # Set sizer for the panel content 
     self.sizer = wx.GridBagSizer(5, 5) 
     self.sizer.Add(self.quote, (0, 0)) 
     self.sizer.Add(self.result, (0, 1)) 
     self.sizer.Add(self.lblname, (1, 0)) 
     self.sizer.Add(self.editname, (1, 1)) 
     self.sizer.Add(self.button, (2, 0), (1, 2), flag=wx.EXPAND) 

     # Set simple sizer for a nice border 
     self.border = wx.BoxSizer() 
     self.border.Add(self.sizer, 1, wx.ALL | wx.EXPAND, 5) 

     # Use the sizers 
     self.panel.SetSizerAndFit(self.border) 
     self.SetSizerAndFit(self.windowSizer) 

     # Set event handlers 
     self.button.Bind(wx.EVT_BUTTON, self.OnButton) 

    def OnButton(self, e): 
     self.result.SetLabel(self.editname.GetValue()) 

app = wx.App(False) 
frame = ExampleFrame(None) 
frame.Show() 
app.MainLoop() 
関連する問題