python - PySimpleGUI 主题更新?
问题描述
我是 Python 和 PySimpleGUI 的新手。我现在只是在使用 PySImpleGUI 网站上提供的 Everything Bagel 示例程序。
我有第二个窗口可以更改当前主题,但我一直在寻找更新主窗口的方法,我只能找到需要关闭并重新打开窗口。
我试图放入一个主要功能,但我希望这是我出错的地方。
我收到以下错误:
==== 重启:C:\Users\brett\Dropbox\bmw\Lighting Programming\example 11c.py === Traceback(最近一次调用最后):文件“C:\Users\brett\Dropbox\bmw\Lighting Programming \example 11c.py", line 112, in 'The button clicked was "{}"'.format(event), NameError: name 'event' is not defined
我从主要示例中操作的代码如下:
#!/usr/bin/env Python3
import PySimpleGUI as sg
import time
sg.ChangeLookAndFeel('GreenTan')
def theme_browser_window_1(new_theme_1):
layout_1 = [[sg.Text('Theme Browser')],
[sg.Text('Click a Theme color to see demo window')],
[sg.Listbox(values=sg.theme_list(), size=(20, 12), key='-LIST-', enable_events=True)],
[sg.Button('Exit')]]
#layout_tb = ""
#layout_tb = layout_1
window_1 = sg.Window('Theme Browser', layout_1)
while True: # Event Loop
event, values = window_1.read()
if event == sg.WIN_CLOSED or event == 'Exit':
break
sg.theme(values['-LIST-'][0])
sg.popup_get_text('This is {}'.format(values['-LIST-'][0]))
new_theme_1 = str(values['-LIST-'][0])
print(values)
print(new_theme_1)
sg.theme(new_theme_1)
print(new_theme_1)
window_1.close()
return new_theme_1
def main_window(event, values):
# ------ Menu Definition ------ #
menu_def = [['File', ['Open', 'Save', 'Exit', 'Properties']],
['Edit', ['Paste', ['Special', 'Normal', ], 'Undo'], ],
['Option', ['Theme', 'Settings',], ],
['Help', 'About...'], ]
# ------ Column Definition ------ #
column1 = [[sg.Text('Column 1', background_color='#F7F3EC', justification='center', size=(10, 1))],
[sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 1')],
[sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 2')],
[sg.Spin(values=('Spin Box 1', '2', '3'), initial_value='Spin Box 3')]]
layout = [
[sg.Menu(menu_def, tearoff=False)],
[sg.Text('All graphic widgets in one window!', size=(30, 1), justification='center', font=("Helvetica", 25), relief=sg.RELIEF_RIDGE)],
[sg.Text('Here is some text.... and a place to enter text')],
[sg.InputText('This is my text')],
[sg.Frame(layout=[
[sg.Checkbox('Checkbox', size=(10,1)), sg.Checkbox('My second checkbox!', default=True)],
[sg.Radio('My first Radio! ', "RADIO1", default=True, size=(10,1)), sg.Radio('My second Radio!', "RADIO1")]], title='Options',title_color='red', relief=sg.RELIEF_SUNKEN, tooltip='Use these to set flags')],
[sg.Multiline(default_text='This is the default Text should you decide not to type anything', size=(35, 3)),
sg.Multiline(default_text='A second multi-line', size=(35, 3))],
[sg.InputCombo(('Combobox 1', 'Combobox 2'), size=(20, 1)),
sg.Slider(range=(1, 100), orientation='h', size=(34, 20), default_value=85)],
[sg.InputOptionMenu(('Menu Option 1', 'Menu Option 2', 'Menu Option 3'))],
[sg.Listbox(values=('Listbox 1', 'Listbox 2', 'Listbox 3'), size=(30, 3)),
sg.Frame('Labelled Group',[[
sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=25),
sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=75),
sg.Slider(range=(1, 100), orientation='v', size=(5, 20), default_value=10),
sg.Column(column1, background_color='#F7F3EC')]])],
[sg.Text('_' * 80)],
[sg.Text('Choose A Folder', size=(35, 1))],
[sg.Text('Your Folder', size=(15, 1), auto_size_text=False, justification='right'),
sg.InputText('Default Folder'), sg.FolderBrowse()],
[sg.Submit(tooltip='Click to submit this window'), sg.Cancel()]
]
window = sg.Window('Everything bagel', layout, default_element_size=(40, 1), grab_anywhere=False)
while True:
event, values = window.read()
if event == sg.WIN_CLOSED or event == 'Cancel': # if user closes window or clicks cancel
break
if event == 'Submit':
event, values = window.read()
break
if event == 'Theme':
#sg.theme_all_look_and_feel_themes()
#sg.theme_previewer()
#theme_name_list = sg.theme_list()
#sg.popup(title = 'Themes', [sg.Listbox(theme_name_list)])
#sg.theme(values['-List'][0])
#sg.pop
#sg.Listbox(values=sg.theme_list(), size=(20,12), key = '-List-', enable_event=True)
new_theme_1 = sg.theme()
new_theme_1 = theme_browser_window_1(new_theme_1)
print(new_theme_1)
sg.theme(new_theme_1)
#sg.window.update
break
window.close()
return event, values
def main():
#while True:
event, values = main_window(event, values)
#if event == sg.WIN_CLOSED or event == 'Cancel': # if user closes window or clicks cancel
# break
sg.popup('Title',
'The results of the window.',
'The button clicked was "{}"'.format(event),
'The values are', values)
main()
exit()
感谢您的帮助布雷特
解决方案
你的程序以 sg.popup('Title', 'The results of the window.', 'The button clicked was "{}"'.format(event), 'The values are', values) 开始,而事件定义在该函数在 - main() 之后开始。
设置事件和值的默认值,例如 0。
推荐阅读
- java - 标记未显示在地图片段上
- javascript - PDF中的CSS未在服务器上加载
- r - 使用 Heroku Docker R Buildpack 在 Heroku 上的可扩展性 Shiny App
- java - 使用 @JsonRawValue 注释进行 Json 序列化导致异常
- angular - 基于角度角色的菜单和页面路由
- ios - 在 MetalView 上渲染会冻结 iPhone 8
- angularjs - AngularJS:经常运行函数
- arrays - 取消共享文件并再次共享时宏不起作用
- groovy - 是否可以在合同的特定 json 正文字段中设置多个值?
- c - 保存使用列表修改的文件(c语言)