Как создать форму поиска с помощью tkinter Python для поиска в базе данных SQLITE3?

Я хочу использовать Tkinter для создания формы поиска, в которой пользователь может ввести имя, которое он хочет видеть, из базы данных SQLite3. База данных с именем New_Assignment содержит все сведения о человеке. Но я не понимаю, как подключить Tkinter к базе данных и использовать имя для поиска? Это то, что я получил до сих пор.

import sqlite3
conn = sqlite3.connect('new_assignment.db')
c = conn.cursor()
from tkinter import *
top = Tk()
top.title('Search form')
person_name = Entry()
person_name.pack(side = RIGHT, expand = True)
mainloop()

person Manjil Lamichhane    schedule 17.03.2018    source источник
comment
Вероятно, это слишком широкий вопрос для SO; вы можете зайти на страницу python.org, перейти в Сообщество и найти IRC-канал или список рассылки python-list. Но как подсказка: вам нужно создать кнопку, которая при нажатии вызывает функцию. Внутри этой функции вам нужно получить доступ к содержимому person_name, что вы можете сделать, запросив Entry его текст или используя Tk StringVar, как рекомендовано в главе Tkinter Book о Entry. В более общем смысле, если вы прочитали соответствующую часть Книги и все еще застряли, у вас должен быть более конкретный вопрос, который подходит сюда.   -  person abarnert    schedule 17.03.2018


Ответы (1)


Чтобы получить текст из виджета Entry, используйте метод get() (он возвращает строку в текстовом поле).

name_box = Entry()
name_box.pack(side=RIGHT, expand=True)

person_name = name_box.get()

Однако вам потребуется добавить кнопку, как говорит @abarnert в комментариях. Прикрепите к нему эту функцию:

def get_name():
  global person_name
  person_name =  name_box.get()
  data = c.fetchall()
  print(data)
  for row in data:
      searchlist.append(row)
      var1=str(person_name)
      read_from_db(var1) 

(Конечно, измените read_from_db(), чтобы он принимал переменную следующим образом:

def read_from_db(var):
    curs.execute("SELECT *" + " FROM personal WHERE Name LIKE (?)", ('%'+var+'%',))

)

Пример кода кнопки может выглядеть так:

button = Button(top, text="Display text", command=get_name)

Соедините все вместе:

import sqlite3

conn = sqlite3.connect('new_assignment.db')
c = conn.cursor()

from tkinter import *

top = Tk()
top.title('Search form')

name_box = Entry()
name_box.pack(side = RIGHT, expand = True)

def get_name():
    global person_name
    person_name = name_box.get()
    data = c.fetchall()
    print(data)
    for row in data:
        searchlist.append(row)
        var1=str(person_name)
        read_from_db(var1) 


def read_from_db(var):
    curs.execute("SELECT *" + " FROM personal WHERE Name LIKE (?)", ('%'+var+'%',))


person_name = ""
button = Button(top, text="Display text", command=get_name)
button.pack()


mainloop()
person lyxal    schedule 17.03.2018
comment
def read_from_db(): curs.execute(SELECT * + FROM personal WHERE Name LIKE (?), ('%'+var1+'%',)) data = curs.fetchall() print(data) для строки в data: список поиска .append(row) var1=str(name_box) read_from_db() после того, как я добавил этот код, все еще не удалось получить какие-либо данные? - person Manjil Lamichhane; 18.03.2018