PySimpleGUI 问题 |将多个 windows 连接在一起,但按钮无法正常工作

PySimpleGUI issues | attach multiple windows together and buttons not working correctly

问题 1:我的程序有 2 个 windows,一个无边框 window 用于背景,另一个用于按钮,但是如果我在打开我的程序时转到另一个程序,我的按钮会保留在屏幕上,我需要附上我的两个 windows 以便我可以最小化整个程序。

问题 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()

您的按钮保留在屏幕上,因为您设置了选项 keep_on_top=True,因此您的 window 位于所有 windows 之上。

删除选项 keep_on_top=True,在 window 完成后添加以下代码(未测试)。

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

Buttons only work when if i press on their text.

IMO,这是由你定义的透明颜色引起的,尝试将按钮的背景颜色更改为其他颜色,如'grey'。