Граница со списком или стрелка удаляются в tkinter

мне просто нужно удалить стрелку поля со списком и границу поля со списком в графическом интерфейсе Tkinter Python

например, для обычного просмотра поля со списком

Граница со списком или стрелка удаляются в tkinter

Когда я нажимаю на это поле со списком

Граница со списком или стрелка удаляются в tkinter

Я не смог найти такой метод или функции стилизации для этого.

Может быть проще просто привязать меню к ярлыку.

tgikal 15.02.2019 18:29
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
1 155
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это метод привязки меню к метке с помощью 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()

Кроме того, если мне нужно получить горизонтальное меню ... все вместе с изображениями в каждой опции меню ... так что вы можете помочь мне с тем же??

Sarthak Agrawal 17.02.2019 12:12

Я не понимаю, о чем вы спрашиваете, не могли бы вы пояснить?

tgikal 18.02.2019 20:06

код, который вы мне дали, использует параметр меню в tkinter, который дает параметры меню по вертикали. Итак, есть ли возможность получить эти параметры меню по горизонтали?

Sarthak Agrawal 20.02.2019 15:32

Я считаю, что простой tk_popup заполняется только в вертикальном направлении, вы можете сделать Высший уровень и вместо этого вызвать его.

tgikal 20.02.2019 17:20

@SarthakAgrawal Я добавил пример использования Toplevel.

tgikal 20.02.2019 22:15

Большое спасибо, брат.. ты такой замечательный человек...!! есть ли способ связаться с вами в какой-либо социальной сети.. если да, пожалуйста, поделитесь со мной ссылкой на свой профиль..!

Sarthak Agrawal 21.02.2019 18:09

Другие вопросы по теме