我正在尝试从tkinter OptionMenu中删除默认的“box like”图标,并将其替换为我自己的图像文件。下面是我迄今为止的代码。它工作,但我必须添加最后一行,以使其显示箭头图像和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
...
答案 0 :(得分:3)
您可以关闭指示符,不使用compound
属性。将箭头创建为带有图像且没有边框或文本的标签。然后,您可以使用place
将标签放在按钮的最右侧(使用relx
属性)。这是place
非常擅长的事物。
答案 1 :(得分:2)
这不会起作用并且令人遗憾我没有看到一个简单的解决方案。这里的主要问题是,OptionMenu是一个复合小部件。它是Menubutton的后代(具有讽刺意味的是在tkinter源中标记为弃用/ obsolte)并包含一个菜单小部件。
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的source并将其与original进行比较。 这也是你必须在“初始化”之后添加第二行的原因
om.config(indictoron=0,compound='right',image=arrow,width=140)
在真正的消息来源中,您可能会发现,关于按钮的初步预感正是如此 某种放射性按钮,离场不远,但没有用 (至少不是我)解决tkinter问题。 : - (
对不起,我无法更好地使用......对我感到羞耻! :(但我会更加努力 下一次! ; - )
答案 2 :(得分:2)
您可以改为使用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)
答案 3 :(得分:2)
您可以禁用指示器,然后使用您自己的指示器图像。进一步调整适合的位置。请查看下面的示例代码:
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()