#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()
Кнопки работают только тогда, когда я нажимаю на их текст.
ИМО, это вызвано цветом прозрачности, который вы определили, попробуйте изменить цвет фона кнопки на другой цвет, например «серый».