【问题标题】:how to make word input ignore case sensitivity of words in database [duplicate]如何使单词输入忽略数据库中单词的大小写敏感性[重复]
【发布时间】:2020-09-26 01:52:44
【问题描述】:

我正在用 tkinter 开发一个字典应用程序。我有一些单词及其含义存储在 sqlite 数据库中,其中一个单词写成“XML”,“Access”。现在,每当我在条目小部件中输入诸如(xml 或 Xml 或 ACCESS 或访问)之类的词并单击搜索按钮时,它都会显示“未找到词”。我希望这个词忽略任何大小写敏感性。无论我输入“xml”或“Xml”或“ACCESS”或“access”之类的词,我都希望显示一个词的含义

import tkinter as tk
import sqlite3
from tkinter import messagebox
from ttkthemes import ThemedStyle
from tkinter import ttk
from PIL import ImageTk, Image
import os
import sys


########### DEF FOR SEARCH #######
def search(event=''):
    if getattr(sys, 'frozen', False):
        data_folder=sys._MEIPASS
    else:
        data_folder=os.getcwd()

    conn = sqlite3.connect(os.path.join(data_folder,'GI_DICTION4.db'))
    cur = conn.cursor()
    tex.delete(1.0, "end")
    data = v.get().swapcase()
    cur.execute("SELECT Meaning FROM Tables2 WHERE Words= ?", (data.swapcase(),))
    var = cur.fetchall()

    if var:
        tex.insert("end", var[0])  # accessing the meaning
    else:
         tex.insert("end","Word not found")



def refresh():
    entry.delete(0, "end")
    tex.delete(1.0, "end")


def fetch_data(word):
    if getattr(sys, 'frozen', False):
        data_folder=sys._MEIPASS
    else:
        data_folder=os.getcwd()
    conn = sqlite3.connect(os.path.join(data_folder,'GI_DICTION4.db'))
    cur = conn.cursor()
    cur.execute("select Words from Tables2 where Words like ? || '%'", (word,))
    allw = cur.fetchall()
    return allw


def on_key_release(event):
    qword = event.widget.get()
    allw = fetch_data(qword)
    listbox.delete(0, tk.END)
    for w in allw:
        listbox.insert(tk.END, w[0])


def on_select(event):
    entry.delete(0, tk.END)
    entry.insert(0, event.widget.selection_get())


########## GUI DESIGN ##############

【问题讨论】:

    标签: sql sqlite user-interface tkinter case-sensitive


    【解决方案1】:

    表中的数据是否全部以一种大小写形式存储,例如小写或大写。

    • 如果是,那么您可以使用string.lower()string.upper() 函数将python 字符串转换为。
    • 您还可以在 SQL 查询中使用 COLLATE NOCASE 来忽略单词的大小写。

      SELECT Meaning FROM Tables2 WHERE words = 'XML' COLLATE NOCASE

    检查这个答案 - How to set Sqlite3 to be case insensitive when string comparing?

    【讨论】:

    • 在这种情况下,您可以在将它传递给查询之前尝试这个 string.title()。
    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 2016-02-12
    • 1970-01-01
    • 2014-08-03
    • 2023-03-24
    • 2015-09-04
    • 2016-09-17
    • 2019-12-27
    相关资源
    最近更新 更多