Найти - Пользователи
Полная версия: tkinter combobox и listbox
Начало » GUI » tkinter combobox и listbox
1
chessmaster
Здравствуйте!
Есть ли в 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)
xam1816
 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()
chessmaster
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?
chessmaster
Есть список городов и их коды, например Москва - 123, Воронеж- 86 и т.д.
Как эти данные вводить в комбобокс или листбокс, чтобы при выборе города получить название города и его кода?
xam1816
 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()
chessmaster
xam1816
Здравствуйте!
Да, так можно. Но это не означает, что код города возвращает листбокс. Вы их получаете из словаря items.
Это проблемно, когда юзер обновляет листбокс, т.е. добавляет другие города, удаляет их или редактирует имя города. В этом случае после редактирования листбокса надо и редактировать словарь items и это очень неудобно. При больших данных возможно и нехватки памяти или снижение скорости выполнения программы.

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

Спасибо Вам!
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