2017-02-22 62 views
0

私はPythonとwxpythonの初心者です。私はコンボボックスのユーザー入力に基づいてチェックボックスを作成する必要があるコードを記述しようとしました。私はそれをすることができます。しかし、私が選択を変更するとき、古いチェックボックスはまだそこにあり、私はそれらを破壊する方法やリフレッシュを見つけることができません。どんな助けも高く評価されます。wxpythonで動的に作成されたチェックボックスを削除する

import wx 
class Form1(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     wx.EVT_COMBOBOX(self, 30, self.EvtComboBox) 
     self.lblhear = wx.StaticText(self,-1,"APPLICATION",wx.Point(30, 295)) 
     self.lblhear3 = wx.StaticText(self, -1, "TASKS TO BE DONE", wx.Point(30, 370)) 
     self.sampleList = ['ABC', 'PQR'] 
     self.edithear=wx.ComboBox(self, 30, "", 
      wx.Point(110, 290), wx.Size(95, -1), 
      self.sampleList, wx.CB_DROPDOWN) 
     self.Bind(wx.EVT_COMBOBOX, self.AppSelect, self.edithear) 
    def AppSelect(self, event): 
     if event.GetString() == "ABC": 
      self.Application = 'ABC' 
      self.cb_list = [] 
      act_list = ['Task1','Task2'] 
     elif event.GetString() == "PQR": 
      self.Application = 'PQR' 
      self.cb_list = [] 
      act_list = ['Task3','Task4'] 
     pos_y = 380 
     id_cb = 100 
     for i in act_list: 
      pos_y += 20 
      id_cb += 20 
      self.cb = wx.CheckBox(self, id_cb, label=i, pos=(50, pos_y)) 
      self.cb.SetValue(False) 
      self.cb_list.append(self.cb) 
    def EvtComboBox(self, event): 
     if event.GetId() == 30: 
      self.Application = self.event.GetString() 
app = wx.PySimpleApp() 
frame = wx.Frame(None, size=(1200,800)) 
Form1(frame) 
frame.Show(1) 
app.MainLoop() 
+0

あなたのコードは、あなたがチェックボックスを作成する場所に届かないと思われます。プログラムの出力を見て、エラーを1つずつ削除してみてください。それから私たちは進めることができます。また、コードの最小限の例を投稿すれば、より良い回答を得ることができます。 –

+0

こんにちはペトル、コードを見ていただきありがとうございます。しかし、私はあなたが「CBを作成する場所に到達しない」ことを意味するものは、わかりません。私はCBを作成することはできますが、古いものは削除または破棄することができません。私はあなたが提案したようにスクリプトを編集しました。 – Surjith

+0

[mcve]を提供できますか?チェックボックスの削除後にフレームを再描画するのを忘れるかもしれない –

答えて

1

はあなたが彼らのDestroyメソッドを呼び出すことにより、既存のチェックボックスウィジェットを破壊することができます: はここに私のコードです。おそらく次のようなものです:

for cb in self.cb_list: 
    cb.Destroy() 
+0

こんにちはRobin、ありがとう、私のコードを見てください。私は以前あなたの提案を試みたが役に立たなかった。問題は、カーソルをCheckBoxesに移動したときに、古い値が表示されていることです。 – Surjith

+0

Surjith、AppSelectの上にこれらの行を正確に追加すると、costructorのどこかでself.cb_list = []が動作します。 –

+0

無関係なメモで、もし私が示唆しているのであれば、将来的にサイザーを調べてみてください。ウィジェットの絶対的な配置は機能しますが、異なるDPIやフォントサイズの設定を参照すると、奇妙なことが起きる可能性があります。たとえば、私のセットアップでは、APPLICATIOしか表示されず、Nはコンボボックスで覆われています。 –

関連する問題