Как извлечь конкретное значение строки при вводе значения конкретной строки - PullRequest
0 голосов
/ 09 января 2019

Я хочу сделать программу с графическим интерфейсом, которая вводит значение столбца программа должна перейти к строке, в которой введенное значение равно значению строки и отобразить конкретное значение строки в текстовом поле но я не знаю, как это сделать.

Я попытался использовать цикл while, чтобы сделать это, чтобы он искал весь файл Excel, чтобы проверить, равно ли значение введенных данных данным в текстовом поле, но он не прошел должным образом.

Я использую Python 3.7.0 с помощью Anaconda.

from tkinter import *
import openpyxl

a = Tk()
a.title('Return Book')
a.geometry('500x200')
heading = Label(a,text = 'Return Book')
heading.grid(row = 0,column = 1)
lab1 = Label(a,text = 'Enter Invoice Number:')
lab1.grid(row = 1, column = 0)
inv_field = Entry(a)
inv_field.grid(row = 1, column = 1)
inv_field.get()
find = Button(a,text = 'Find',width = 4,command =a.destroy)
find.grid(row = 2, column = 1)


def find():
    ##extradiction
    ##location of excel file
    path = "E:\Library Management\issue.xlsx"
    # workbook object is created 
    wb = openpyxl.load_workbook(path)   
    sheet = wb.active 
    max_col = sheet.max_column 

    # Will print a particular row value 
    for i in range(1, max_col + 1): 
    cell_obj = sheet.cell(row = 2, column = i) 
    print(cell_obj.value, end = " ")



a.mainloop()

Я ожидаю, что программа введет значение номера счета, найдет номер во всей базе данных и напечатает строку в текстовом поле.

1 Ответ

0 голосов
/ 10 января 2019

Сначала вы не определили textbox в своем коде для отображения результатов поиска. После того, как вы используете a.destroy в command опции кнопки find, она должна быть установлена ​​на функцию find. Также вы используете то же имя find для кнопки поиска и функции поиска.

Предложить добавить виджет Text:

book_info = Text(a, width=40, height=5)
book_info.grid(...)

Затем переименуйте функцию find() в find_book() и добавьте новый update_text(), чтобы отобразить результат поиска, как показано ниже:

def update_text(info):
    book_info.delete(1.0, 'end')
    book_info.insert('end', info)

def find_book():
    inv_no = inv_field.get()
    if inv_no:
        wb = openpyxl.load_workbook('E:\Library Management\issues.xlsx')
        sheet = wb.active
        for row in sheet.rows:
            # assume invoice no is in column 1
            if row[0].value == inv_no:
                update_text('\n'.join(str(cell.value) if cell.value else '' for cell in row))
                return
        wb.close()
        update_text('Book not found')

Наконец, измените параметр command кнопки find, чтобы вызвать функцию find_book():

find = Button(a, text='Find', command=find_book)
...