2013-02-17 8 views
9

Sto imparando python e provo wxpython per lo sviluppo dell'interfaccia utente (non ho nemmeno l'interfaccia utente exp). Sono stato in grado di creare una cornice con un pannello, un pulsante e una casella di testo. Vorrei poter inserire del testo nella casella di testo e fare in modo che il programma faccia qualcosa nel testo inserito nella casella dopo aver fatto clic sul pulsante. Posso avere qualche prova su come farlo? per esempio, diciamo che voglio mostrare il testo inserito nel controllo wx.TextCtrl sul pannello .. Come lo farei?Semplice esempio di utilizzo di wx.TextCtrl e visualizzazione dei dati dopo il clic del pulsante in wxpython - nuovo a 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() 

risposta

15

Per eseguire qualsiasi interazione della GUI è necessario associare eventi ai widget. In pratica, dici all'app wxPython quale metodo (gestore di eventi) deve essere chiamato quando si verifica un evento (pulsante premuto).

Vorrei anche prendere in considerazione l'apprendimento di sizers e il loro utilizzo per i layout. Ho cambiato un po 'il tuo esempio.

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