wxPython中wx.TextCtrl的简单示例及按钮点击后的数据显示 - wx新手
我正在学习Python,并尝试使用wxPython来开发用户界面(我也没有用户界面的经验)。我已经能够创建一个框架,里面有一个面板、一个按钮和一个文本输入框。我希望能够在文本框中输入文字,然后在我点击按钮后,程序能对输入的文字进行处理。请问我该怎么做呢?比如说,我想在面板上显示输入到wx.TextCtrl控件中的文字,我该怎么实现呢?
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()
1 个回答
24
要进行任何图形界面(GUI)的操作,你需要把事件绑定到控件上。简单来说,就是告诉wxPython应用程序,当某个事件(比如按钮被按下)发生时,应该调用哪个方法(事件处理函数)。
我还建议你学习一下布局管理器(sizers),并在你的界面布局中使用它们。我对你的例子做了一些修改。
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()