Как получить доступ к Меню Tkinter через tcl? - PullRequest
0 голосов
/ 20 апреля 2020

Добрый день! Я пишу Python программу с Tkinter GUI. Я решил переписать одну ttk тему ради эксперимента. Вся программа должна быть в темных тонах, но в меню остаются светлые цвета. Затем я решил написать настройки для Menu через файл tcl, но я мог найти только доступ к Menubutton, и я не знаю, как получить доступ к настройкам самого Menu. Пожалуйста, помогите мне.

Обновление

Я понял, что задал вопрос неправильно. Мне нужно изменить это меню в окне

enter image description here

И вот оно

enter image description here

На скриншотах показано, что меню серое, но мне нужно изменить все меню черным (а не только менибутон, который изменился во втором меню)

Обновление 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, но я не знаю, как адаптировать этот код и как применять его для настройки этой строки меню.

enter image description here

PS Извините за мой неуклюжий Engli sh, но никто не помог мне на русскоязычных форумах. Мне пришлось go до крайности

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Нашел довольно интересный способ создания главного меню в 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()

Я не нашел другого способа

0 голосов
/ 20 апреля 2020

Базовые свойства виджета меню описаны здесь (который в некоторых случаях ссылается на описания параметров c в других местах); они отображаются непосредственно в Tkinter , но там не описываются. Вариант, который может вызвать у вас проблему, может быть одним из:

  • -borderwidth
  • -activeborderwidth
  • -relief (надеюсь, не этот; он активно управляется привязками меню)

Попробуйте явно установить первые два на ноль (в любом случае они обычно равны нулю, но могут получать настройки из других мест через Xdefaults).

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

Сам фон настраивается тем же способом (background="black" сделает это). Возможно, вам придется немного поэкспериментировать, чтобы сделать это правильно.


Если вы делаете это для всего приложения, вы можете посмотреть на установку этих значений через Xdefaults. Книга Tkinter не документирует это хорошо; документация по Tk лучше , но вам все равно придется работать по аналогии, поскольку эта часть API довольно неясна.

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

Ключевым моментом здесь является то, что вам нужно использовать имя базы данных опций (или имя класса базы данных опций ) вместо имени опции (которое указано на странице меню) и перед ним *Menu. так что это относится ко всем меню, созданным после того, как вы положили это в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...