2013-02-17 19 views
9

Uczę się Pythona i wypróbuję wxpython dla rozwoju interfejsu użytkownika (nie mam również interfejsu użytkownika). Udało mi się utworzyć ramkę z panelem, przyciskiem i polem wprowadzania tekstu. Chciałbym móc wprowadzić tekst w polu tekstowym i zlecić programowi wpisanie tekstu w polu po kliknięciu przycisku. Czy mogę uzyskać jakąś wskazówkę, jak to zrobić? na przykład, powiedzmy, że chcę wyświetlić tekst wprowadzony do kontrolki wx.TextCtrl na panelu. Jak to zrobić?Prosty przykład użycia wx.TextCtrl i wyświetlania danych po kliknięciu przycisku wxpython - nowy do wx

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() 

Odpowiedz

15

Aby wykonać dowolne interakcje z graficznym interfejsem użytkownika, należy powiązać zdarzenia z widżetami. Zasadniczo mówisz aplikacji wxPython, która metoda (procedura obsługi zdarzenia) powinna zostać wywołana, gdy pojawi się jakieś zdarzenie (naciśnięcie przycisku).

Chciałbym również rozważyć naukę rozmiarów i wykorzystanie ich do układów. Zmieniłem trochę twój przykład.

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()