1

編集:アクションによって消費される時間のほとんどは、ウィジェットをサイザーに配置するのではなく、実際にはウィジェットの作成に費やされていることを理解するために、もう少しデバッグしました。問題は、それらをより速く作成する方法です。

約 300 個のチェックボックスを追加して、ダイアログの内容を動的に変更する必要があります。wx.GridSizer とそれらを追加するループを使用していますが、非常に遅いです。それをより速く行う方法はありますか?すべてのウィジェットが追加されるのを待ってから、Sizer の Add メソッドを呼び出すことでサイズがすぐに計算されると信じているため、位置とサイズを手動で計算するメソッドがあります。これは私がしていることのショートカットです:

... #Destroy all widgets we used to have

for el in self.elements:
    _chk = wx.CheckBox(self,-1,el["name"])
    _t1 = wx.StaticText(self,-1,el["age"])
    _t2 = wx.StaticText(self,-1,el["city"])
    self.checkboxes.append(_chk)
    self.gridSizer.Add(_chk)
    self.gridSizer.Add(_t1)
    self.gridSizer.Add(_t2)
self.SetSizer(self.gridSizer)
self.Layout()
self.Refresh()
self.Update()

約 300 の要素を追加するのに約 1 分かかります。たとえば、QIP や ICQ などのアプリは 1 秒で多くの連絡先を表示するので、もっと速い方法があるに違いないと思います :) 手がかりをありがとう!

さらに、私の英語を許してください。

レイ

4

1 に答える 1

0

一度に 300 個のウィジェットを持つインターフェイスは考えられません。これを達成するための良い方法はないと思います。代わりに、ユーザーが 300 個のチェックボックスをチェックする (または何百ものウィジェットを処理する) 必要がないように、インターフェイスを再設計することを検討する必要があります。一度に多くのチェックボックスを処理できる唯一のウィジェットは、おそらくチェックボックス mixin を使用した ListCtrl です。例については、デモを参照してください。

于 2013-10-23T13:26:49.047 に答える