Как в Python Tkinter установить для OptionMenu фиксированный размер короче, чем самый длинный элемент?

Как бы просто это ни звучало, у меня есть меню опций с терминами из 5 символов и одним очень длинным. Когда выбрана длинная опция, окно растягивается и выглядит ужасно. Установка ширины или sticky=EW работает только в том случае, если эта ширина больше, чем длина самого длинного термина.

В идеале я хотел бы показать максимум 15 символов, за которыми следует "...", если он длиннее.

Любые идеи? Спасибо.


person user3000724    schedule 04.03.2016    source источник
comment
Не могли бы вы просто проверить при добавлении каждой вещи: labels = [label[:15] + '...' if len(label) › 15 else '''' для метки в метках?   -  person en_Knight    schedule 04.03.2016
comment
Хотя это отличная идея, полное имя по-прежнему очень важно. Я не возражаю, если выпадающее меню становится немного длиннее после падения, если оно не изменяет размер окна. Но когда выбран «элемент», было бы неплохо, если бы он состоял из 15 символов плюс многоточие. Я полагаю, что мог бы использовать простую структуру данных для хранения оригинала и сокращений, но надеялся, что Tkinter может что-то построить. Спасибо за предложение.   -  person user3000724    schedule 05.03.2016


Ответы (1)


Я думаю, вам нужен более мощный "Combobox." в ttk (также в стандартном python как простое расширение для Tk).

По словам effbot

Меню параметров похоже на поле со списком.

Например:

from tkinter.ttk import Combobox # python 3 notation
combo = Combobox(root,values=['a','aa','aaaaa','aaaaaaa'],width=3)

Он просто обрежет слишком длинные элементы.

(Если вы используете python 2, импорт ttk немного отличается)

Если вы хотите, чтобы при вырезании записей появлялся красивый "...", я думаю, вам лучше всего сделать

elements = ['a','aa','aaaaaaaa']
simple_values = [ e[:3] + ('...' if len(e) > 3 else '') for e in elements]
combo = Combobox(root,values=simple_values )

Если вам нужно иметь возможность сопоставления между ними, используйте свою любимую структуру данных или ссылку по индексу, а не по значению в поле со списком.

person en_Knight    schedule 04.03.2016
comment
Это абсолютно идеально, большое спасибо! Я не пробовал Python 3, но смог легко обновить свой OptionMenus для Comboboxes с помощью примера Python 2. - person user3000724; 08.03.2016