Уведомления

Группа в Telegram: @pythonsu

#1 Май 11, 2022 04:22:15

chessmaster
Зарегистрирован: 2022-05-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter combobox и listbox

Здравствуйте!
Есть ли в combobox tkinter и listbox tkinter свойство itemdata и как использовать?
Например есть item1, item2, item3 и их коды 2456, 1478, 549.
Как добавить и получить эти данные в combobox и listbox?

Например, в VB6 это можно так сделать:
Mycombo.Add(“item1”)
Mycombo.Itemdata(Mycombo.NewIndex)=2456

str= Mycombo.List(Mycombo.ListIndex)
kod = Mycombo.Itemdata(Mycombo.ListIndex)

Офлайн

#2 Май 11, 2022 11:31:54

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 906
Репутация: +  84  -
Профиль   Отправить e-mail  

tkinter combobox и listbox

 import tkinter as tk
root = tk.Tk()
root.title("GUI на Python")
items = ['a', 'b', 'c', 'd']
listbox = tk.Listbox()
listbox.pack()
for i in items:
    listbox.insert('end', i)
listbox.bind('<ButtonRelease - 1>', lambda e: print(i:=listbox.curselection()[0], listbox.get(i)))
root.mainloop()

Офлайн

#3 Май 11, 2022 14:27:44

chessmaster
Зарегистрирован: 2022-05-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter combobox и listbox

xam1816
Спасибо, что ответили.
Я думаю, curselection() выдаёт индекс выбранного элемента, т.е. здесь для 4 элемента, 0, 1, 2, 3.

Но мне нужен другое. Например, эти a, b, c, d из Вашего items имеют коды:
a - 2456, b - 1478, c - 549.
Как эти данные вводить в комбобоксе или листбоксе и при выборе второго элемента получить код 1478 и b?

Выводить ли curselection() 1478 и get(i) - b?

Офлайн

#4 Май 11, 2022 14:40:22

chessmaster
Зарегистрирован: 2022-05-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter combobox и listbox

Есть список городов и их коды, например Москва - 123, Воронеж- 86 и т.д.
Как эти данные вводить в комбобокс или листбокс, чтобы при выборе города получить название города и его кода?

Отредактировано chessmaster (Май 11, 2022 14:43:59)

Офлайн

#5 Май 11, 2022 16:55:07

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 906
Репутация: +  84  -
Профиль   Отправить e-mail  

tkinter combobox и listbox

 import tkinter as tk
root = tk.Tk()
root.title("GUI на Python")
items = {'Москва': 123, 'Воронеж': 86}
listbox = tk.Listbox()
listbox.pack()
for i in items:
    listbox.insert('end', i)
def get_data_listbox(e):
    i = listbox.curselection()
    data = listbox.get(i), items[listbox.get(i)]
    print(data)
listbox.bind('<ButtonRelease - 1>', get_data_listbox)
root.mainloop()

 import tkinter as tk
root = tk.Tk()
root.title("GUI на Python")
items = ['Москва-123', 'Воронеж-86']
listbox = tk.Listbox()
listbox.pack()
for i in items:
    listbox.insert('end', i)
def get_data_listbox(e):
    i = listbox.curselection()
    data = listbox.get(i).split('-')
    print(data)
listbox.bind('<ButtonRelease - 1>', get_data_listbox)
root.mainloop()

Отредактировано xam1816 (Май 11, 2022 16:55:59)

Офлайн

#6 Май 12, 2022 03:19:35

chessmaster
Зарегистрирован: 2022-05-11
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter combobox и listbox

xam1816
Здравствуйте!
Да, так можно. Но это не означает, что код города возвращает листбокс. Вы их получаете из словаря items.
Это проблемно, когда юзер обновляет листбокс, т.е. добавляет другие города, удаляет их или редактирует имя города. В этом случае после редактирования листбокса надо и редактировать словарь items и это очень неудобно. При больших данных возможно и нехватки памяти или снижение скорости выполнения программы.

Значить вывод такой:
Листбокс и комбобокс в tkinter не имеют свойство, которые есть в VB6. И это огромный минус tkinter.

Спасибо Вам!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version