wxPython - 使用filedialog更新textctrl

时间:2015-11-25 19:26:11

标签: python user-interface wxpython wxwidgets

我正在尝试创建一个基本对话框来编辑设置文件。我有一些必要的文件列表

options = ["dog", "cat", "chicken"]

然后我有一个列,其中包含StaticText中的选项名称和一列TextCtrl来输入文件位置。每个TextCtrl旁边都是一个"选择文件"按钮。

如何让每个按钮选择一个文件,然后用位置更新TextCtrl?目前,我遍历选项列表以生成文本和按钮。我知道如果我要手动定义所有内容,我可以为每个按钮添加一个独特的处理程序来更新相应的TextCtrl,但我觉得有更好的时候。我希望它可以修改,所以我可以在选项列表中添加一个选项,并添加另一行选项。

目前我将每个按钮绑定到self.OnSelect,但我不确定如何使用它来更新正确的TextCtrl。重申我知道如何使用FileDialog,我只是遇到麻烦将每个按钮绑定到相应的TextCtrl。

selectBtn = wx.Button(self, wx.ID_FILE, label="Select File")
selectBtn.Bind(wx.EVT_BUTTON, self.OnSelect)

我应该使用唯一ID而不是使用wx.ID_FILE吗?

我对GUI设计相对较新,所以任何帮助都表示赞赏。即使你认为我做的事情可能很难看,而其他事情会更好,请告诉我

1 个答案:

答案 0 :(得分:0)

我的回答来自这里:wxPython how to put a text in TextCtrl with a button inserted by "Add" Button

通过使用lambda创建匿名函数,解决方案非常简单。您可以拥有一个处理程序,例如:

def OnSelect(self, event, ctrl):
    name, path = selectFile() #gets name and path using FileDialog
    ctrl.SetValue(path)

按钮可以绑定为

selectBtn = wx.Button(self, wx.ID_FILE, label="Select File")
selectEvent = lambda event, ctrl=txt: self.OnSelect(event, ctrl)
selectBtn.Bind(wx.EVT_BUTTON, selectEvent)

像魅力一样。