Python tkinter - 从 ttk.combobox 中检索 SQLite ID。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python tkinter - 从 ttk.combobox 中检索 SQLite ID。相关的知识,希望对你有一定的参考价值。

我有一个ttk.combobox,里面填充了数据库中的数据,当用户选择数据时,我需要检索所选数据的ID。当用户选择数据时,我需要检索所选择的数据的ID,我有一个解决方案,但我相信有一个更优雅和简单的解决方案,但我找不到。

我有一个解决方案,但我相信有一个更优雅和简单的解决方案,但我不能找到一个。我用'.'分割SQL行ID,然后从Combobox中把字符串变成用'.'分割的列表,然后检索list[0]的ID。

代码示例。

from tkinter import *
from tkinter import ttk
import sqlite3
import DataBasePM

DBProjectManager2=DataBasePM.DBProjectManager2

def DropDownProjectView():
    con=sqlite3.connect(DBProjectManager2)
    con.row_factory = lambda curs, row:str(row[0])+". "+ row[1] #split ID with '.' 
    curs= con.cursor()
    curs.execute( """SELECT idProject, ProjectName 
                FROM Project WHERE idStatus=1""")
    rows=curs.fetchall()
    con.close()
    return rows

def GetIDFromDropDown(pickedString):
                 GetID=pickedString
                 GetID = list(GetID.split(".")) #id is before '.'
                 GetID=(int(GetID[0])) 
                 print(GetID)


root = Tk()
root.title("Tkinter ex")
root.geometry("400x400")

project_name_drop =  ttk.Combobox (root, value=DropDownProjectView() )
project_name_drop.pack()

buttonA=Button(root, text="get ID",command=lambda: GetIDFromDropDown(project_name_drop.get()))
buttonA.pack()

root.mainloop()
答案

你可以返回字典而不是列表 DropDownProjectView():

def DropDownProjectView():
    con=sqlite3.connect(DBProjectManager2)
    # return two items in each record: dropdown-item, id
    con.row_factory = lambda curs, row: (str(row[0])+". "+row[1], row[0])
    curs= con.cursor()
    curs.execute("SELECT idProject, ProjectName FROM Project WHERE idStatus=1")
    # build a dictionary with dropdown-item as key and id as value
    rows = r[0]:r[1] for r in curs
    con.close()
    return rows

那就用 list(rows.keys()) 作为下拉项。

rows = DropDownProjectView()
project_name_drop =  ttk.Combobox (root, value=list(rows.keys()))
project_name_drop.pack()

最后,用 rows[pickedString] 以获得ID GetIDFromDropDown():

def GetIDFromDropDown(pickedString):
    # cater exceptional case
    if pickedString in rows:
        id = rows[pickedString]
        print(id)
    else:
        print("invalid option: '%s'" % pickedString)

以上是关于Python tkinter - 从 ttk.combobox 中检索 SQLite ID。的主要内容,如果未能解决你的问题,请参考以下文章

python从tkinter小部件设置全局变量

Python3.5、Win32gui、Tkinter。我无法从屏幕获取 Pixel

折腾Python中的Tkinter

如何从Tkinter,Python中的Text小部件中移除焦点

如何使用 python 3 和 tkinter 模块从右到左对齐菜单栏中的项目?

从 Tkinter Python 中的浏览按钮设置条目值