AttributeError: tuple obj has no attribute in .py script with PySimpleGUI

AttributeError: tuple obj has no attribute in .py script with PySimpleGUI

我编写了一个 Python 脚本,它循环遍历文件夹结构并在文件中查找给定值。该脚本运行良好,但现在我正在尝试添加一个 GUI,但无法通过此错误。在gui中点击'search'时出现错误,触发事件

文件“C:\Users\xxxxx\Documents\Python Scripts\FileContentsSearcherwWithFileWrite_GUIv02.py”,第 66 行,在 事件,值 = window().read AttributeError: 'tuple' 对象没有属性 'read'

认为 我明白 window 试图 read/display 在脚本中某处有一个元组,但我想不通出它可能是什么。有人能帮忙吗?

谢谢

import os, PySimpleGUI as sg

document_ext = ['.SVG', '.txt', '.XML']

layout = [
           [
            sg.Text("This program can be used to search for a particular \nterm in all files under the folder location provided.") 
           ],
           [
            sg.Listbox(document_ext, size=(10,5), key="-File_Ext-")
           ],
          [
            sg.Text('What would you like to search for?')
           ],
           [
            sg.InputText(size=(30,5), key="-Search_Term-")
           ],
           [
            sg.Text("Choose Folder to Search:")
            ],
           [
            sg.In(size=(30,5), key="-FOLDER-"),
            sg.FolderBrowse()
           ],
           [
            sg.Text("Where Should Report Be Saved?")
            ],
           [
            sg.In(size=(30,5), key="-FOLDER2-"),
            sg.FolderBrowse()
           ],
           [
            sg.Button(button_text="Search")    
           ],
           [
            sg.Text(key="-Output-", size=(30,5))    
           ]
        ]

window = sg.Window("File Contents Searcher", layout)#, margins=(200,200))

def main(svalue, location, ext):
    number_found = 0
    search_results = ""
    os.chdir(location)
    for dpath, dname, fname in os.walk(os.getcwd()):
        for name in fname:
            pat = os.path.join(dpath,name)
            if name.endswith(ext):
                with open(pat) as f:
                    if svalue in f.read():
                        number_found += 1
                        search_results += "--- \nFilename: {} \nFilepath: {} \n".format(name, pat)
    search_results_head = "\"{}\" was found in {} files. \n \n".format(svalue, number_found)
    output = "RESULTS \n \n" + search_results_head + search_results
    return output, search_results_head

def create_log(sl, s_res):
     os.chdir(sl)
     print(os.getcwd())
     with open("FileSearchResults.txt", "w") as f:
         f.write(s_res)
     return "Report Saved"

while True:
    event, values = window().read
    if event == sg.WIN_CLOSED:
        break
    if event == "Search":
        m = main("-Search_Term-", r"-FOLDER-", "-File_Ext-")
        c = create_log(r"-FOLDER2-", m[0])
        window("-Output-").update(print(m[1] + " " + c))
window.close() 

你可以试试这个。

import os, PySimpleGUI as sg

document_ext = ['.SVG', '.txt', '.XML']

layout = [
           [
            sg.Text("This program can be used to search for a particular \nterm in all files under the folder location provided.") 
           ],
           [
            sg.Listbox(document_ext, size=(10,5), key="-File_Ext-")
           ],
          [
            sg.Text('What would you like to search for?')
           ],
           [
            sg.InputText(size=(30,5), key="-Search_Term-")
           ],
           [
            sg.Text("Choose Folder to Search:")
            ],
           [
            sg.In(size=(30,5), key="-FOLDER-"),
            sg.FolderBrowse()
           ],
           [
            sg.Text("Where Should Report Be Saved?")
            ],
           [
            sg.In(size=(30,5), key="-FOLDER2-"),
            sg.FolderBrowse()
           ],
           [
            sg.Button(button_text="Search")    
           ],
           [
            sg.Multiline(key="-Output-", size=(30,5))    
           ]
        ]

window = sg.Window("File Contents Searcher", layout)#, margins=(200,200))

def main(svalue, location, ext):
    number_found = 0
    search_results = ""
    location = (values["-FOLDER-"]) # Set values to window.read() values
    svalue= (values["-Search_Term-"]) # Ditto for this
    ext = str(values["-File_Ext-"][0].lower()) # Needs this to choose value and make it case insensitive

    #os.chdir(location) # Don't need
    for dpath, dname, fname in os.walk(location): #Hardcoded to value above
        for name in fname:
            pat = os.path.join(dpath,name)
            if name.endswith(ext):
                with open(pat) as f:
                    if svalue in f.read():
                        number_found += 1
                        search_results += "--- \nFilename: {} \nFilepath: {} \n".format(name, pat)
    search_results_head = "\"{}\" was found in {} files. \n \n".format(svalue, number_found)
    output = "RESULTS \n \n" + search_results_head + search_results
    return output, search_results_head

def create_log(sl, s_res):
     s1 = (values["-FOLDER2-"])  # Hardcoded again
     print(os.getcwd())
     with open("FileSearchResults.txt", "w") as f:
         f.write(s_res)
     return "Report Saved"

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == "Search":
        m = main("-Search_Term-", "-FOLDER-", "-File_Ext-")
        print(m)
        c = create_log(r"-FOLDER2-", m[0])
        window["-Output-"].update(m[1] + " " + c)
window.close()