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、考えられる問題を予測する必要があります。しかし、最初に言ったように、私はあなたの問題を完全には理解していなかったかもしれません。

別の可能性:おそらくあなたの問題は、実際に再利用したいということOnOpenですか?None最初の可能性は、が使用されていないため、引数として渡すことeです。もう1つのより良い可能性は、引数OnOpenなしで定義し、イベントバインディングをに変更することです。ここでは、引数は必要ないと明示的に言います。eself.Bind(wx.EVT_BUTTON, self.OnButtonwx.EVT_BUTTON(<some object>, lambda evt: self.OnOpen())evt

于 2012-05-09T20:15:56.277 に答える
1

リストを自分自身の属性として配置するか、自分自身にパスを取得するリスナーを属性として含めるか、引数としてパスを指定して他の関数を呼び出しますか?

于 2012-05-09T20:02:23.067 に答える