【问题标题】:Passing a tuple as a key将元组作为键传递
【发布时间】:2021-04-02 13:32:01
【问题描述】:

我正在尝试将文本框输入捕获为元组,并将其传递给 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-' 更改为某些内容。我认为键需要分配给一个元组,但我还没有看到任何关于该语法的示例。有没有我可以参考的文档?成为元组的键应该是什么样子?我更愿意将文本框输入作为数组传递,但我还没有看到任何关于键数组的信息。

【问题讨论】:

  • 这是一个元组的键:dictionary[(1, 2, 3)] = 4
  • 它不是“除了列表之外的任何东西”——它是任何可散列的东西。很多东西可能是不可哈希的。列表并不特殊。
  • 提供给InputText 的文本在哪里以及如何转换为元组?你把那部分漏掉了吗?你可能把tuples and lists 混为一谈了吗? (您的name = [values['-IN-']] 行将输入 in 放入列表中,而不是将其转换为 列表。)

标签: python tuples pysimplegui


【解决方案1】:

没什么特别的,就是用元组作为元素的键。

例如,如果您创建一个输入表,通过使用元组键,如(row, column),将很容易引用每个输入元素,如数组索引。

你可以找到元组作为元素的选项key的值,也可以通过元组键访问字典values

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()

点击OK按钮后

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

【讨论】:

    猜你喜欢
    • 2020-09-21
    • 1970-01-01
    • 2023-04-03
    • 2016-11-18
    • 2017-10-06
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多