wxPython: изменение выбора ComboBox - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь изменить выбор второго wx.ComboBox, если пользователь выбирает «Кампания» в первом wx.ComboBox.

Код ниже не работает,Я имею в виду, что выбор на втором wx.ComboBox остается прежним.

Мне нужна ваша помощь с этим.Спасибо,

class Test(wx.Frame):
    def __init__(self,parent,id):
        wx.Frame.__init__(self,parent,id, "Frame aka Window", style= wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX, size=(400, 635))


        self.filterValues = ['Campaign','Spent', 'Network Impr.', 'Network Clicks', 'Rev. /1000', 'GA Impr.', 'Revenue', 'eCPC', 'CPC', 'CTR'] 
        self.filterComboColumns = wx.ComboBox(self.panel,choices = self.filterValues, size = (100,-1))
        self.Bind(wx.EVT_COMBOBOX, self.onComboValues, self.filterComboColumns)

        self.filterContainsValues = ['Contains', 'Doesn\'t contain' , '<', '>'] 
        self.filterComboContains = wx.ComboBox(self.panel,choices = self.filterContainsValues, size = (100,-1))
        self.filterComboContains.Enable(False)
        self.Bind(wx.EVT_COMBOBOX, self.onComboContains, self.filterComboContains)

        self.filterInput = wx.TextCtrl(self.panel, wx.ID_ANY, size=(145, 24))
        self.filterInput.Enable(False)
        self.filterInput.SetFont(font)
        self.Bind(wx.EVT_TEXT, self.onComboInput, self.filterInput)

    def onComboValues(self, event): 
      cb = event.GetEventObject() 

      if cb.GetValue() == "Campaign":
        self.filterComboContains.Enable(True)
        self.filterContainsValues = []
        self.filterContainsValues.append('Contains')
        self.filterContainsValues.append('Doesn\'t contain')

1 Ответ

2 голосов
/ 31 мая 2019

Вы пропустили только вызов метода Set.Недостаточно изменить список, содержащий параметры, вам нужно сообщить wx.ComboBox, что список изменился.Это метод Set, который делает это.

Код с комментариями (####):

import wx

class Test(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, "Frame aka Window", style= wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX, size=(400, 635))

        self.panel = wx.Panel(self)

        self.filterValues = ['Campaign','Spent', 'Network Impr.', 'Network Clicks', 'Rev. /1000', 'GA Impr.', 'Revenue', 'eCPC', 'CPC', 'CTR'] 
        self.filterComboColumns = wx.ComboBox(self.panel, choices = self.filterValues, size = (100,-1))
        self.Bind(wx.EVT_COMBOBOX, self.onComboValues, self.filterComboColumns)

        self.filterContainsValues = ['Contains', 'Doesn\'t contain' , '<', '>'] 
        self.filterComboContains = wx.ComboBox(self.panel,choices = self.filterContainsValues, size = (100,-1))
        self.filterComboContains.Enable(False)
        #self.Bind(wx.EVT_COMBOBOX, self.onComboContains, self.filterComboContains)

        self.filterInput = wx.TextCtrl(self.panel, wx.ID_ANY, size=(145, 24))
        self.filterInput.Enable(False)
        #self.filterInput.SetFont(font)
        #self.Bind(wx.EVT_TEXT, self.onComboInput, self.filterInput)

        #### Sizer
        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.filterComboColumns)
        self.sizer.Add(self.filterComboContains)
        self.sizer.Add(self.filterInput)
        self.panel.SetSizer(self.sizer)

    def onComboValues(self, event): 
        cb = event.GetEventObject() 

        if cb.GetValue() == "Campaign":
            self.filterComboContains.Enable(True)
            self.filterContainsValues = []
            self.filterContainsValues.append('Contains')
            self.filterContainsValues.append('Doesn\'t contain')
            #### The line below is the line you were missing
            self.filterComboContains.Set(self.filterContainsValues)
            #### This is to avoid showing an empty field when the values change
            self.filterComboContains.SetSelection(0)
        else:
            pass


# Run the program
if __name__ == "__main__":
    app = wx.App()
    frame = Test(None, 1)
    frame.Show()
    app.MainLoop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...