Форум сайта python.su
Создав уже 2-3 темы по wx.Python c “глупыми” вопросами, я понял, что лучше создать одну тему, и тут уже задавать и надеться на ваши ответы.
Подскажите пожалуйста, как сделать так, чтобы в pull-down choice можно было вводить текст?
wx.Choice(self.panel, -1, choices="test14", pos=(0,740), size=(500,10))
Офлайн
И сюда же вопрос.
Есть Choice, в него попадают варианты схемы пользователей из БД Оракл. Есть второй Choice, в нем содержатся таблицы ВЫБРАННОЙ схемы.
То есть, открылось окно, в первом Choice есть “SYS”, “ADMIN”, “ROOT”. Выбираем “SYS”, во втором Choice должны появится все таблицы которыми обладает пользователь “SYS”. И да, в результате, меня интересует выбор ВТОРОГО(таблицы) чойса, GetStringSelection() попадает в переменную и дальше продолжается работа с ней.
Теперь собственно вопрос, как сделать чтобы это происходило постоянно? Каждый раз выбирая пользователя в первом чойсе второй чойс автоматически обновлялся?
Я делал через wx.EVT_CHOICE, и метод OnChoice, но он получается выбор один раз и не важно какого Choice, таким образом все обновляется, но не получается выбрать из второго чойса что нужно, короче не работает.
Я решил данную задачу при помощи кнопки. Выбрали Схему, нажали кнопку “Показать таблицы” - второй чойс обновился, в нём появились данные из условия выбранного в первом чойсе, выбрали таблицы сделал GetStringSelection() и привет, всё хорошо. Но хочется без кнопок.
Офлайн
Такой Choice называется ComboBox
n2b- в вашем случае можно проверить кто послал event там есть чтото типа event.SenderObject - не помню точно как его зовут, можно посмотреть вотладчике (извините - новичек я всетаки).
и не важно какого Choice
cb = wx.ComboBox(self, 500, "default value", (90, 50),
(160, -1), sampleList,
wx.CB_DROPDOWN
#| wx.TE_PROCESS_ENTER
#| wx.CB_SORT
)
self.Bind(wx.EVT_COMBOBOX, self.EvtComboBox, cb)
Отредактировано (Окт. 25, 2011 21:26:04)
Офлайн
UP. Помогите разобраться с событиями в Чойсах. Какие могут быть еще события связанные с чойсами?
Офлайн
Итак. С событиями Choice разобрался.
Я привязала событие OnChoice к нужному Choice. Код такой:
self.ChoiceSchema.Bind(wx.EVT_CHOICE, self.OnChoice1)
self.ChoiceTable.Bind(wx.EVT_CHOICE, self.OnChoice2)
Офлайн
Теперь новая проблема…. =(
Вообщем есть Choice, в нем параметры (их 15, если что).
Есть ListBox.
Выбираем в Choice параметр, открывается диалоговое окно с выбором файла, выбираем файл, файл читается, получаем список строк, засовываем список строк в ListBox. Всё хорошо.
Вот код приведенного выше описания:
# Listbox of regexps
wx.StaticText(self.panel, -1, "All dictionaries for choosen crit:", (10, 70))
List = ['ZDES" SPRAVO$NIKI']
self.dict = wx.ListBox(self.panel, -1, (10, 90), (500, 300), List,
wx.LB_SINGLE)
# Field for edit regexp
wx.StaticText(self.panel, -1, "Field for edit crit:", (10, 400))
self.EditDict = wx.TextCtrl(self.panel, -1, "ZDES' REDAKTIRUEM ELEMENTI SPRAVO$NIKA", (10, 420), (500, 40))
self.usecrit = wx.CheckBox(self.panel, -1, "Use crit", (450, 465))
# Events
self.dict.Bind(wx.EVT_LISTBOX_DCLICK, self.OnChoiceDictValue)
self.crits.Bind(wx.EVT_CHOICE, self.OnChoiceCrit)
# Disable elements
self.usecrit.Disable()
self.EditDict.Disable()
self.dict.Disable()
def OnChoiceCrit(self, event):
self.dict.Clear()
file = None
self.items0 = dictpick_files.dictpick_files().readfile(file)
self.dict.SetItems(self.items0)
self.dict.Enable()
Офлайн
Надобы вам модель обращения с данными ввести. Вопрос такой - где вы собрались считанный файл хранить? Те от задачи зависит - может вы повторно хотите этот файл считать - а вам диалог не будет показан?
Создайте объект - типа выбранные ранее файлы: и в нем словарик имя файла - содержимое - если есть содержимое - файл не выбирается. Это одно зи возможных решений. Замечу - я обычно не использую графические контролы для хранения данных(думаю что это вообще нехорошо - особенно при переездах с одной граф библиотеки на другую)- у меня своих объектов хватает, поэтому такие вопросы просто не возникают.
Офлайн
doza_and, спасибо. Буду думать.
Щас еще один вопросик назрел.
Есть pull-down choice, есть текстовое поле.
Выбираем элемент из пулдауна, получаем значение в текстовом поле.
Есть чекбокс.
Тыкаем на чек-бокс - должны сохранить имя параметра выбранного в pull-down choice + параметр из текстового поля, выбираем следующий параметр из пулл дауна, получаем значение в текстовом поле, опять тыкаем чекбокс - опять должны получить тоже самое и в конечном итоге хочу получить на выходе кортеж из этого всего и использовать его уже в дальнейшем.
Офлайн
Сделал вот так вот:
def OnCheckUse(self, event):
if self.crits.GetStringSelection() == "Пустые значения":
self.where0 = (self.EditDict.GetValue())
def Get_where(self):
where=[self.where0, self.where1, self.where2, self.where3, self.where4, self.where5, self.where6, self.where7, self.where8
, self.where9, self.where10, self.where11, self.where12]
return where
Офлайн
Вот щас создал пост, который чуть выше. Уже разобрался на самом деле, но есть вопрос.
Как я написал выше - не работает.
Точно такой же список я сделал в описании события по нажатию на кнопку OK - не работает.
Просто вынес переменную и обращаюсь к ней - не работает.
А вот так работает:
def OnOKBtn(self, event):
global where
where=[self.where0, self.where1, self.where2, self.where3, self.where4, self.where5, self.where6, self.where7, self.where8,
self.where9, self.where10, self.where11, self.where12]
def Get_where(self):
VVhere=where
return VVhere
Отредактировано (Окт. 30, 2011 23:44:19)
Офлайн