Search the data on the text file and Printing in GUI with Tkinter

Question:

I am writing a python program to search the data on the text file in GUI

The search function normally gives the result (in CLI). I want to use it with Tkinter, but when I pull the input with the Tkinter Entry function, my search function does not work.

Whatever I write, it outputs the data in the entire text file. I think the problem is in the if msg.get() in line:

The search function is below.

def search():
    with open(r"loglar.txt", 'r') as fp:
        for l_no, line in enumerate(fp):
            lineNum = l_no + 1
            # search string
            if msg.get() in line:
                lineNumber = ('Line Number:', lineNum)
                lineWord = ('Line:', line)
                print(lineNumber)
                print(lineWord)

Also this is my Tkinter Function

def getInfo():
msg = entry.get()
print(type(msg))
print(msg)
search()
Asked By: Lordke

||

Answers:

def search(msg):  # add 'msg' as a parameter for the search function
    with open(r"loglar.txt", 'r') as fp:
        for l_no, line in enumerate(fp):
            lineNum = l_no + 1
            # search string
            if msg in line:  # just use 'msg' here, not 'msg.get()'
                lineNumber = ('Line Number:', lineNum)
                lineWord = ('Line:', line)
                print(lineNumber)
                print(lineWord)


def getInfo():
    msg = entry.get()
    print(type(msg))
    print(msg)
    search(msg)  # search for msg


Now, when you call get_info() it will call search() for you using the contents of your entry as the msg parameter. You can, of course, also just call search(entry.get()) whenever you like.

Answered By: JRiggles
def parse_date(date_str):
    # format mm/dd/yy HH:MM:SS[.NNNNNN]
    date_fmt = '%m/%d/%y %H:%M:%S'
    if '.' in date_str:
        date_fmt += '.%f'
    return datetime.strptime(date_str, date_fmt)






#function to search string in text
def search(msg, startingDate, endingDate, beforeLine, varBefore):
    # clear current result
    text.delete('1.0', 'end')
    with open('OAM.log', 'r', encoding='latin1') as fp:
        global l_no
        for l_no, line in enumerate(fp, 1):
            if msg and msg not in line:
                # does not contain search message, skip it
                continue
            if startingDate or endingDate:
                # get the timestamp
                timestamp = parse_date(line[1:25])
                # within startingDate and endingDate ?
                if startingDate and timestamp < startingDate:
                    # before given starting date, skip it
                    continue
                if endingDate and timestamp > endingDate:
                    # after given ending date, skip it
                    continue
                
            # insert the log
            text.insert('end', ' n ')
            text.insert('end', f'Line Number: {l_no} Log: {line}')
            text.insert('end', ' n ')



def getInfo():
    msg = edit.get() if var1.get() == 1 else None
    startingDate = parse_date(tarih1.get()) if var2.get() == 1 else None
    endingDate = parse_date(tarih2.get()) if var3.get() == 1 else None
    afterLine = afterEntry.get() if varAfter.get() == 1 else None
    beforeLine = beforeEntryVar.get() if varBefore.get() == 1 else None
    afterLine = afterEntry.get() if varAfter.get() == 1 else None
    
    
    search(msg, startingDate, endingDate, beforeLine, afterLine)
Answered By: Matthew
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.