Python打印列表对象[tkinter.StringVar Object at 0x01FEAD50],但不打印Lis



我正在尝试创建一个GUI,该GUI将能够使用MD5哈希来监控文件的完整性(更新日志的实际监控可以在命令提示符中进行)。

我让最初的命令行程序完美地工作,但在使用tkinter将其转换为基于GUI的版本时遇到了问题。

我使用GUI创建一个要在"addFiles"函数中监视的文件列表,但当我试图将该列表传递给"checkForIntegrity"函数(或在该函数中使用测试print(listOfFiles)代码打印该列表)时,我得到的只是[tkinter.StringVar object at 0x01FEAD50],但没有得到实际的列表。

我到处寻找答案,并尝试在不同的位置使用"listOfFiles.get()"的各种实现,但都没有成功。

我不知道为什么我只得到实际的列表对象而没有列出的项目,我的代码如下。

提前感谢大家。

edit:需要明确的是,我的"GUI()"函数创建了一个窗口,询问用户想要监视多少文件,并将其传递给"addFiles()"功能,该功能允许输入用户指定的文件数量。我需要能够通过列表将他们在GUI中指定的文件传递给程序。再次感谢。

import hashlib
import time
from tkinter import *
def main():  
    GUI()
def GUI():
    window = Tk()
    window.title("Integrity Checker")
    frame1 = Frame(window)
    frame1.pack()
    label1 = Label(frame1, text = "***Proof Of Concept Program That Monitors the Integriry of Files***")
    label1.grid(row = 1, column = 1)
    frame2 = Frame(window)
    frame2.pack()
    getNumberOfFiles = Label(frame2, text = "Insert Number of Files You Would Like to Check: ")
    getNumberOfFiles.grid(row = 2, column = 1)
    numberOfFiles = IntVar()
    NumberOfFilesOption = Entry(frame2, textvariable = numberOfFiles)
    NumberOfFilesOption.grid(row = 2, column = 2)
    button = Button(frame2, text = "OK", command = lambda : addFiles(numberOfFiles))
    button.grid(row = 2, column = 3)

    window.mainloop()

def addFiles(numberOfFiles):
    listOfFiles = []    
    window = Tk()
    window.title("Add Files")
    frame1 = Frame(window)
    frame1.pack()
    label1 = Label(frame1, text = "***Select The Files You Want To Monitor***")
    label1.grid(row = 1, column = 1)

    for i in range (numberOfFiles.get()):
        AddFile = Label(frame1, text = "Add File:")
        AddFile.grid(row = (i + 3), column = 1)
        FileName = StringVar()
        FileNameOption = Entry(frame1, textvariable = FileName)
        FileNameOption.grid(row = (i + 3), column = 2)
        button = Button(frame1, text = "OK", command = lambda : listOfFiles.append(FileName))
        button.grid(row = (i + 3), column = 3)
    button2 = Button(frame1, text = "Done", command = lambda : checkforINTEGRITY(numberOfFiles, listOfFiles))
    button2.grid(row = (i + 4), column = 2)
    window.mainloop()

def checkforINTEGRITY(numberOfFiles, listOfFiles):
    #Number = numberOfFiles.get()
    #listOfFiles = []
    #count = 0
    #numberOfFiles = eval(input("How many files would you like to monitor?: "))
    #while count < Number:
     #   filename = input("Enter the name of the file you would like to check: ")
     #   count += 1
     #   listOfFiles.append(filename)
    print(listOfFiles)
    i = 0
    originalList = []
    for file in listOfFiles:
        original_md5 = hashlib.md5(open(listOfFiles[i],'rb').read()).hexdigest()
        originalList.append(original_md5)        
        i += 1
    print(originalList)
    while True:
        i = 0
        while i < Number:
            md5_returned = hashlib.md5(open(listOfFiles[i],'rb').read()).hexdigest()
            print(md5_returned)
            if originalList[i] == md5_returned:
                print("The file", listOfFiles[i], "has not changed")
            else:
                print("The file", listOfFiles[i], "has been modified!")
            i += 1
        time.sleep(5)
main()

看起来您想在FileNameOption:上调用get方法

button = Button(frame1, text = "OK", command = lambda : listOfFiles.append(FileNameOption.get()))

通过这个更改,我能够在listOfFiles中获得字符串列表。

最新更新