问题描述
如何在tkinter GUI的OptionMenu中在当前选中的项目旁边添加一个选中符号(或突出显示它)?这个想法是,当我再次单击以选择另一项时,我可以很容易地看到选中了哪一项(类似于下图)
from tkinter import *
OptionList = [
"Aries","Taurus","gemini","Cancer"
]
app = Tk()
app.geometry('100x200')
variable = StringVar(app)
variable.set(OptionList[0])
opt = OptionMenu(app,variable,*OptionList)
opt.config(width=90,font=('Helvetica',12))
opt.pack(side="top")
labelTest = Label(text="",12),fg='red')
labelTest.pack(side="top")
def callback(*args):
labelTest.configure(text="The selected item is {}".format(variable.get()))
variable.trace("w",callback)
app.mainloop()
解决方法
只需使用ttk
窗口小部件来呈现这种现代风格,就尝试说些类似的话:
from tkinter import ttk
....
#arguments - master variable default *values
opt = ttk.Optionmenu(app,variable,OptionList[0],*OptionList)
由此产生的效果与您试图达到的效果非常相似或完全相同。
您可能会在这里注意到另外的第三个位置参数,实际上是此处指定的default=OptionList[0]
参数(仅ttk.Optionmenu
专用),它只是选项菜单将显示的默认值,而忽略了导致选项菜单的外观出现错误,例如this。
还要记住,它也没有font
选项。要解决此问题,请签出this
希望这对您有所帮助,请让我知道是否有任何错误或疑问。
欢呼
,您可以使用tk.OptionMenu
获得类似的效果:
from tkinter import *
OptionList = [
"Aries","Taurus","Gemini","Cancer"
]
app = Tk()
app.geometry('300x200')
variable = StringVar(app)
variable.set(OptionList[0])
opt = OptionMenu(app,None) # need to supply at least one menu item
opt.config(width=90,font=('Helvetica',12))
opt.pack(side="top")
# populate the menu items
menu = opt['menu']
menu.delete(0) # remove the None item
for item in OptionList:
menu.add_radiobutton(label=item,variable=variable)
labelTest = Label(text="",12),fg='red')
labelTest.pack(side="top")
def callback(*args):
labelTest.configure(text="The selected item is {}".format(variable.get()))
variable.trace("w",callback)
app.mainloop()