【问题标题】:How do I access Menu Tkinter via tcl?如何通过 tcl 访问 Menu Tkinter?
【发布时间】:2023-03-21 04:14:02
【问题描述】:

下午好!我正在使用Tkinter GUI 编写一个 Python 程序。为了实验,我决定重写一个ttk 主题。整个程序应该是深色,但菜单仍然是浅色。然后我决定通过tcl文件写Menu的设置,但是我只能找到Menubutton的访问权限,我不知道如何访问Menu本身的设置。请帮帮我。

更新

我意识到我问错了问题。我需要在窗口中更改此菜单

这里是

屏幕截图显示菜单是灰色的,但我需要将整个菜单更改为黑色(而不仅仅是菜单按钮,在第二个菜单中更改了)

更新 2

我找到了这个链接:https://wiki.tcl-lang.org/page/Changing+Widget+Colors

有这样一段代码:

.menu configure -background color
.menu configure -foreground color
.menu configure -activebackground color
.menu configure -activeforeground color
.menu configure -disabledforeground color
.menu configure -font namedfont
.menu configure -selectcolor color
.menu configure -activeborderwidth size

据我了解,这里有一种通过tcl文件改变菜单本身的方法,但我不知道如何调整这段代码以及如何应用它来调整这个菜单栏。

PS 抱歉,我的英语很笨拙,但在俄语论坛上没有人帮助我。我不得不采取极端措施

【问题讨论】:

  • tk doc on menus 可能有用。
  • @acw1668,但是否可以在 Windows 上以某种方式访问​​ tk :: mac :: ShowPreferences 等菜单项?
  • @axw1668,也就是说,我需要以某种方式查看 tkinter 菜单或它使用的菜单的设置并在 tcl 文件中更改它们
  • @acw1668,更新了问题,以便更好地了解我需要什么
  • 如果您在 OSX 上使用暗模式,最近有一些重要的修复。我在去年 11 月的一次会议上看到了关于它们实施的精彩演示。

标签: python python-3.x tkinter menu tcl


【解决方案1】:

菜单小部件的基本属性是described here(在某些情况下超链接到其他地方的通用选项描述);它们被映射directly into Tkinter,但在那里没有很好地描述。可能导致您出现问题的选项可能是以下之一:

  • -borderwidth
  • -activeborderwidth
  • -relief(希望不是这个;它由菜单绑定主动管理)

尝试将前两个显式设置为零(无论如何它们通常为零,但可以通过 Xdefaults 从其他地方获取设置)。

yourmenu.config(borderwidth=0, activeborderwidth=0)

后台本身也是用同样的方法配置的(background="black"会做)。您可能需要进行一些试验才能做到正确。


如果您要为整个应用程序执行此操作,您可能希望查看通过 Xdefaults 设置这些值。 Tkinter 的书没有很好地记录了这一点。 Tk 文档是better,但您仍然需要通过类比来解决问题,因为这部分 API 相当晦涩。

tk.option_add("*Menu.borderWidth", "0")
tk.option_add("*Menu.activeBorderWidth", "0")
tk.option_add("*Menu.background", "black")
# etc.

这里的关键是您需要使用选项数据库名称(或选项数据库类名)而不是选项名称 (在菜单页面上列出)并在其前面加上*Menu.,因此它适用于您将其放入数据库后创建的所有菜单。

【讨论】:

  • 选项数据库仅在创建小部件时读取。创建后,您只能通过配置控制它们。 (另外,一个小部件的配置选项可以传递给它的构造函数。我假设你已经知道了。)
  • 不幸的是,一切都保持在我自己可以带来的相同形式
  • 这很可能应该通过tcl 文件进行配置,因为我已经得到答案,通过tkinter python 这是不可能的
【解决方案2】:

找到了一种在 Tkinter 中创建主菜单的相当有趣的方法。您可以创建一个框架并放置菜单按钮,您可以在其上附加弹出菜单。

代码:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

root.option_add("*Menu.borderWidth", "0")
root.option_add("*Menu.activeBorderWidth", "0")
root.option_add("*Menu.background", "black")


menu = tk.Menu(root)

btn_menu = tk.Menubutton(root, text='fegvd')
btn_menu.pack()


file = tk.Menu(btn_menu, tearoff=0, foreground='white')
file.add_command(label='ГЫГ')

btn_menu.configure(background='black', foreground='white', indicator=0, menu=file, state='active')

root.mainloop()

我没有找到其他方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2014-02-17
    • 2021-03-05
    • 2021-07-25
    相关资源
    最近更新 更多