2017-02-22 1 views
0

저는 파이썬과 wxpython의 초심자입니다. 나는 Combobox의 사용자 입력을 기반으로 Checkbox를 만들어야하는 코드를 작성하려고했습니다. 나는 그것을 할 수있다. 그러나 선택 항목을 변경할 때 이전 체크 박스가 그대로 남아 있으며이를 삭제하거나 새로 고치는 방법을 찾을 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.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

코드가 CheckBox를 만드는 위치에 도달하지 못하는 것 같습니다. 프로그램 출력을보고 오류를 하나씩 제거하십시오. 그럼 우리가 진행할 수 있습니다. 또한 최소한의 코드 예제를 게시하면 더 좋은 답을 얻을 수 있습니다. –

+0

안녕하세요, Petr, 코드를 찾아 주셔서 감사합니다. 그러나 나는 당신이 'CB를 만드는 장소에 도달하지 않음'을 의미한다는 것을 확신하지 못합니다. 나는 CB를 만들 수 있지만, 오래된 것을 삭제하거나 파괴 할 수는 없다. 내가 제안한대로 스크립트를 편집했습니다. – Surjith

+0

[mcve]를 제공 할 수 있습니까? 확인란을 삭제 한 후 프레임을 다시 그리는 것을 잊어 버릴 수도 있습니다. –

답변

1

당신은 자신의 Destroy 메소드를 호출하여 기존의 체크 박스 위젯을 파괴 할 수있다 : 다음은 내 코드입니다. 아마도 다음과 같은 것일 수 있습니다 :

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

안녕하세요, Robin, 제 코드를 살펴 보았습니다. 나는 당신의 제안을 일찍 시도했지만 아무 소용이 없다. 문제는 커서를 CheckBox 위에 올려 놓으면 이전 값이 표시되는 것입니다. – Surjith

+0

Surjith, AppSelect 상단에이 줄을 정확히 추가하고 cost.cod에 self.cb_list = []를 추가하면 올바르게 작동합니다. –

+0

관련없는 메모에서 내가 제안 할 수 있다면 앞으로 sizer를 살펴보십시오. 위젯의 절대 위치 지정은 작동하지만 다른 DPI 또는 글꼴 크기 설정을 접하게되면 이상하게 보일 수 있습니다. 예를 들어, 설치 프로그램에서 APPLICATIO 만 보았을 때 N은 콤보 상자로 덮여 있습니다. –

관련 문제