Получить HMENU меню tk в WindowsPython

Программы на Python
Ответить
Anonymous
 Получить HMENU меню tk в Windows

Сообщение Anonymous »

Я хотел бы получить HMENU меню tk для установки цвета его фона с помощью функции SetMenuInfo из Windows API (установка с помощью configure() влияет только на фон элементов меню, но не на фон самого меню), но я не могу найти способ получить HMENU меню, чтобы иметь возможность вызывать эту функцию, не показывая сначала меню, а затем получая его HMENU. Функция winfo_id() виджета меню возвращает не HMENU меню, а HWND невидимого окна, которое создается вместе с меню. Я также пытался поискать в Интернете и документации tk что-нибудь, что могло бы мне помочь, но ничего не нашел. Единственный способ найти HMENU, который я могу придумать, — это найти окно меню с помощью функции FindWindowW, а затем получить связанное с ним меню, отправив ему MN_GETHMENU при возникновении события . Примерно так:

Код: Выделить всё

MN_GETHMENU = 0x01E1

def set_menu_background_color(event):
hwnd = ctypes.windll.user32.FindWindowW("#32768", None)
hmenu = ctypes.windll.user32.SendMessageW(hwnd, MN_GETHMENU, 0, 0)

# Set the menu background color using SetMenuInfo()

menu.bind("", set_menu_background_color)
Но это приведет к небольшой задержке при установке цвета фона, а я не хочу, чтобы это произошло.
Действительно ли tk отображает HMENU меню? Если да, то как я могу его получить?
Изменить: я знаю, что вы можете использовать GetMenu, но это работает только в том случае, если меню установлено как строка меню определенного окна. Я не думаю, что смогу использовать эту функцию, потому что, согласно документации tk Menu, когда меню устанавливается в качестве строки меню для окна верхнего уровня, создается клон меню. Поэтому, временно установив меню, я хочу получить его HMENU в виде строки меню, получить его HMENU с помощью GetMenu, а затем восстановить исходное меню строки меню/удалить его, это вернет только HMENU для клонированного меню.
Хотя GetMenu работает для меню строки меню, мне нужен способ каким-то образом получить HMENU меню, которое я, например, опубликую вручную или использую для виджета Menubutton, без сначала отобразив его, найдите его всплывающее окно, а затем отправьте ему сообщение, чтобы получить HMENU связанного с ним меню.

Подробнее здесь: https://stackoverflow.com/questions/798 ... on-windows
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»