如何使用 python 中的选项制作弹出窗口 window?
How do I make a pop-up window with choices in python?
对于我正在进行的项目,我想制作一个弹出窗口 window,其中包含多个不同的选项,可以 return 根据用户选择的选项生成一个值;我找到了获取简单弹出窗口的解决方案,但没有找到 return 值的解决方案。我正在使用 Python 3.8.
PySimpleGui 是一种简单的方法 - 它似乎可以在 Windows 10.
上与 Python 3.8.3 一起使用
创建一个简单的 gui 对话框来进行选择没有比这更容易的了(尽管它也可以在需要时做更复杂的事情 UI):
import PySimpleGUI as sg
#sg.theme('DarkAmber') # Add a touch of color
options = ['Option a','Option b','Option c']
# All the stuff inside your window.
layout = [
[sg.Text('Select one->'), sg.Listbox(options,select_mode=sg.LISTBOX_SELECT_MODE_SINGLE,size=(20,len(options)))],
[sg.Button('Ok'), sg.Button('Cancel')]
]
# Create the Window
window = sg.Window('Make your choice', layout)
# Event Loop to process "events" and get the "values" of the input
while True:
event, values = window.read()
print( f"event={event}" )
if event is None or event == 'Ok' or event == 'Cancel': # if user closes window or clicks cancel
break
# close the window
window.close()
if event == "Cancel":
print( "You cancelled" )
else:
print('You entered ', values[0])
sg.popup( f"You selected {values[0]}" )
正如 barny 所建议的,PySimpleGUI 非常简单。
您描述的是 PySimpleGUI Cookbook 中所谓的 one-shot window。
这些类型的 GUI 可以写成一行 PySimpleGUI 代码,因为您不需要完整的事件循环。
import PySimpleGUI as sg
event, values = sg.Window('Choose an option', [[sg.Text('Select one->'), sg.Listbox(['Option a', 'Option b', 'Option c'], size=(20, 3), key='LB')],
[sg.Button('Ok'), sg.Button('Cancel')]]).read(close=True)
if event == 'Ok':
sg.popup(f'You chose {values["LB"][0]}')
else:
sg.popup_cancel('User aborted')
在调用 Window 之后,通过链式 read
调用,您将获得用于关闭 window 的事件(哪个按钮或者如果用“X”关闭") 和值字典。在这种情况下,您的值字典将只有一个项目 values['LB']
。对于列表框,此值将是一个列表。要选择项目,您可以参考 values['LB'][0]
对于我正在进行的项目,我想制作一个弹出窗口 window,其中包含多个不同的选项,可以 return 根据用户选择的选项生成一个值;我找到了获取简单弹出窗口的解决方案,但没有找到 return 值的解决方案。我正在使用 Python 3.8.
PySimpleGui 是一种简单的方法 - 它似乎可以在 Windows 10.
上与 Python 3.8.3 一起使用创建一个简单的 gui 对话框来进行选择没有比这更容易的了(尽管它也可以在需要时做更复杂的事情 UI):
import PySimpleGUI as sg
#sg.theme('DarkAmber') # Add a touch of color
options = ['Option a','Option b','Option c']
# All the stuff inside your window.
layout = [
[sg.Text('Select one->'), sg.Listbox(options,select_mode=sg.LISTBOX_SELECT_MODE_SINGLE,size=(20,len(options)))],
[sg.Button('Ok'), sg.Button('Cancel')]
]
# Create the Window
window = sg.Window('Make your choice', layout)
# Event Loop to process "events" and get the "values" of the input
while True:
event, values = window.read()
print( f"event={event}" )
if event is None or event == 'Ok' or event == 'Cancel': # if user closes window or clicks cancel
break
# close the window
window.close()
if event == "Cancel":
print( "You cancelled" )
else:
print('You entered ', values[0])
sg.popup( f"You selected {values[0]}" )
正如 barny 所建议的,PySimpleGUI 非常简单。
您描述的是 PySimpleGUI Cookbook 中所谓的 one-shot window。
这些类型的 GUI 可以写成一行 PySimpleGUI 代码,因为您不需要完整的事件循环。
import PySimpleGUI as sg
event, values = sg.Window('Choose an option', [[sg.Text('Select one->'), sg.Listbox(['Option a', 'Option b', 'Option c'], size=(20, 3), key='LB')],
[sg.Button('Ok'), sg.Button('Cancel')]]).read(close=True)
if event == 'Ok':
sg.popup(f'You chose {values["LB"][0]}')
else:
sg.popup_cancel('User aborted')
在调用 Window 之后,通过链式 read
调用,您将获得用于关闭 window 的事件(哪个按钮或者如果用“X”关闭") 和值字典。在这种情况下,您的值字典将只有一个项目 values['LB']
。对于列表框,此值将是一个列表。要选择项目,您可以参考 values['LB'][0]