我使用PySimpleGUI和Python来创建一个基于csv文件和xml-schemafile(xsd)输入的xslt文件。这个想法是为用户提供一个GUI来选择csv头并Map到xml元素/标签。我选择了一个用户创建所需行的布局,因为行数取决于用户。然后使用xslt文件转换为验证模式的xml文件。
我遇到的问题是,如果输入字段包含空值或“",xslt就不能作为Transformer工作。所以我正在寻找一种方法来从输出中忽略输入,指出“这一行的输入被传递给dict输出,而不是这一行”。
下面是我的一个实验,我将行设置为不可见,并在else语句的“print(values)”中添加一个复选框来检查选择哪些行作为输出(没有所有的CSV/XML的东西;#event == '-CREATEX-'是我用来创建输出xslt的dict的方法。仅仅使行不可见是行不通的,因为它没有被删除(根据我的研究,你不能删除,只能隐藏)。我对任何基于PySimpleGUI和Python的解决方案都持开放态度。我试过让“print(values)”只打印带有key的dict:values从可见行和“visible=True”复选框,但没有运气。
import PySimpleGUI as sg
def create_row(row_counter, row_number_view):
row = [sg.pin(
sg.Col([[
sg.Button("X", border_width=0, button_color=(sg.theme_text_color(), sg.theme_background_color()), key=('-DEL-', row_counter)),
# Combo values represent input from headers from csvfile and elements from xsd-schemafile
sg.Combo(['INFone', 'INFtwo', 'INFthree'], key='-ERRAND_INFILE-'),
sg.Combo(['SCHone', 'SCHtwo', 'SCHthree'], key='-ERRAND_SCHEMA-'),
sg.Checkbox('Pass as output:', default=False, key='-OUT-'),
]],
key=('-ROW-', row_counter), visible=True
))]
return row
layout = [ [sg.Text('Experimenting with GUI input to output via dict to xsltfile', font='15')],
[sg.Column([create_row(0, 1)], k='-ROW_PANEL-')],
[sg.Submit('Create', key='-CREATEXSLT-', size=10, button_color='black on pink'), sg.Text('', size=10),
sg.Button('+Row', enable_events=True, k='-ADD_ITEM-', tooltip='Add new row'),
sg.Button("Exit", enable_events=True, key='-EXIT-', tooltip='Close window')],
[sg.Output(size=(65,5), key='output', pad=5, background_color= 'pink', echo_stdout_stderr=True)],
]
window = sg.Window('test',
layout, use_default_focus=False, font='15')
row_counter = 0
row_number_view = 1
while True:
event, values = window.read()
if event == sg.WIN_CLOSED or event == '-EXIT-':
break
elif event == '-ADD_ITEM-':
row_counter += 1
row_number_view += 1
window.extend_layout(window['-ROW_PANEL-'], [create_row(row_counter, row_number_view)])
elif event[0] == '-DEL-':
row_number_view -= 1
window[('-ROW-', event[1])].update(visible=False)
window[('-ROW-', event[1])].Widget.pack_forget()
#window[('-ROW-', event[1])].Widget.destroy()
else:
#event == '-CREATEXSLT-'
print(values)
window.close()
字符串
代码基于:https://github.com/amithr/PySimpleGUI-Dynamically-Add-Elements/blob/main/main.pyScreen dump of GUI
1条答案
按热度按时间lskq00tm1#
好的. dict理解对我来说是有效的,创建新的dict而不需要不需要的键值对,不需要复选框:
字符串