wxPython如何将文本放入textcrl中,并使用“添加”按钮插入按钮

2024-10-03 09:18:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用wxPython来构建一些GUI。。。的确,这不是一个简单的程序…
许多用户输入和输出将被生成。。。在

程序的一部分我放了一个“Add”按钮,它将动态地添加一个textcrl字段和一个“Open”按钮来打开一个文件。单击“打开”后,用户可以选择一个文件,因此文件路径显示在textcrl字段中。在

实际上,用一个简单的例子(一个textcrl一个按钮)我就可以处理它…
但在动态的方式下,放几个textcrl和几个按钮我不知道如何处理它。。。在

在下面的代码中(只有一小部分,有些东西不应该在那里),我放了一个“def OpenReadFile”,正如你在“Open”按钮点击后看到的那样,它会把文本放在最后一个文本ctrl不在相应的字段中。。。有什么想法吗?在

换句话说。。。想象一下: 添加(用户可以添加“n”个样本)

"TEXT-1" 'BUTTON-1'
"TEXT-2" 'BUTTON-2'
"TEXT-3" 'BUTTON-3'

我的代码到目前为止(确实我知道错误在哪里,我只是不知道d0是什么)=[

^{pr2}$

我很确定我必须在OpenReadFile=]中做一些事情

已编辑

我之前放了一个dict,得到了按钮ID和textcrl将它放入dict并完成了操作。在

my_dict = {}
self.sampleTextCtrl = wx.TextCtrl(self, wx.NewId(), "", size = (200,-1))
value = self.sampleTextCtrl
buttonId = wx.NewId()
self.buttonF = wx.Button(self, buttonId, label = "Select File")

mydict[buttonId] = value

完成


Tags: 文件代码text用户self程序动态button
1条回答
网友
1楼 · 发布于 2024-10-03 09:18:29

使用字典当然是一种方法。另一种方法是使用Python的lambda语句将paired text控件传递给打开文件对话框的函数。通过这样做,您可以使用文本控件实例来设置对话框中的值。下面的代码演示了这个概念:

import wx

########################################################################
class MyPanel(wx.Panel):
    """"""

    #                                   
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        self.mainsizer = wx.BoxSizer(wx.VERTICAL)

        add_btn = wx.Button(self, label="Add")
        add_btn.Bind(wx.EVT_BUTTON, self.onAdd)
        self.mainsizer.Add(add_btn, 0, wx.ALL, 5)

    #                                   
    def onAdd(self, event):
        """"""
        gen_sizer = wx.BoxSizer(wx.HORIZONTAL)

        txt = wx.TextCtrl(self, size=(600, -1))
        gen_sizer.Add(txt, 0, wx.ALL, 5)

        browse_btn = wx.Button(self, label='Browse')
        browse_evt = lambda evt, ctrl=txt: self.onBrowse(evt, ctrl)
        browse_btn.Bind(wx.EVT_BUTTON, browse_evt)
        gen_sizer.Add(browse_btn, 0, wx.ALL, 5)
        self.mainsizer.Prepend(gen_sizer, 0, wx.ALL, 5)
        self.mainsizer.Layout()


    #                                   
    def onBrowse(self, event, ctrl):
        """"""
        wildcard = "Python source (*.py)|*.py|" \
            "All files (*.*)|*.*"
        dlg = wx.FileDialog(self, message="Choose a file",
                            defaultFile="", wildcard=wildcard,
                            style=wx.OPEN | wx.CHANGE_DIR)
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()
            ctrl.SetValue(path)
        dlg.Destroy()


########################################################################
class MainFrame(wx.Frame):
    """"""

    #                                   
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title='Dynamic file browser',
                          size=(1024,768))
        panel = MyPanel(self)
        self.Show()

if __name__ == '__main__':
    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()

您可能还想查看以下链接以了解更多信息:

相关问题 更多 >