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'。
问题 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'。