wxPython - 使用 filedialog 更新 textctrl

wxPython - Using filedialog to update a textctrl

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

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

然后我在 StaticText 中有一列包含选项名称,在一列 TextCtrl 中输入文件位置。每个 TextCtrl 旁边都有一个 "Select File" 按钮。

如何让每个按钮 select 成为一个文件,然后用位置更新 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 设计还比较陌生,所以非常感谢您的帮助。即使您认为我正在做的事情可能很丑陋而其他事情会更好,请告诉我

我的答案来自这里: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)

很有魅力。