2

我在这里尝试做的是从 wxPython 框架应用程序中选择多个文件,然后在同一个 wxPython 应用程序的另一个函数中利用这些文件路径。我意识到我可以使用以下代码来选择多个文件:

def OnOpen(self,e)
   dialog = wx.FileDialog(self, "Choose a file", "", "", "*.", wx.MULTIPLE)
   if dialog.ShowModal() == wx.ID_OK:
      filelist = dialog.GetPaths()

所以'filelist'变量现在是用户选择的文件列表。但是,我似乎找不到在另一个函数中使用此列表的方法。我希望我可以在另一个函数中的这个函数中使用 return 语句并将其分配给一个变量,但它似乎不允许我这样做。我想这是因为我有一个按钮事件已经在使用这个函数。对此的任何帮助将不胜感激。

4

2 回答 2

4

我不认为我完全理解这里的问题。该OnOpen函数是按钮单击的事件处理程序?所以它在单击按钮时执行。一个窗口应用程序(比如你使用 wxPython 的)通常是事件驱动的,它响应像按钮点击这样的事件。主 GUI 线程循环并分析可由您的应用程序处理的事件。因此,当您编写应用程序时,这些事件处理程序是您想要执行的操作的入口点。

我认为最好的方法就是使用其他函数并传入filelist参数,例如:

def OnOpen(self,e)
   dialog = wx.FileDialog(self, "Choose a file", "", "", "*.", wx.MULTIPLE)
   if dialog.ShowModal() == wx.ID_OK:
      filelist = dialog.GetPaths()
      self.otherFunc(filelist)

def otherFunc(self, filelist):
   "do something here"

保存filelist到属性有时可能会出现问题。正如我所说,您可能有多个想要使用filelist属性的入口点,您必须预测可能出现的问题。但正如我在一开始所说的那样——我可能还没有完全理解你的问题。

另一种可能性:也许你的问题是你想实际重用OnOpenNone第一种可能性是作为参数传递,因为e未使用。另一种更好的可能性是OnOpen不带e参数定义并将事件绑定更改为self.Bind(wx.EVT_BUTTON, self.OnButtonwx.EVT_BUTTON(<some object>, lambda evt: self.OnOpen()). 你在这里明确地说你不需要这个evt论点。

于 2012-05-09T20:15:56.277 回答
1

将列表作为属性放在 self 中,还是将 self 作为属性包含一个获取路径的侦听器,或者调用另一个函数,将路径作为参数提供给它?

于 2012-05-09T20:02:23.067 回答