python - 为什么“添加”按钮只能工作一次?
问题描述
我希望能够多次使用“添加”按钮,但目前它只能使用一次。我只导入了 pysimplegui。这是代码的一部分,因为看起来我有字符限制或其他东西。希望不用再等3天了。。。
[sg.Text("Index")],
[sg.Listbox(load_list(), size=(17,16), key='-LISTBOX-')],
[sg.Button("Add", key='-ADD-'), sg.Button("Delete", key='-DELETE-')]
]
window = sg.Window("Index", layout)
add_window = sg.Window('Add a name', adicionar_layout)
# Event Loop
while True:
event, values = window.read()
if event is None:
break
if event == '-ADD-':
add, input = add_window.read()
if add == '-SUBMIT-':
new_name = input.get('-INPUTADD-')
with open('saved_names.txt', 'a') as f:
f.write('\n' + new_name)
window.Element('-LISTBOX-').Update((load_list()))
add_window.close()
print(load_list())
window.close()
解决方案
您add_window
在第一次事件后关闭-ADD-
,所以它在它之后不起作用。
添加一个新的弹出窗口以获取新名称并将输入值返回到主窗口。
import PySimpleGUI as sg
def popup_get_new_name():
layout = [
[sg.Text("New Name"), sg.Input(key='INPUT')],
[sg.Button("Submit"), sg.Button('Cancel')],
]
window = sg.Window("New Name", layout, modal=True)
while True:
event, values = window.read()
if event in (sg.WINDOW_CLOSED, "Cancel"):
new_name = None
elif event == "Submit":
new_name = values['INPUT']
break
window.close()
return new_name
sg.theme("DarkBlue3")
sg.set_options(font=("Courier New", 12))
layout = [
[sg.Button("Add")],
[sg.StatusBar("", size=(40, 1), key='STATUS')],
]
window = sg.Window('Add New Name', layout, finalize=True)
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
elif event == 'Add':
new_name = popup_get_new_name()
if new_name is not None:
window['STATUS'].update(value=new_name)
window.close()
推荐阅读
- java - Tomcat8.5 和 Openjdk11 NoClassDefFoundError: 无法初始化类 org.apache.cxf.attachment.AttachmentUtil
- java - 我可以替换构造函数中的getter函数(例如用super)吗?如何替换?
- python - 如何在使用带有 lambda 表达式的 pandas 应用函数时消除类型错误
- swift - 如何快速将 UIView 绘图转换为 GLKView?
- cakephp - 带有 CASE WHEN THEN ELSE 条件的 CakePHP 查询
- c++ - 使用 ffh.getFieldType() == "/Btn" 和 qpdf lib 检查复选框
- c# - 将 Web 应用身份验证转发到 API 服务
- ruby - Chef 服务器从 Chef 工作站返回 404 的刀命令
- cheerio - Cheerio:如何通过数据标签进行选择
- javascript - 只返回 id 名称的 querySelectorAll