【问题标题】:How do I make a pop-up window with choices in python?如何在python中制作一个带有选项的弹出窗口?
【发布时间】:2020-06-24 16:09:10
【问题描述】:

对于我正在处理的项目,我想制作一个包含多个不同选项的弹出窗口,它可以根据用户选择的选项返回一个值;我找到了获得简单弹出窗口的解决方案,但没有找到返回值的解决方案。我正在使用 Python 3.8。

【问题讨论】:

  • 你看过TKinter吗?
  • 有很多方式,具体要找什么,有例子要详细展示?
  • 我有,但我只找到了一个简单弹出窗口的选项。我相当缺乏经验,所以我可能错过了一些东西。谢谢。
  • 我记得几年前编写了一个程序,其中有一个带有文本框的大窗口,然后出现一个选项列表,用户可以选择其中一个返回值的选项并继续程序。
  • tkinter.messagebox 中有一些预定义的选项,否则您需要自己制作对话框。

标签: python interactive


【解决方案1】:

正如 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 调用,您将获得用于关闭窗口的事件(哪个按钮或如果用“X”关闭)和值字典。在这种情况下,您的值字典将有一个项目values['LB']。对于列表框,此值将是一个列表。要获得选择的项目,您可以参考values['LB'][0]

【讨论】:

    【解决方案2】:

    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]}" )
    

    【讨论】:

    • 如果用户使用“X”关闭窗口,您需要添加对事件 == sg.WIN_CLOSED 的检查。否则,当使用“X”时,您将永远留在事件循环中。
    • 谢谢 - 奇怪的是,我复制的原始源包含该测试,但它给出了一个错误,即未定义 WIN_CLOSED :-o 所以我删除了它,但显然从未检查过点击 X。我添加了event is None 的测试似乎是我得到的。刚刚从 PySimpleGui 4.18.2 更新到 4.20.0 还是一样的。
    猜你喜欢
    • 2015-11-20
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多