【问题标题】:Simple example of using wx.TextCtrl and display data after button click in wxpython - new to wx使用 wx.TextCtrl 并在 wxpython 中单击按钮后显示数据的简单示例 - wx 的新手
【发布时间】:2013-02-17 23:58:04
【问题描述】:

我正在学习 python 并尝试使用 wxpython 进行 UI 开发(也没有 UI exp)。 我已经能够创建一个带有面板、按钮和文本输入框的框架。 我希望能够在文本框中输入文本,并在单击按钮后让程序对输入框中的文本执行操作。我可以得到一些关于如何做到这一点的指导吗?例如,假设我想在面板上显示输入到 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()

【问题讨论】:

    标签: python wxpython


    【解决方案1】:

    要进行任何 GUI 交互,您必须将事件绑定到小部件。您基本上告诉 wxPython 应用程序在发生某些事件(按下按钮)时应该调用哪个方法(事件处理程序)。

    我还会考虑学习 sizer 并将它们用于您的布局。我稍微改变了你的例子。

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

    【讨论】:

      猜你喜欢
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2022-01-27
      • 2018-06-13
      • 1970-01-01
      • 2012-07-30
      相关资源
      最近更新 更多