【问题标题】:get rid of white border around option menu摆脱选项菜单周围的白色边框
【发布时间】:2020-06-08 19:33:45
【问题描述】:

我正在尝试消除 OptionMenu 周围的白色边框。

我尝试了什么

我把颜色改成了红色,但是周围还是有白边。

谁能帮忙?

代码如下:

from tkinter import *
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('500x500')
var = StringVar()
option = ttk.OptionMenu(root,var,'1','2','3')
option["menu"].config(bg="red")
option.pack()
root.mainloop()

另外,有没有办法改变OptionMenu 触发框(在红色圆圈中)的颜色?

【问题讨论】:

  • 您是否尝试将边框宽度设置为零?
  • 我刚刚完成option["menu"].config(bg="red",borderwidth=0) 不幸的是,没有任何改变,
  • 无法用给定的代码示例重现
  • 窗口不是蓝色的,但是菜单是红色的,显示了灰色的边框。
  • 您是否考虑过编写自己的选项菜单?

标签: python tkinter ttk tkinter.optionmenu


【解决方案1】:

正如@Mike-SMT 在 cmets 中所述,

您是否考虑过编写自己的选项菜单?

在我看来,这似乎是获得OptionMenu 而又没有恼人的灰色边框的唯一方法。

这是我的尝试:

import tkinter as tk
root = tk.Tk()
root.geometry('500x500')

class custom_option_menu(tk.Tk):

    def down(self, *menu_items):
        if self.button["text"] == "↓":
            self.frame.place(x = self.x + (len(self.first) * 13)/2, y = self.y + 50, anchor = "center")
            self.button.config(text = "↑")

        elif self.button["text"] == "↑":
            self.frame.place_forget()
            self.button.config(text = "↓")

    def __init__(self, master, first, bg, *menu_items):

        self.master = master
        self.first = first
        self.menu_items = menu_items
        self.bg = bg
        self.frame = tk.Frame(master, height = 100, width = 100)
        self.otherframe = tk.Frame(master, height = 10, width = len(first) * 13)
        self.label = tk.Label(self.otherframe, text = str(first))
        self.button = tk.Button(self.otherframe, text = "↓", command = lambda: self.down(), relief= "flat")
        def save_var(event = "<Button-1>"):
            print(event.widget["text"])
        for i in range(len(self.menu_items)):
            self.frame.config(bg = self.bg)
            self.option = tk.Button(self.frame, text = self.menu_items[i], relief = "flat", bg = self.bg, textvariable = int(i))
            self.option.pack()
            self.option.bind("<Button-1>", save_var)





    def put(self, x, y):
        self.x = x
        self.y = y
        self.button.pack(side = "right")
        self.label.pack()
        self.frame.place(x = x + (len(self.first) * 13)/2, y = y + 50, anchor = "center")

        self.frame.place_forget()
        self.otherframe.place(x = x + (len(self.first) * 13)/2, y = y, anchor = "center")

nice = custom_option_menu(root, "o000000000000000", "blue", "First", "second", "Third")
nice.put(100, 200)
root.mainloop()

遗憾的是,我无法让默认几何管理器为此工作,因此我创建了.put()。这只是 x 和 y 坐标。

custom_option_menu 类的参数如下:

  • 第一个参数是父窗口小部件。
  • 第二个参数是OptionMenu 上的文本。
  • 第三个参数是选项的背景颜色。
  • 其余参数是选项。
  • 要打开菜单,请单击向下箭头。

    我希望这就是你要找的东西!

    【讨论】:

    • 考虑绑定一个事件&lt;Leave&gt;使其消失。
    • @jizhihaoSAMA 好的,我该怎么做?如何使用&lt;Leave&gt;
    • 仅供参考,我知道菜单有问题,我正在努力修复它。
    • @TheMaker,我很感激你在这个答案中付出的努力,尽管它是建立在假设之上的,这很可悲(字符宽度为 13,按钮高度为 50,主按钮的文本没有改变, ETC。)。尽管如此,它确实“移除了 OptionMenu 的菜单部分周围的灰色边框”,所以我奖励了你。
    • @MinionJim 谢谢老兄!!我花了一天时间,我会改进这个小部件。
    【解决方案2】:

    试试option["highlightthickness"]=0。那应该删除边框。

    【讨论】:

    • 这将删除按钮周围的边框(这将有助于设置触发框的背景部分),而不是菜单上的边框。
    • 谢谢你,所以你以前不知道如何解决?
    • 此配置仅适用于 tk.OptionMenu 而不是 ttk.OptionMenu。 OP 在这里使用 ttk。
    • @Mike-SMT 我在 tk.OptionMenu 上试过这个。还是不行。
    • @TheMaker 我只是说highlightthickness 仅适用于 tk 而不是 ttk。我知道它不能解决你的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多