2011-07-12 27 views
1

でwx.ListBoxで行動をCTRL-クリック私は、彼らがCTRLキーを押したかのように中から選択するためのユーザーを希望wx.ListBoxを持っています。つまり、選択されていない項目をクリックすると、その項目は選択されず、選択した項目をクリックすると選択解除されます(他の項目を変更せずに)。複数選択

リストボックスを作成するためのコードは次のとおりです。

self.myListBox = wx.ListBox(self, 
            -1, 
            choices=self.keys, 
            style = wx.LB_HSCROLL 
              | wx.LB_MULTIPLE 
              | wx.LB_NEEDED_SB 
              | wx.LB_SORT) 
    self.Bind(wx.EVT_LISTBOX, self.OnSelection, self.myListBox) 

問題/質問:

  • はすでにこれを行う簡単な方法はありますか? wx.LB_MULTIPLEまたはwx.LB_EXTENDEDのように見えるかもしれませんが、私は両方を試しましたが、何も変わっていないようです。ドキュメントの記述は少しばかりで、2つの違いは何ですか?

  • 私はevent.GetSelection()で選択した項目のIDを取得することができます知っているが、私はすなわち、上記のロジックを実装しようとした場合:

    if self.myListBox.IsSelected(idx): 
        self.myListBox.Deselect(idx) 
    else: 
        self.myListBox.Select(idx) 
    

    イベントはすでに解雇しているので、それはただ単にだったものは何でも選択解除選択された。その前にevent.Skip()を呼び出そうとしましたが、そこには運がありません。私がそれをやめないようにする方法はありますか?

  • 私は複数の選択のためのevent.GetSelection()をマウスをドラッグするときは、正しいIDのが上がっになるだろうことに気づいた - 3, 2, 1, 0、すなわち - しかし、ダウンして行くと、最初に表示されるでしょう - 0, 0, 0, 0。私はそれがちょうど選択項目のリストの最初の項目を印刷していると推測しています - イベントオブジェクトからリストを取得する方法はありますか(self.myListBox.GetSelections()を呼び出すのではなく)?

私はLinuxとwxPythonバージョン2.6.4.0を実行しています。

答えて

1

(後期答えは、それが文書への使用があるかもしれない。)
は私がのonClickイベントのハンドラを書いてしまった:

def OnSelection(self, event): 
    """Simulate CTRL-click""" 
    selection = self.myListBox.GetSelections() 

    for i in selection: 
     if i not in self.selectedItems: 
      # add to list of selected items 
      self.selectedItems.append(i) 
      self.myListBox.Select(i) 
     elif len(selection) == 1: 
      # remove from list of selected items 
      self.selectedItems.remove(i) 
      self.myListBox.Deselect(i) 

    for i in self.selectedItems: 
     # actually select all the items in the list 
     self.myListBox.Select(i) 
0

wxPython 2.6.xは超古いです。 2.8または2.9シリーズにアップグレードしてください。私は2.8.11のwxPythonデモを実行したところ、Windows上でうまく動作していたようです。

+0

ええ、私はそれが古いですけど、アップグレードがためのオプションではありませんこのプロジェクトは現時点では可能です。また、「うまくいく」ということを定義できますか? 2.8.11で要求された動作をしていますか? – whrrgarbl

+0

CTRL +クリックして選択を切り替えることができます –

+0

はい、それは私のためにも機能します。申し訳ありませんが、私は明確ではなかったと思います。私がしたいことは、ユーザーが実際にCTRLキーを押さずにその動作をシミュレートすることです。 – whrrgarbl