首页 > 解决方案 > 将元组作为键传递

问题描述

我正在尝试将文本框输入捕获为一个元组,并将其传递给一个for循环,该循环将为元组中的每个项目执行一个操作。理想情况下,这个元组将是动态调整大小的,即程序的一次迭代可能将元组传递为(“1”,“2”,“3”),而另一个可能是(“1”)。然后,在下面的代码中,我尝试打印元组的每个项目。

import PySimpleGUI as sg

layout = [[sg.InputText('',key = '-IN-'), sg.Button("OK")]]

# Create the window
window = sg.Window("Window Name", layout, margins=(256, 144))

# Create an event loop
while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED or event =="Cancel":
        break
    name = [values['-IN-']]
    listLength = len(name)

# What I would like to do:
    for i in range(listLength):
         print(name[i])

我还没有找到很好的文档。我所知道的是,键“可以是任何东西(整数、元组、对象)。除了列表之外的任何东西。列表不是有效的键,因为在 Python 中列表不是可散列的,因此不能用作字典中的键。但是,元组可以。 " (PysimpleGUI 食谱)。

密钥'-IN-'需要更改为某些内容。我认为键需要分配给一个元组,但我还没有看到任何关于该语法的示例。有没有我可以参考的文档?成为元组的键应该是什么样子?我更愿意将文本框输入作为数组传递,但我还没有看到任何关于键数组的信息。

标签: pythontuplespysimplegui

解决方案


There's nothing special, just using tuple as key of element.

For example, if you create an input table, by using tuple key, like (row, column), it will be much easy to refer each input element, something like array index.

You can find tuple as the value of option key of element, also access the dictionary values by tuple key.

enter image description here

import PySimpleGUI as sg

def main():
    layout = [
        [sg.Input(size=(10, 1), key=(i, j)) for j in range(3)] for i in range(5)
    ] + [
        [sg.Button('OK')]
    ]
    window = sg.Window("Title", layout, finalize=True)

    while True:
        event, values = window.read()
        if event == sg.WINDOW_CLOSED:
            break
        elif event == 'OK':
            data = [[values[(i, j)] for j in range(3)] for i in range(5)]
            print(data)

    window.close()

if __name__ == '__main__':
    main()

After OK button clicked

[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9'], ['10', '11', '12'], ['13', '14', '15']]

推荐阅读