Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySimpleGUI中InputText的Read()方法仅读取具有可变布局的最后一行_Python_User Interface_Input_Pysimplegui - Fatal编程技术网

Python PySimpleGUI中InputText的Read()方法仅读取具有可变布局的最后一行

Python PySimpleGUI中InputText的Read()方法仅读取具有可变布局的最后一行,python,user-interface,input,pysimplegui,Python,User Interface,Input,Pysimplegui,我正在使用PySimpleGUI库,并试图制作一个GUI(下面的代码)来输入一个码字拼图(基本上与纵横字谜相同的格式)。我希望我的GUI是一个指定维度的文本框数组,可以接受数字或字母 它构建了一个格式正确的GUI(),但当我在每个框()中输入数字1-9并单击“确定”时,输出到控制台的是:“7,8,9,,,,,,,,,,”,因此我假设它只读取最后一组输入。如果我将最后一行留空,并像以前一样填充顶部的两行,则会将“,,,,,,,,”输出到控制台。我尝试将列表理解改为for循环,得到了相同的结果,但当

我正在使用PySimpleGUI库,并试图制作一个GUI(下面的代码)来输入一个码字拼图(基本上与纵横字谜相同的格式)。我希望我的GUI是一个指定维度的文本框数组,可以接受数字或字母

它构建了一个格式正确的GUI(),但当我在每个框()中输入数字1-9并单击“确定”时,输出到控制台的是:“7,8,9,,,,,,,,,,”,因此我假设它只读取最后一组输入。如果我将最后一行留空,并像以前一样填充顶部的两行,则会将“,,,,,,,,”输出到控制台。我尝试将列表理解改为for循环,得到了相同的结果,但当我硬编码布局(下面的代码)并输入1-9时,我得到了所需的“1,2,3,4,5,6,7,8,9”。如何使用变量实现PySimpleGUI的布局

#原始代码
将PySimpleGUI导入为sg
def entryGUI(长度、宽度):
行=[sg.InputText('',大小=(3,1))表示范围内的i(长度)]
entryLayout=[范围内i的行(宽度)]
entryLayout.append([sg.CloseButton(“确定”),sg.CloseButton(“取消”)]))
entryWin=sg.Window(“码字解算器”).Layout(entryLayout)
按钮,值=entryWin.Read()
对于值中的值:
打印(值+”,“,end=”“)
entryGUI(3,3)
#硬编码代码
将PySimpleGUI导入为sg
def entryGUI(长度、宽度):
入口布局=[
[sg.InputText(“”,大小=(3,1)),sg.InputText(“”,大小=(3,1)),sg.InputText(“”,大小=(3,1)),
[sg.InputText(“”,大小=(3,1)),sg.InputText(“”,大小=(3,1)),sg.InputText(“”,大小=(3,1)),
[sg.InputText(“”,大小=(3,1)),sg.InputText(“”,大小=(3,1)),sg.InputText(“”,大小=(3,1)),
[sg.CloseButton(“确定”)、sg.CloseButton(“取消”)]
]
entryWin=sg.Window(“码字解算器”).Layout(entryLayout)
按钮,值=entryWin.Read()
#如果按钮!=“好的”:
#退出()
#其他:
对于值中的值:
打印(值+”,“,end=”“)
#返回值
entryGUI(3,3)

您遇到的问题是,您创建了一个名为
line
的变量,它是一个包含3个对象的列表。元素是单独的对象。代码实例化了3个InputText元素,并将它们堆叠在一起。这意味着您在每一行上使用完全相同的3个输入元素

解决这个问题的一种方法是创建9个InputText元素,就像您手动创建的一样,而是构建在一个循环中

请尝试以下代码:

import PySimpleGUI as sg

def entryGUI(length, width):
    entryLayout = []
    for i in range(width):
        line = [sg.InputText('', size=(3, 1)) for i in range(length)]
        entryLayout.append(line)
    entryLayout.append([sg.CloseButton("OK"), sg.CloseButton("Cancel")])

    entryWin = sg.Window("CodeWord Solver").Layout(entryLayout)
    button, values = entryWin.Read()
    print (values)
    for value in values:
        print(value + ",", end="")

entryGUI(3, 3)
或者对于更短更简单的一个:

import PySimpleGUI as sg

def entryGUI(length, width):
    entryLayout = [[sg.InputText('', size=(3, 1)) for i in range(length)] for _ in range(width)] + [[sg.CloseButton("OK"), sg.CloseButton("Cancel")]]

    entryWin = sg.Window("CodeWord Solver").Layout(entryLayout)
    button, values = entryWin.Read()
    print(','.join(values))

entryGUI(3, 3)

工作起来很有魅力-谢谢!我没想到这会是一个如此简单的解决方案,简单的GUI,你会惊讶于答案是简单的?;-)很高兴它对你有用,你正在尝试这个软件包。您可能想考虑在项目的GITHUB上发布问题。