Изменение значка по умолчанию в tkinter OptionMenu?

Я пытаюсь удалить значок «box like» по умолчанию из tkinter OptionMenu и заменить его собственным файлом изображения. ниже приведен код, который я имею на сегодняшний день. Он работает, но мне пришлось добавить последнюю строку, чтобы отобразить изображение стрелки и функцию OptionMenu. Тем не менее, изображение стрелки всегда верно после текста, а не в крайнем правом углу OptionMenu, и липкий – это не шов, а следовательно, ширина = 140. Я работаю в Python 2.6.

Любые ошибки при перемещении изображения вправо?

По умолчаниюЧто я получаю

... arrow = PhotoImage(file='arrow.gif') om = OptionMenu(root,myVar,*myOptList) om.grid(sticky=W+E,padx=5,pady=5) om.config(indictoron=0,compound='right',image=arrow,width=140) om.image=arrow ... 

4 Solutions collect form web for “Изменение значка по умолчанию в tkinter OptionMenu?”

Это не сработает, и я сожалею, что не вижу легкого решения. Основная проблема заключается в том, что OptionMenu является составным виджетами. Это потомок Menubutton (который по иронии судьбы отмечен как устаревший / obsolte в источнике tkinter) и содержит виджет меню.

Afaik, используемый вами образ, упакован вместе с текстом-ярлыком и не будет «отсоединяться» от ваших попыток настройки компоновки. Более разумным подходом должно быть влияние на индикатор-виджет / представление, которое вы отключили с помощью IndicatorOn=0 . Но не повезло и там, потому что я просто не могу понять, что это за показатель …

Кстати, это похоже на ужасный взлом:

 class OptionMenu(Menubutton): """OptionMenu which allows the user to select a value from a menu.""" def __init__(self, master, variable, value, *values, **kwargs): ... #'command' is the only supported keyword <--- lol?! WTF?! why? callback = kwargs.get('command') if kwargs.has_key('command'): del kwargs['command'] if kwargs: raise TclError, 'unknown option -'+kwargs.keys()[0] # yeah sure! - unknown my a** 8-/ 

если вы посмотрите на источник tkinter и сравните его с оригиналом . Это также причина, по которой вам нужно добавить вторую строку после «инициализации»,

 om.config(indictoron=0,compound='right',image=arrow,width=140) 

В подлинном источнике вы можете обнаружить, что первоначальная догадка о кнопке, являющейся своего рода радиообъектом, не так уж далеко от поля, но это не помогает (по крайней мере, не мне) решить проблему tkinter. 🙁

Мне жаль, что я не мог лучше использовать … стыдно за меня! 🙁 Но я буду стараться в следующий раз! 😉

Вы можете отключить индикатор, а не использовать compound атрибут. Создайте стрелку как метку с изображением, без границ или текста. Затем вы можете использовать place для размещения метки справа от кнопки (используя атрибут relx ). Это то place , где действительно хорошо.

Вы можете отключить индикатор, а затем использовать свой собственный индикатор. Затем отрегулируйте положение по своему усмотрению. Проверьте пример фрагмента ниже:

 from Tkinter import* import PIL from PIL import ImageTk, Image class MyOptionMenu(OptionMenu): def __init__(self, master, status, *options): self.var = StringVar(master) self.img = ImageTk.PhotoImage(Image.open("...")) #replace with your own indicator image self.var.set(status) OptionMenu.__init__(self, master, self.var, *options) self.config(indicatoron=0, image = self.img, font=('calibri',(10)),bg='white',width=12) self['menu'].config(font=('calibri',(10)),bg='white') root = Tk() mymenu = MyOptionMenu(root, 'Select status', 'a','b','c') mymenu.pack() root.mainloop() 

ttk.Combobox этого вы можете использовать виджет ttk.Combobox :

 om = Combobox(root, values=*myOptList) om.set(myVar) om.grid(sticky=W + E, padx=5, pady=5) om.config(compound='right', width=140) 
  • Python 2.7.9 Mac OS 10.10.3 Сообщение «setCanCycle: устарело. Вместо этого используйте setCollectionBehavior вместо "
  • неблокирующее информационное диалоговое окно в Tkinter
  • Есть ли что-нибудь, что мне нужно знать об использовании Tkinter и pygame вместе?
  • Python ForLoop с вложенными функциями after (), которые происходят после цикла
  • Цифровой дисплей часов - требуется многопоточность?
  • Привязка <Return> к кнопке не работает должным образом
  • Python: функция принимает 1 позиционный аргумент, но 2 даны, как?
  • Pickle не будет работать с tkinter
  •  
    Interesting Posts for Van-Lav

    Таинственное взаимодействие между границами среза Python и «шагом»

    Различия между игровыми библиотеками Python Pygame и Pyglet?

    Утечка памяти при использовании общей библиотеки с локальным хранилищем потоков через ctypes в программе python

    Хранение длинной строки HTML в базе данных SQLite вызывает неизвестную ошибку

    Как передать свой идентификатор и пароль на сайт в Python с помощью Google App Engine?

    Как использовать обрезанный путь для многоугольника Baseemap

    Головоломка: сколько способов вы можете поразить цель лазерным лучом в четырех отражающих стенах

    Получить элемент списка по атрибуту в Python

    Есть ли способ создать плагины Eclipse с Python?

    Как сделать multihop ssh с тканью

    Как загрузить ключ RSA из файла PEM и использовать его в python-crypto

    Сохранение данных в Python без текстового файла?

    Два очень близких регулярных выражения с утверждениями в Python – почему re.split () ведет себя по-другому?

    Проблема с парольной фразой iphone push (pyAPns)

    Внешний файл javascript не добавляется при запуске на колбе

    Python - лучший язык программирования в мире.