我想制作一个输入列值的GUI程序 程序必须转到输入值等于该行值的行 并在文本框中显示特定的行值 但是我对如何做到这一点一无所知。
我尝试使用while循环来执行此操作,因此它将搜索整个excel文件,以检查输入数据的值是否等于文本框中的数据,但操作不正确。
我正在使用蟒蛇使用python 3.7.0。
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()
我希望程序输入发票编号的值,并在整个数据库中搜索该编号,然后在文本框中打印该行。
答案 0 :(得分:0)
首先,您没有在代码中定义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)