Как «исправить» выбранный элемент в tkinter.Listbox? - PullRequest
0 голосов
/ 30 мая 2020

Вот отрывок из моего кода:

import tkinter as tk

def evaluate(event):
    print(list_box.curselection())

root = tk.Tk()
var = tk.StringVar()
var.set(0)

entry = tk.Entry(root, textvariable = var)
entry.place(x = 150, y = 0, width = 20)
entry.bind("<Return>", evaluate)


list_box = tk.Listbox(root, selectmode = 'single')
list_box.place(x = 0, y = 0)
lst = [1, 2, 3]

for elem in lst:
    list_box.insert('end', elem)

list_box.selection_set(first = 0)
list_box.bind("<<ListboxSelect>>", evaluate)

root.mainloop()

Проблема в том, что я хочу каким-то образом «исправить» последнее выбранное значение в tkinter.Listbox. То есть, если в окне мы что-то набираем в запись, то в некоторых случаях (возможно, это зависит от того, как вы нажимаете на поле ввода) выбранное в списке значение будет потеряно. Можно ли сохранить, например, последнее выбранное значение?

Я новичок в Python и? в частности, к пакету tkinter, поэтому любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 30 мая 2020

проблема в том, что как только вы выбираете что-то еще, например ввод записи, ваш список теряет показанный выбор. Я удалил привязку по умолчанию для двойного щелчка, но если вы все еще хотите использовать ее для записи ввода, я не могу удалить одиночный щелчок (дозировка B1-Motion также работает). По крайней мере, я не знаю как. Я рекомендую использовать запись только для отображения или наоборот.

import tkinter as tk

def evaluate(event):
  print(list_box.curselection())


root = tk.Tk()
var = tk.StringVar()
var.set(0)

entry = tk.Entry(root, textvariable = var)
entry.place(x = 150, y = 0, width = 20)
entry.bind("<Return>", evaluate)
entry.bind('<Double-Button-1>', lambda e: "break")


list_box = tk.Listbox(root, selectmode = 'single')
list_box.place(x = 0, y = 0)
lst = [1, 2, 3]

for elem in lst:
    list_box.insert('end', elem)

list_box.selection_set(first = 0)
list_box.bind("<<ListboxSelect>>", evaluate)

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...