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

Combobox border or arrow remove in tkinter

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

例如组合框的普通视图

当我点击那个组合框时

我找不到任何此类方法或样式函数来执行此操作。

这是一种将菜单绑定到带有 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()

您可以使用 Toplevel 制作水平菜单,例如:

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()