Найти - Пользователи
Полная версия: Как заполнить значениями Combobox?
Начало » GUI » Как заполнить значениями Combobox?
1
Voroshek
Здравствуйте. Я хочу указывать дату с помощью Combobox.
Код
mont = ttk.Combobox(wnd, values=[ "январь", "февраль", "март",
"апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь",
"ноябрь", "декабрь" ], width=8)
mont.grid(row=3, column=2)
mont.set("январь")
numb = ttk.Combobox(wnd, width=20)
numb.grid(row=3, column=1)
def calc(event):
    tr = { "январь":31, "февраль":28, "март":31, "апрель":30, "май":31,
    "июнь":30, "июль":31, "август":31, "сентябрь":30, "октябрь":31,
    "ноябрь":30, "декабрь":31 }
    for i in range(tr[mont.get()]):
        numb.insert(i, str(i))
numb.bind("<Button-1>", calc)
Ожидание:

-
Реальность:

-
ШЯДНТ?
Griffon
Надо же numb.values изменять в цикле, а не делать insert.
Voroshek
 AttributeError: 'Combobox' object has no attribute 'values' 
4kpt_II
Так не атрибут же. Вам правильно написали. Все реализовано в виде объекта, который напоминает словарь. Смотрим на код внимательно.

mont = ttk.Combobox(root, values=[u"январь", u"февраль", u"март", u"апрель",
                                  u"май", u"июнь", u"июль", u"август",
                                  u"сентябрь", u"октябрь", u"ноябрь",
                                  u"декабрь"], width=8)
mont.place(relx=0.5, rely=0.3, anchor="center")
mont.set("январь")
numb = ttk.Combobox(root, width=20)
numb.place(relx=0.5, rely=0.5, anchor="center")
#
def calc(event):
    tr = {u"январь": 31, u"февраль": 28, u"март": 31, u"апрель": 30,
          u"май": 31, u"июнь": 30, u"июль": 31, u"август": 31, u"сентябрь":30,
          u"октябрь": 31, u"ноябрь": 30, u"декабрь": 31}
    numb["value"] = tr.values()
#
numb.bind("<Button-1>", calc)

P.S. Я использовал менеджер геометрии .place() для вставки на свой готовый объект.

P.S.S. Будут вопросы - пишите…
Voroshek
Благодарю.
Ну то есть:
x = []
y = 1
while y<=tr[mont.get()]:
    x.append(y)
    y += 1
numb["value"] = x
А вопрос будет: как тогда понимать:
python3
>> import tkinter
>> help("tkinter.ttk.Combobox")
|
|    insert(self, index, string)
|       Insert STRING at INDEX
4kpt_II
Voroshek
При всем уважении. У меня этого нет…
Но я пользуюсь 2.7, поэтому могут быть отклонения.
4kpt_II
Voroshek
Ну то есть:

Можно короче

numb["value"] = [i for i in range(tr[mont.get()])]

Если бы работали в 2.7, то можно было бы еще короче:

numb["value"] = range(tr[mont.get()])

P.S. Будут вопросы - пишите…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB