Объекты из элементов управления Tkinter: как выйти за пределы StringVar, IntVar, DoubleVar, BooleanVar? - PullRequest
0 голосов
/ 07 января 2011

Я пытаюсь написать графический интерфейс в Tkinter, чтобы выбрать один из нескольких сложных объектов Python. Они представляют записи из базы данных; при необходимости я могу восстановить объекты с карты, учитывая их целочисленный уникальный идентификатор.

В идеальном мире виджеты Listbox и OptionMenu принимают последовательность произвольных объектов и функцию, вызываемую для получения строки, отображаемой из этих произвольных объектов; и их переменные дадут один из этих объектов без нежелательных преобразований.

Вместо этого ни один виджет, и, что более важно, ни один тип переменной не имеет дело ни с чем, кроме строк или строк, преобразованных в числа и значения истинности. У меня нет возможности вернуть мои произвольные объекты, и я не могу создать список, содержащий значения идентификатора, потому что они будут отображать идентификатор, а не разумное строковое представление.

В качестве теста я поместил кортежи в OptionMenu со StringVar, и они были преобразованы в строки.

Существуют ли экзотические виджеты или методы, которые я могу использовать для получения объектов () из переменной или для отображения в виджете строки, которая не соответствует положению в переменной виджета? Лучший подход, который я могу придумать, - это меню, полное динамически генерируемых лямбд для команд, но оно будет уродливым и потенциально слишком большим.

1 Ответ

0 голосов
/ 08 января 2011

Что я сделал, чтобы решить эту проблему, по крайней мере, для моего ListBox был массив, который представлял все данные в списке.Скажите, что complexobjects - это ваш список объектов,

for obj in complexobjects:
    listbox.insert(END, str(complexobjects))

замените str(complexobjects) на то, что вы хотите, чтобы ваше строковое представление было.Вам не нужно хранить или искать его, просто используйте индекс,

selitems = [complexobjects[int(idx)] for idx in listbox.curselection()]

Прочитайте эту страницу, http://effbot.org/tkinterbook/listbox.htm

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