2014-01-22 1 views
0

Мне нужен элемент управления combobox, который имеет такие функции, как VBA combobox.нуждается в чем-то больше, чем wxPython wx.ComboBox control

То, что я не могу быть в состоянии выжать из wx.ComboBox две вещи:

  • иметь его обрабатывать несколько столбцов - в зависимости от выбранного элемента мне нужно иметь больше данных для этого элемент, чтобы перейти к другим функциям, насколько я мог просто использовать словарь и выбранный элемент флажка в качестве ключа для других значений, мне все равно нужно отображать несколько значений в раскрывающемся списке, подумайте об этом как о столбце 1, идентификатор сотрудника, столбец 2 с его именем и т. д. В столбцах VBA также может быть определенная ширина, поэтому можно «скрыть» определенные значения «только для разработчиков» в списках элементов.

  • способ изменить размер выпадающего меню - мне нужно много из них в нескольких формах, различное количество видимых элементов при выпадающем меню (так что высота выпадающего меню на самом деле), также отрегулируйте ширину выпадающего списка на основе указанных столбцов , в VBA параметрами для них были такие вещи, как ListWidth, ColumnCount, ColumnWidths.

визуальный пример того, что мне нужно

vba combobox

  1. Если я пропускаю о том, как сделать wx.ComboBox делать то, что я хочу, пожалуйста, просветите меня.
  2. Если wx.ComboBox просто не может его вырезать, возможно, есть еще какой-то другой wx-контроль, который я делаю , не знаю, что могло бы сделать все это для меня?
  3. Если нет, я полагаю, что я застрял в расширении какого-либо элемента управления wx, добавив, что мне нужно? Я не слишком хорошо разбираюсь в ООП, но я думаю, что всегда должно быть быть первым, если это мой единственный ход, тогда мне бы понравился хотя бы один совет, который лучше всего использовать в качестве базы. Должно ли это произойти, я буду , вероятно, позже опубликую свой дрянной код и попрошу о помощи.
  4. Эй, может быть, все, что я на самом деле оставил, полностью делает мой собственный контроль на основе этой статьи? http://wiki.wxpython.org/CreatingCustomControls

ИЛИ может быть, есть что-то подобное уже там, сделанный кем-то, что я могу просто использовать? Я наткнулся на это, например: http://forums.wxwidgets.org/viewtopic.php?f=20&t=8561 Но это C++, о котором я, к сожалению, едва знаю, я, скорее всего, скорее сделаю один из упомянутых шагов, чем удалю его портировать на Python. Помимо этого, я считаю, что шаги 1-4 для меня все труднее, поэтому, пожалуйста, сообщите, как бы вы справились с этой проблемой.

Любая помощь приветствуется, как всегда. Cheers

ответ

1

ComboBox обертывает собственный виджет, поэтому он довольно ограничен в том, что он может сделать. Вы не сможете заставить его делать большую часть того, что хотите. Тем не менее, это позволяет вам хранить объекты для каждого из элементов внутри него с помощью метода Append.Вы можете прочитать все о том, как это работает на следующем уроке:

Вы можете получить такую ​​же функциональность, что вы хотите с помощью ComboCtrl, который является общим выпадающий которая позволяет пользовательский поп- вверх. Вы можете изменить всплывающее окно, чтобы делать то, что хотите, хотя образцы в демо-версии wxPython почти точно вы ищете. Единственный недостающий элемент, который я вижу, - это то, что демо не имеет изменяемого размера всплывающего окна.

+0

Большое спасибо за подсказку ComboCtrl. Мне удалось свести эту настройку к тому, что мне нужно - с использованием моноширинного шрифта и передачи набора результатов adodbapi конструктору. Я автоматически создаю нужные столбцы, заполняю их, устанавливаю ширину в самый большой элемент в столбце и на основе этого устанавливаю всплывающее окно. Установка начального значения для ListCtrl во всплывающем классе кажется простой - я просто установил параметры .val и .curitem в 0 (так как я хочу, чтобы первый элемент был предварительно выбран). Но как я могу заставить это значение также отображаться в ComboCtrl? Я имею в виду сразу после показа формы, теперь она появляется, как только я нажимаю ComboCtrl – aPinchOfInsomnia

+0

ах, хорошо, я получил его. Не уверен, что я делал неправильно раньше, но я его снял. Я добавил свой собственный метод ** PreselectFirst (self) ** и, помимо установки ранее указанных параметров, я добавил строку ** self.GetCombo(). SetText (self.GetStringValue()) ** – aPinchOfInsomnia

Смежные вопросы