Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 25, 2011 19:13:31

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python

Создав уже 2-3 темы по wx.Python c “глупыми” вопросами, я понял, что лучше создать одну тему, и тут уже задавать и надеться на ваши ответы.

Подскажите пожалуйста, как сделать так, чтобы в pull-down choice можно было вводить текст?

wx.Choice(self.panel, -1, choices="test14", pos=(0,740), size=(500,10))



Офлайн

#2 Окт. 25, 2011 20:13:19

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python

И сюда же вопрос.
Есть Choice, в него попадают варианты схемы пользователей из БД Оракл. Есть второй Choice, в нем содержатся таблицы ВЫБРАННОЙ схемы.
То есть, открылось окно, в первом Choice есть “SYS”, “ADMIN”, “ROOT”. Выбираем “SYS”, во втором Choice должны появится все таблицы которыми обладает пользователь “SYS”. И да, в результате, меня интересует выбор ВТОРОГО(таблицы) чойса, GetStringSelection() попадает в переменную и дальше продолжается работа с ней.

Теперь собственно вопрос, как сделать чтобы это происходило постоянно? Каждый раз выбирая пользователя в первом чойсе второй чойс автоматически обновлялся?

Я делал через wx.EVT_CHOICE, и метод OnChoice, но он получается выбор один раз и не важно какого Choice, таким образом все обновляется, но не получается выбрать из второго чойса что нужно, короче не работает.

Я решил данную задачу при помощи кнопки. Выбрали Схему, нажали кнопку “Показать таблицы” - второй чойс обновился, в нём появились данные из условия выбранного в первом чойсе, выбрали таблицы сделал GetStringSelection() и привет, всё хорошо. Но хочется без кнопок.



Офлайн

#3 Окт. 25, 2011 21:24:01

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

wx.Python

Такой Choice называется ComboBox

n2b
и не важно какого Choice
- в вашем случае можно проверить кто послал event там есть чтото типа event.SenderObject - не помню точно как его зовут, можно посмотреть вотладчике (извините - новичек я всетаки).

А можно их сразу развести
       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)
обратите внимание на cb



Отредактировано (Окт. 25, 2011 21:26:04)

Офлайн

#4 Окт. 28, 2011 18:56:28

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python

UP. Помогите разобраться с событиями в Чойсах. Какие могут быть еще события связанные с чойсами?



Офлайн

#5 Окт. 30, 2011 00:09:32

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python

Итак. С событиями Choice разобрался.
Я привязала событие OnChoice к нужному Choice. Код такой:

                               
self.ChoiceSchema.Bind(wx.EVT_CHOICE, self.OnChoice1)
self.ChoiceTable.Bind(wx.EVT_CHOICE, self.OnChoice2)



Офлайн

#6 Окт. 30, 2011 01:23:39

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python

Теперь новая проблема…. =(

Вообщем есть 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()
А теперь вопрос:
Дорогие питонщики, как написать так, чтобы вот выбрал я параметр№1, выбрал файл, строки из файла попали в листбокс, потом выбрал в Choice параметр№2, выбрал другой файл, строки из файла попали в лист бокс И ВОТ ТУТ, если я выберу в Choice ОПЯТЬ параметр№1 он автоматически показал бы мне листбокс с заполненными строками из файла, который я выбрал в первый раз, а не просил опять выбрать файл.
Надеюсь доступно объяснил.
То есть, еще раз, чтобы когда я выбрав параметр№1, прочитал файл, потом выбрал ОПЯТЬ параметр№1 мне не пришлось читать файл, так как уже все прочитано и он подгрузил бы в листбокс уже то что прочитал до этого.



Офлайн

#7 Окт. 30, 2011 17:15:49

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

wx.Python

Надобы вам модель обращения с данными ввести. Вопрос такой - где вы собрались считанный файл хранить? Те от задачи зависит - может вы повторно хотите этот файл считать - а вам диалог не будет показан?

Создайте объект - типа выбранные ранее файлы: и в нем словарик имя файла - содержимое - если есть содержимое - файл не выбирается. Это одно зи возможных решений. Замечу - я обычно не использую графические контролы для хранения данных(думаю что это вообще нехорошо - особенно при переездах с одной граф библиотеки на другую)- у меня своих объектов хватает, поэтому такие вопросы просто не возникают.



Офлайн

#8 Окт. 30, 2011 20:04:42

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python

doza_and, спасибо. Буду думать.
Щас еще один вопросик назрел.

Есть pull-down choice, есть текстовое поле.
Выбираем элемент из пулдауна, получаем значение в текстовом поле.
Есть чекбокс.
Тыкаем на чек-бокс - должны сохранить имя параметра выбранного в pull-down choice + параметр из текстового поля, выбираем следующий параметр из пулл дауна, получаем значение в текстовом поле, опять тыкаем чекбокс - опять должны получить тоже самое и в конечном итоге хочу получить на выходе кортеж из этого всего и использовать его уже в дальнейшем.



Офлайн

#9 Окт. 30, 2011 23:34:07

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python

Сделал вот так вот:

def OnCheckUse(self, event):
if self.crits.GetStringSelection() == "Пустые значения":
self.where0 = (self.EditDict.GetValue())
Таких where - 12 штук.
Также сделал функцию, которая собирает все 15 where в кортеж.
Из другого модуля пытаюсь обратиться к функции - он пишет ошибку в функции, что мол нет такого where0.

Вот код функции:
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
Не понимаю в чем причина…. То что нажатие на чекбокс отрабатывает верно я проверил сделав print where0 в событии самого чекбокса.
У меня мысль, что при нажатии на кнопку OK - Он делает self.Close() - всё магическим образом куда-то пропадает, либо, что скорей всего, проблема в событии самого чекбокса(его код я написал выше). Помогите пожалуйста.



Офлайн

#10 Окт. 30, 2011 23:44:04

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python

Вот щас создал пост, который чуть выше. Уже разобрался на самом деле, но есть вопрос.

Как я написал выше - не работает.

Точно такой же список я сделал в описании события по нажатию на кнопку 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version