有没有办法从 PySimpleGUI 中的 window 中删除某些输入而不删除其他输入?
Is there a way to remove certain inputs from a window in PySimpleGUI without removing others?
我是 新手 Python/PySimpleGUI 的新手,如果这太明显了,我深表歉意。 (此外,是的,这是我使用的来自 a Youtube tutorial 的代码,我不想对下面的代码有任何贡献。)
我有一个简单的程序,使用 pandas、pysimplegui 和 openpyxl 从最终用户(使用 PySimpleGUI windows)输入一组值到 Excel sheet;但是,有些字段我想保持不变(例如“日期”为 today.strftime("%m/%d/%y"))。这是我尝试过的方法:
将我想要的常量定义为变量:
bkey = 'My Name'
today = date.today()
date = today.strftime("%m/%d/%y")
然后,在 pysimplegui 中,让 sg.inputtext() 成为变量,例如:
[sg.Text('Entry By', size=(15,1)), sg.InputText(bkey)]
作为参考,这里有一个 window 以 key 作为输入:
[sg.Text('To Department', size=(15,1)), sg.InputText(key='To Department')]
然后在用户单击“提交”或“清除”的情况下调用 def Clear_Input():
def clear_input():
for key in values:
window[key]('')
return None
我不知道为什么 clear_input() 会清除 window 中的所有值,因为对我来说它是说任何值都是 window == '' 中的键,因此不应清除任何未定义为键(例如 bkey)的内容。
如果我能提供更多信息,请告诉我,我很乐意提供。再次,新手,提前抱歉。
这里是完整的源代码:
import PySimpleGUI as sg
import pandas as pd
from datetime import date
#color add to window_height
sg.theme('Topanga')
EXCEL_FILE = r'C:\Users\User\Desktop\DataEntry.xlsx'
df = pd.read_excel(EXCEL_FILE)
bkey = 'My Name'
today = date.today()
date = today.strftime("%m/%d/%y")
layout = [
[sg.Text('Please fill out the following fields:')],
[sg.Text('Service Tag', size=(15,1)), sg.InputText(key='Tag')],
[sg.Text('Serial Number (EPB)', size=(15,1)), sg.InputText(key='Serial Number')],
[sg.Text('Type of Equipment', size=(15,1)), sg.Combo(['Desktop', 'Laptop', 'Monitor', 'Tablet'], key='Type of Equipment')],
[sg.Text('New/Move', size=(15,1)), sg.InputText(key='New/Move')],
[sg.Text('User\'s Name', size=(15,1)), sg.InputText(key='User\'s Name')],
[sg.Text('From Room', size=(15,1)), sg.InputText(key='From Room')],
[sg.Text('To Room', size=(15,1)), sg.InputText(key='To Room')],
[sg.Text('To Department', size=(15,1)), sg.InputText(key='To Department')],
[sg.Text('Date', size=(15,1)), sg.InputText(date)],
[sg.Text('Attached Tag', size=(15,1)), sg.InputText(key='Attached Tag')],
[sg.Text('Entry By', size=(15,1)), sg.InputText(bkey)],
[sg.Submit(), sg.Button('Clear'), sg.Exit()]
]
window = sg.Window('simple data entry form', layout)
def clear_input():
for key in values:
window[key]('')
return None
while True:
event, values = window.read()
if event == sg.WIN_CLOSED or event == 'Exit':
break
if event == 'Clear':
clear_input()
if event == 'Submit':
df = df.append(values, ignore_index=True)
df.to_excel(EXCEL_FILE, index=False)
sg.popup('Data saved!')
clear_input()
window.close()
PySimpleGui.Window.read()
returns 两件事:event
和 values
。 event
包含对触发消息的任何事件的描述。 values
包含布局中所有输入组件的字典。该字典中的键是 Input
项目中的 key
参数。 value
是该输入项的当前值。
因此,clear_input
只是 运行 通过布局中的 Input
元素集,并将它们的值设置为空白。
关键是名称,如 bkey
和 key
在运行时没有意义。他们只是持有对对象的引用。 Input
对象都有键值,但它们是您在布局中设置的字符串。
如果您没有为选项键和选项 k 指定值,将为 Input 元素或某些其他元素生成默认键。
这里为你代码更新了一些语句
today = date.today()
now = today.strftime("%m/%d/%y") # date is the libray name
# In layout
[sg.Text('Date', size=(15,1)), sg.InputText(now, key='Date')], # Define the key
[sg.Text('Attached Tag', size=(15,1)), sg.InputText(key='Attached Tag')],
[sg.Text('Entry By', size=(15,1)), sg.InputText(bkey, key='Entry By')], # Define the key
# Tuple for the input elements not to clear
not_to_clear = ('Entry By', 'Date')
def clear_input():
# For elements in the window
for key, element in window.key_dict.items():
# If element is Input element and not in the not-to-clear tuple
if isinstance(element, sg.Input) and key not in not_to_clear:
element.update('')
我是 新手 Python/PySimpleGUI 的新手,如果这太明显了,我深表歉意。 (此外,是的,这是我使用的来自 a Youtube tutorial 的代码,我不想对下面的代码有任何贡献。)
我有一个简单的程序,使用 pandas、pysimplegui 和 openpyxl 从最终用户(使用 PySimpleGUI windows)输入一组值到 Excel sheet;但是,有些字段我想保持不变(例如“日期”为 today.strftime("%m/%d/%y"))。这是我尝试过的方法:
将我想要的常量定义为变量:
bkey = 'My Name'
today = date.today()
date = today.strftime("%m/%d/%y")
然后,在 pysimplegui 中,让 sg.inputtext() 成为变量,例如:
[sg.Text('Entry By', size=(15,1)), sg.InputText(bkey)]
作为参考,这里有一个 window 以 key 作为输入:
[sg.Text('To Department', size=(15,1)), sg.InputText(key='To Department')]
然后在用户单击“提交”或“清除”的情况下调用 def Clear_Input():
def clear_input():
for key in values:
window[key]('')
return None
我不知道为什么 clear_input() 会清除 window 中的所有值,因为对我来说它是说任何值都是 window == '' 中的键,因此不应清除任何未定义为键(例如 bkey)的内容。
如果我能提供更多信息,请告诉我,我很乐意提供。再次,新手,提前抱歉。
这里是完整的源代码:
import PySimpleGUI as sg
import pandas as pd
from datetime import date
#color add to window_height
sg.theme('Topanga')
EXCEL_FILE = r'C:\Users\User\Desktop\DataEntry.xlsx'
df = pd.read_excel(EXCEL_FILE)
bkey = 'My Name'
today = date.today()
date = today.strftime("%m/%d/%y")
layout = [
[sg.Text('Please fill out the following fields:')],
[sg.Text('Service Tag', size=(15,1)), sg.InputText(key='Tag')],
[sg.Text('Serial Number (EPB)', size=(15,1)), sg.InputText(key='Serial Number')],
[sg.Text('Type of Equipment', size=(15,1)), sg.Combo(['Desktop', 'Laptop', 'Monitor', 'Tablet'], key='Type of Equipment')],
[sg.Text('New/Move', size=(15,1)), sg.InputText(key='New/Move')],
[sg.Text('User\'s Name', size=(15,1)), sg.InputText(key='User\'s Name')],
[sg.Text('From Room', size=(15,1)), sg.InputText(key='From Room')],
[sg.Text('To Room', size=(15,1)), sg.InputText(key='To Room')],
[sg.Text('To Department', size=(15,1)), sg.InputText(key='To Department')],
[sg.Text('Date', size=(15,1)), sg.InputText(date)],
[sg.Text('Attached Tag', size=(15,1)), sg.InputText(key='Attached Tag')],
[sg.Text('Entry By', size=(15,1)), sg.InputText(bkey)],
[sg.Submit(), sg.Button('Clear'), sg.Exit()]
]
window = sg.Window('simple data entry form', layout)
def clear_input():
for key in values:
window[key]('')
return None
while True:
event, values = window.read()
if event == sg.WIN_CLOSED or event == 'Exit':
break
if event == 'Clear':
clear_input()
if event == 'Submit':
df = df.append(values, ignore_index=True)
df.to_excel(EXCEL_FILE, index=False)
sg.popup('Data saved!')
clear_input()
window.close()
PySimpleGui.Window.read()
returns 两件事:event
和 values
。 event
包含对触发消息的任何事件的描述。 values
包含布局中所有输入组件的字典。该字典中的键是 Input
项目中的 key
参数。 value
是该输入项的当前值。
因此,clear_input
只是 运行 通过布局中的 Input
元素集,并将它们的值设置为空白。
关键是名称,如 bkey
和 key
在运行时没有意义。他们只是持有对对象的引用。 Input
对象都有键值,但它们是您在布局中设置的字符串。
如果您没有为选项键和选项 k 指定值,将为 Input 元素或某些其他元素生成默认键。
这里为你代码更新了一些语句
today = date.today()
now = today.strftime("%m/%d/%y") # date is the libray name
# In layout
[sg.Text('Date', size=(15,1)), sg.InputText(now, key='Date')], # Define the key
[sg.Text('Attached Tag', size=(15,1)), sg.InputText(key='Attached Tag')],
[sg.Text('Entry By', size=(15,1)), sg.InputText(bkey, key='Entry By')], # Define the key
# Tuple for the input elements not to clear
not_to_clear = ('Entry By', 'Date')
def clear_input():
# For elements in the window
for key, element in window.key_dict.items():
# If element is Input element and not in the not-to-clear tuple
if isinstance(element, sg.Input) and key not in not_to_clear:
element.update('')