在tkinter中删除组合框边框或箭头

时间:2019-02-15 16:43:59

标签: python tkinter combobox border

我只需要在Tkinter Python GUI中删除组合框的箭头和组合框的边框

例如组合框的“普通视图”

enter image description here

当我单击该组合框时

enter image description here

我找不到任何此类方法或样式功能。

1 个答案:

答案 0 :(得分:0)

这是一种通过StringVar将菜单绑定到标签的方法,我在过去使用过类似的选择。

import tkinter as tk

def Click(e, var):
    def E(var):
        var.set("Excellent")
    def VG(var):
        var.set("Very Good")
    def G(var):
        var.set("Good")
    def P(var):
        var.set("Poor")
    e.widget.focus()
    nclst=[(' Excellent', lambda var = var: E(var)),
            (' Very Good', lambda var = var: VG(var)),
            (' Good', lambda var = var: G(var)),
            (' Poor', lambda var = var: P(var)),]

    my_menu = tk.Menu(None, tearoff=0, takefocus=0)
    for (txt, cmd) in nclst:
            my_menu.add_command(label=txt, command=cmd)
    my_menu.tk_popup(e.x_root+40, e.y_root+10,entry="0")

root = tk.Tk()
root.geometry('200x200')

l_var = tk.StringVar()
lab = tk.Label(root, textvariable = l_var, width = 10)
l_var.set("Excellent")
lab.bind('<Button-1>', lambda e, var = l_var: Click(e, var)) 
lab.pack()

root.mainloop()

Popup Menu

您可以使用“顶级”执行水平菜单,例如:

import tkinter as tk

def Click(e, var):        
    def E(m, var):
        var.set("Excellent")
        m.destroy()
    def VG(m, var):
        var.set("Very Good")
        m.destroy()
    def G(m, var):
        var.set("Good")
        m.destroy()
    def P(m, var):
        var.set("Poor")
        m.destroy()

    e.widget.focus()
    my_menu = tk.Toplevel()

    nclst=[(' Excellent', lambda e, m = my_menu, var = var: E(m, var)),
            (' Very Good', lambda e, m = my_menu, var = var: VG(m, var)),
            (' Good', lambda e, m = my_menu, var = var: G(m, var)),
            (' Poor', lambda e, m = my_menu, var = var: P(m, var)),]

    my_menu.overrideredirect(1) # Removes border
    def_bg = my_menu.cget("bg") # Store default background color
    for (txt, cmd) in nclst:
            my_lab = tk.Label(my_menu, text = txt)
            my_lab.pack(side = 'left')
            my_lab.bind('<Enter>', lambda e: e.widget.config(bg = 'SystemHighlight', fg = 'white'))
            my_lab.bind('<Leave>', lambda e: e.widget.config(bg = def_bg, fg = 'black'))
            my_lab.bind('<Button-1>', cmd)

    my_menu.update_idletasks()
    my_menu.grab_set()
    w = my_menu.winfo_width()
    h = my_menu.winfo_height()  
    my_menu.geometry("%dx%d+%d+%d" % (w, h,e.x_root, e.y_root+10))

root = tk.Tk()
root.geometry('200x200')

l_var = tk.StringVar()
lab = tk.Label(root, textvariable = l_var, width = 10)
l_var.set("Excellent")
lab.bind('<Button-1>', lambda e, var = l_var: Click(e, var)) 
lab.pack()

root.mainloop()

enter image description here