Проблемы с PySimpleGUI | соедините несколько окон вместе, и кнопки не работают правильно

#python #pysimplegui

Вопрос:

проблема 1: В моей программе 2 окна, одно окно без границ для фона, а другое для кнопок, но если я перейду в другую программу, пока моя открыта, мои кнопки останутся на экране, мне нужно прикрепить оба окна, чтобы я мог свернуть всю программу.

проблема 2: я создал несколько кнопок, но они работают только тогда, когда я нажимаю на их текст.

вот мой код:

 import os import sys import PySimpleGUI as sg  sg.theme('DarkBlack') def resource_path(relative_path):  bundle_dir = getattr(  sys, '_MEIPASS', os.path.abspath(os.path.dirname(__file__)))  return os.path.abspath(os.path.join(bundle_dir, relative_path)) def title_bar(title, text_color, background_color):   bc = background_color  tc = text_color  font = 'ConsolasBlack 15'  return [sg.Col([[sg.T(title, text_color=tc, background_color=bc, font=font, grab=True)]], pad=(0, 0), background_color=bc),  sg.Col([[sg.T('─', text_color='white', background_color=bc, enable_events=True, font=font, key='-MINIMIZE-'), sg.Text('❎', text_color='white', background_color=bc, font=font, enable_events=True, key='Exit')]], element_justification='r', key='-C-', grab=True,  pad=(0, 0), background_color=bc)] sg.Window._move_all_windows = True gifpath=resource_path("media/079.gif") image = sg.Image(gifpath, background_color='black',pad=(0, 0))   botones= [[sg.Button('CREDITS', button_color=('white', 'black'),pad=((0,0),(10,0)))],  [sg.Button('MUTE', button_color=('white', 'black'),pad=((0,0),(70,0))),sg.Button('PAUSE', button_color=('white', 'black'),pad=((422,0),(70,0)))],  [sg.Button('UNMUTE', button_color=('white', 'black'),pad=((0,0),(50,10))),sg.Button('UNPAUSE', button_color=('white', 'black'),pad=((382,0),(50,0)))]]   background_layout=[title_bar('SCP-079 v0.4a ', sg.theme_text_color(), sg.theme_background_color()),[image]] buttonsLayout=botones window_background = sg.Window('', background_layout, finalize=True, no_titlebar=True, margins=(0, 0), element_padding=(0,0)) top_window = sg.Window('SCP-079', buttonsLayout,size=(540,360), icon=resource_path("media/079.ico"), grab_anywhere=False, finalize=True, keep_on_top=True, no_titlebar=True, transparent_color=sg.theme_background_color()) # window_background.send_to_back() # top_window.bring_to_front() while True:  window, event, values = sg.read_all_windows(timeout=100)  if event is None or event == 'Exit':  break  # if event =='Mute':  # mute()  # if event =='Unmute':  # unmute()  # if event =='Listen':  # unpauselisten()  # if event =='Listen':  # pauselisten()  # if event =='Credits':  # popup_showinfo()  # if event =='Hide':  # sysTray()  image.update_animation_no_buffering(image.Filename, 100) top_window.close() window_background.close()  

Ответ №1:

Ваши кнопки остаются на экране , потому что вы установили опцию keep_on_top=True , поэтому ваше окно находится поверх всех окон.

Удалите опцию keep_on_top=True , добавьте следующий код после завершения окна (не протестировано).

 top_window.TKroot.transient(window_background.TKroot) top_window.TKroot.grab_set()  

Кнопки работают только тогда, когда я нажимаю на их текст.

ИМО, это вызвано цветом прозрачности, который вы определили, попробуйте изменить цвет фона кнопки на другой цвет, например «серый».