Форум сайта python.su
Может кто сталкивался с такой проблемой? Не знаю как освежить выпадающий список ComboBox. Добавлять, добавляет без проблем cb.Append(“Значение”), а вот как новый список сформировать (не однократно) уже после создания объекта - не знаю. Пробовал удалять элементы - не получается, может они и удаляются, но в самой форме этого не видно. Пробовал выбранное значение убрать cb.SetValue(“”) - тоже визуально ничего не меняется. Подскажите кто знает как справиться с этим.
Офлайн
Я удаляла сам элемент и создавала снова с новым списком:
cb.Destroy()
cb = wxComboBox…
Офлайн
proDivaТоже это пробовал, но в форме элемент “прикручен” к wx.BoxSizer и создается в том месте, в “котором сам захочет”. Не получилось у меня пересоздать элемент, чтобы он корректно отображался.
Я удаляла сам элемент и создавала снова с новым списком:
cb.Destroy()
cb = wxComboBox…
Офлайн
Хм… у меня нормально обновляется. Вы на какой платформе пробуете?
# -*- coding: cp1251 -*- import wx list1 = (u'один',u'два',u'три',u'четыре',u'пять') list2 = (u'январь',u'февраль',u'март',u'апрель') class TestFrame(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, -1, "Test", size=(500, 400)) self.cb = wx.ComboBox(self, 500, "default value", (90, 50), (95, -1), list1, wx.CB_DROPDOWN) self.ls = list1 b = wx.Button(self, 10, u"Поменять", (20, 20)) self.Bind(wx.EVT_BUTTON, self.OnClick, b) box = wx.BoxSizer(wx.VERTICAL) box.Add(self.cb, 0, wx.EXPAND) box.Add(b, 0, wx.EXPAND) self.SetSizer(box) def OnClick(self, event): def set_list(ls): self.cb.Clear() for x in ls: self.cb.Append(x) if self.ls == list1: self.ls = list2 else: self.ls = list1 set_list(self.ls) if __name__ == '__main__': app = wx.PySimpleApp() frame = TestFrame(None) frame.Show(True) app.MainLoop()
Офлайн
PooHLinux. Конечно есть отличия, но виджеты вроде одинаково должны работать.
Хм… у меня нормально обновляется. Вы на какой платформе пробуете?
Офлайн
vakТогда, извиняйте, помочь не могу, сейчас под рукой нет машины с линуксом и Х-ами
Linux. Конечно есть отличия, но виджеты вроде одинаково должны работать.
Офлайн
у меня код работает
python
Python 2.4.4 (#2, Apr 5 2007, 20:11:18)
on linux2
# -*- coding: utf-8 -*-
import wx
list1 = (u'один',u'два',u'три',u'четыре',u'пять')
list2 = (u'январь',u'февраль',u'март',u'апрель')
class TestFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, -1, “Test”, size=(500, 400))
self.cb = wx.ComboBox(self, 500, “default value”, (90, 50), (95, -1),
list1, wx.CB_DROPDOWN)
self.ls = list1
b = wx.Button(self, 10, u“Поменять”, (20, 20))
self.Bind(wx.EVT_BUTTON, self.OnClick, b)
box = wx.BoxSizer(wx.VERTICAL)
box.Add(self.cb, 0, wx.EXPAND)
box.Add(b, 0, wx.EXPAND)
self.SetSizer(box)
def OnClick(self, event):
def set_list(ls):
self.cb.Clear()
for x in ls:
self.cb.Append(x)
if self.ls == list1:
self.ls = list2
else:
self.ls = list1
set_list(self.ls)
if __name__ == ‘__main__’:
app = wx.PySimpleApp()
frame = TestFrame(None)
frame.Show(True)
app.MainLoop()
Офлайн
pythonwinСпасибо, буду пробовать.
у меня код работает
python
Python 2.4.4 (#2, Apr 5 2007, 20:11:18)
on linux2
Офлайн