Steerch
Ноя. 7, 2012 11:48:59
Проблема следующая:
Рисую группы переключателей циклом:
def rb_ur (mass,grup,state,frame,var):
var.set(grup)
for text, stoim, r,c,comm in mass:
RB = Radiobutton (frame,text = text,variable = var,value = stoim, command = comm)
if state == 0:
RB.configure (state = DISABLED)
else:
RB.configure (state = NORMAL)
RB.grid(row = r,column = c,sticky = ‘w’)
RB.select()
RB.select()
Пример вызова функции:
mod_uron_p = [('Пб-',3,3,1,e_vozd_p),
('Пб+',6,4,1,e_vozd_p),
('Токс',4,3,2,e_vozd_p),
('Реж',7,4,2,e_vozd_p),
('Обж,Дрб,Пб',5,3,5,e_vozd_p),
('Прон,Пб++',8,4,5,e_vozd_p),
('Рзед,Изн',10,5,1,e_vozd_p),
('Возд',10.0,5,2,e_vozd_p),]
rb_ur (mod_uron_p,'uron_p',vzn_p.get(),pr_uron_f_p,var_rb_p)
И таких множество.
Возник вопрос, как обратится к конкретному переключателю, ведь у них у всех одно имя, например что-бы поменять конфигурацию. Как получить все данные КОНКРЕТНОГО переключателя.
Заранее спасибо.
Steerch
Ноя. 7, 2012 14:15:12
Блин, народ. Ну хоть ссылочу на мануал какой скинте…
4kpt
Ноя. 7, 2012 20:26:53
Steerch - Вам не отвечают, потому что вы задали вопрос не в тот раздел. Построение Radiobutton - отноститься к разделу по GUI (графический интерфейс пользователя), но…
Ответ по Вашему вопросу:
Есть несколько возможностей для снятия данных по отдельному интерфейсу, который нажат:
Возможность первая:
Никто не отменял функцию имя_виджета.cget(свойство)
Возможность вторая:
Никто Вам не запрещает при создании массива Radiobutton привазать их к списку или, что еще лучше, к словарю wid = {id_виджета: }. Это позволит унавать имя виджета в инструкции bind метдом wid.get(event.widget.winfo_id()) - Вы получите КОДОВОЕ_СЛОВО
Возможность третья:
Создать независимый словарь, куда при каждом создании Radiobutton помещать пару wid = {Radiobutton.winfo_name(): КОДОВОЕ СЛОВО}. В результате, тоже в методе bind вы можете узнать, который виджет нажат методом wid.get(event.widgwt.winfo_name()) - Также получите кодовое слово…
Возможность четвертая и последняя (я просто задолбался придумывать).
При создании Radiobutton вы можете также создать список, состоящий из IntVar. Каждому новому виджету присвоить свой IntVar, который будет отличаться позицией в списке. Прошерстив значение всех IntVar в списке Вы можете узнать о том, какая кнопка была выбрана. Изменяя определенный IntVar Вы также меняете включено и выключено….
И самый простой способ…
Когда создаешь Radiobutton. Присваиваешь свойству variable один IntVar, а свойству value - разные значения от 0 и до (последной радиокнопки - 1)… В результате IntVar.get() даст номер нажатой радиокнопки (номер будет от 0 до последней радиокнопки - 1).
Steerch
Ноя. 9, 2012 17:11:37
Спасибо за ответ, попрошу модеров перенести вопрос.
Первый способ - не решение, из-за цикла все радиобатоны имеют одно имя =) ну в общем я подумаю, еще раз спасибо
4kpt
Ноя. 9, 2012 22:25:37
Я имел ввиду cget(“text”) если ты вешал все виджеты не не одну переменную, а в списке…., но в этом случае все остальные радиокнопки придется самому обездвиживать. Вообще радиокнопки - не очень хорошее решение. Оно очень тяжеловесное. Его рационально заменить список с возможностю выбора элемента. Кроме того, список можно снабдить прокруткой и при этом вместить 20-30 позиций. 20-30 радиокнопок - это ЖЕСТЬ… Кроме того, не забывай правило 7+-2 элемента в группе…
Steerch
Ноя. 10, 2012 07:54:40
Я программирую 2 недели, от силы =) Радиокнопки показались мне наиболее подходящими для той задачи которую они выполняют =) Более всего подошел-бы комбо-бокс, но он в ткинтер отсутствует, сам я потрачу больше времени на его конструкцию, чем на радиокнопки. Вообще изменяю состояние радиокнопок запуском той-же функции, что и при рисовании меняя только state, что видно в первом посте, в коде. Это приводит к нужным результатам, но как я понял, тупо рисует по верх старых кнопочек - новые. а так бесконечно продолжаться не может. Моя програмка для личного пользования, так сказать: спецефический калькулятор. Но в будущем, мало-ли что. Затык надо решить =)
4kpt
Ноя. 10, 2012 15:41:37
Это с каких таких делов комбокс отсутствует… Без возможности замены текста option menu, но он не очень… Хотя для начала может и подойти.
Тебе написать пример с радиокнопками??? Тут не напишу принципиально. Создай тему в разделе GUI - тогда, пожалуйста…