Я хотел бы получить 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 меню? Если да, то как я могу это получить?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... on-windows