如何动态创建文本Ctrl框



有没有办法通过单击按钮动态创建textCtrl框?所以我计划构建一个 GUI,其中我提供一个 TextCtrl 框供用户默认输入一个值。但是如果用户想要再输入一个值,应该有一个"+"或添加按钮,用户可以在其中创建,以便程序可以动态地创建一个额外的 textCtrl 框并将其显示在 GUI 中,以便用户可以在新创建的 TextCtrl 框中输入他们的输入!

提前感谢!

这实际上很容易。这里有一种方法可以做到这一点:

import wx
########################################################################
class MyPanel(wx.Panel):
    """"""
    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)
        self.mainSizer = wx.BoxSizer(wx.VERTICAL)
        self.txtSizer = wx.BoxSizer(wx.VERTICAL)
        txt = wx.TextCtrl(self)
        self.txtSizer.Add(txt, 0, wx.EXPAND|wx.ALL, 5)
        self.mainSizer.Add(self.txtSizer, 0, wx.EXPAND, 5)
        add_btn = wx.Button(self, label="Add")
        add_btn.Bind(wx.EVT_BUTTON, self.onAdd)
        process_btn = wx.Button(self, label="Process")
        process_btn.Bind(wx.EVT_BUTTON, self.onProcess)
        self.mainSizer.Add(add_btn, 0, wx.ALL, 5)
        self.mainSizer.Add(process_btn, 0, wx.ALL, 5)
        self.SetSizer(self.mainSizer)
    #----------------------------------------------------------------------
    def onAdd(self, event):
        """"""
        self.txtSizer.Add(wx.TextCtrl(self), 0, wx.EXPAND|wx.ALL, 5)
        self.mainSizer.Layout()
    #----------------------------------------------------------------------
    def onProcess(self, event):
        """"""
        children = self.txtSizer.GetChildren()
        for child in children:
            widget = child.GetWindow()
            if isinstance(widget, wx.TextCtrl):
                print widget.GetValue()

########################################################################
class MyFrame(wx.Frame):
    """"""
    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Dynamic")
        panel = MyPanel(self)
        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()

作为奖励,我还展示了如何从文本控件中获取信息。请注意,添加文本控件时,Tab 键顺序会出错。

相关内容

  • 没有找到相关文章

最新更新