Tkinter 从输入框中获取部分输入
Tkinter get partial input from Entry box
我是 Python 的 Tkinter 新手,我正在使用它来构建一个 UI 用于工作目的。
UI 将允许您通过零售商 ID(整数)、零售商名称或用户名搜索数据库中的企业列表。
我曾尝试在线搜索并花了很长时间试图在 Whosebug 上找到我要找的东西,但找不到我需要的东西。
我真正苦苦挣扎的是能够在搜索框中按部分字符串进行搜索并将结果显示在列表框中。下面的代码允许我 return 一个企业列表,但前提是我输入数据库中出现的企业的确切名称。
我想要实现的是,假设数据库中有 2 个零售商(显然这些只是示例):
“市场”
“超市”
如果我在输入框中键入“市场”,我希望在列表框中看到这两个。如果我键入“Super”或“Supermarket”,我希望只看到“Supermarket”零售商名称我也不希望它区分大小写。
然后我希望能够从结果中 select 开展业务并执行一些其他任务,例如发送自动电子邮件。
我可以访问 MySQL 服务器数据库。
代码如下:
# Search businesses
def search_now():
selected = drop.get()
sql = ""
if selected == "Search by...":
searched_label.config(text="You forgot to pick an option!")
if selected == "Business Name":
sql = "SELECT Retailer, Retailer_Name, Account_ID, Password FROM Retailers WHERE Retailer_Name like ?"
searched_label.config(text="Business(s):")
if selected == "Business ID":
sql = "SELECT Retailer, Retailer_Name, Account_ID, Password FROM Retailers WHERE Retailer like ?"
searched_label.config(text="Business(s):")
if selected == "Username":
sql = "SELECT Retailer, Retailer_Name, Account_ID, Password FROM Retailers WHERE Account_ID like ?"
searched_label.config(text="Business(s):")
searched = search_box.get()
#sql = "SELECT Retailer, Retailer_Name, Account_ID, Password FROM Retailers WHERE Retailer_Name like ?"
name = (f'%{searched}%', )
businesses = c.execute(sql, name)
businesses = c.fetchall()
#Clear the listbox
my_list.delete(0, END)
if not businesses:
searched_label.config(text="Business not found")
else:
for business in businesses:
my_list.insert(0, str(business[0]) + " " + business[1] + " " + business[2])
# Entry box to search businesses
search_box = Entry(root)
search_box.grid(row=1, column=1, padx=10, pady=10)
# Entry box label search businesses
search_box_label = Label(root, text="Enter Business name:")
search_box_label.grid(row=1, column=0, padx=1, pady=10)
# Entry box search button for businesses
search_button = Button(root, text="Search", command=search_now)
search_button.grid(row=1, column=4, padx=10, pady=10)
# Drop down box
drop = ttk.Combobox(root, value=["Search by...", "Business Name", "Business ID", "Username"])
drop.current(0)
drop.grid(row=1, column=2)
# Create searched result label
searched_label = Label(root, text="")
searched_label.grid(row=2, column=0, sticky=W, columnspan=2)
# Create a table
title_label = Label(root, text="CRM", font=("Helvetica", 16))
title_label.grid(row=0, column=0, columnspan=2, sticky=W, pady=10)
# Create a listbox
my_list = Listbox(root, width=50)
my_list.grid(row=10, column=0, columnspan=3, sticky=W, pady=10, padx=10)
root.mainloop()
希望所有这些信息对您有所帮助!
现在已修复!问题在于我在输入框中搜索字符串的方式。我需要使用“f-string”字符串格式化功能。
之前的错误代码:
已搜索 = search_box.get()
姓名=(已搜索,)
正确的代码
已搜索 = search_box.get()
名称 = (f'%{searched}%', )
我是 Python 的 Tkinter 新手,我正在使用它来构建一个 UI 用于工作目的。
UI 将允许您通过零售商 ID(整数)、零售商名称或用户名搜索数据库中的企业列表。
我曾尝试在线搜索并花了很长时间试图在 Whosebug 上找到我要找的东西,但找不到我需要的东西。
我真正苦苦挣扎的是能够在搜索框中按部分字符串进行搜索并将结果显示在列表框中。下面的代码允许我 return 一个企业列表,但前提是我输入数据库中出现的企业的确切名称。
我想要实现的是,假设数据库中有 2 个零售商(显然这些只是示例):
“市场” “超市”
如果我在输入框中键入“市场”,我希望在列表框中看到这两个。如果我键入“Super”或“Supermarket”,我希望只看到“Supermarket”零售商名称我也不希望它区分大小写。
然后我希望能够从结果中 select 开展业务并执行一些其他任务,例如发送自动电子邮件。
我可以访问 MySQL 服务器数据库。
代码如下:
# Search businesses
def search_now():
selected = drop.get()
sql = ""
if selected == "Search by...":
searched_label.config(text="You forgot to pick an option!")
if selected == "Business Name":
sql = "SELECT Retailer, Retailer_Name, Account_ID, Password FROM Retailers WHERE Retailer_Name like ?"
searched_label.config(text="Business(s):")
if selected == "Business ID":
sql = "SELECT Retailer, Retailer_Name, Account_ID, Password FROM Retailers WHERE Retailer like ?"
searched_label.config(text="Business(s):")
if selected == "Username":
sql = "SELECT Retailer, Retailer_Name, Account_ID, Password FROM Retailers WHERE Account_ID like ?"
searched_label.config(text="Business(s):")
searched = search_box.get()
#sql = "SELECT Retailer, Retailer_Name, Account_ID, Password FROM Retailers WHERE Retailer_Name like ?"
name = (f'%{searched}%', )
businesses = c.execute(sql, name)
businesses = c.fetchall()
#Clear the listbox
my_list.delete(0, END)
if not businesses:
searched_label.config(text="Business not found")
else:
for business in businesses:
my_list.insert(0, str(business[0]) + " " + business[1] + " " + business[2])
# Entry box to search businesses
search_box = Entry(root)
search_box.grid(row=1, column=1, padx=10, pady=10)
# Entry box label search businesses
search_box_label = Label(root, text="Enter Business name:")
search_box_label.grid(row=1, column=0, padx=1, pady=10)
# Entry box search button for businesses
search_button = Button(root, text="Search", command=search_now)
search_button.grid(row=1, column=4, padx=10, pady=10)
# Drop down box
drop = ttk.Combobox(root, value=["Search by...", "Business Name", "Business ID", "Username"])
drop.current(0)
drop.grid(row=1, column=2)
# Create searched result label
searched_label = Label(root, text="")
searched_label.grid(row=2, column=0, sticky=W, columnspan=2)
# Create a table
title_label = Label(root, text="CRM", font=("Helvetica", 16))
title_label.grid(row=0, column=0, columnspan=2, sticky=W, pady=10)
# Create a listbox
my_list = Listbox(root, width=50)
my_list.grid(row=10, column=0, columnspan=3, sticky=W, pady=10, padx=10)
root.mainloop()
希望所有这些信息对您有所帮助!
现在已修复!问题在于我在输入框中搜索字符串的方式。我需要使用“f-string”字符串格式化功能。
之前的错误代码:
已搜索 = search_box.get()
姓名=(已搜索,)
正确的代码
已搜索 = search_box.get()
名称 = (f'%{searched}%', )