【问题标题】:Python tkinter - retrieve SQLite ID from ttk.comboboxPython tkinter - 从 ttk.combobox 检索 SQLite ID
【发布时间】:2020-08-15 20:47:52
【问题描述】:

我有一个 ttk.combobox,其中填充了数据库中的数据。当用户选择数据时,我需要检索所选数据的 ID。

我对此有一个解决方案,但我确信有一个更优雅和简单的解决方案,但我找不到。我用“。”拆分 SQL 行 ID,而不是从 Combobox 我将字符串转换为由“。”拆分的列表并检索 ID 的 list[0]。

代码示例:

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()

【问题讨论】:

  • 你想要的是GetID = int(pickedString.split('.')[0])吗?

标签: python sqlite tkinter ttk


【解决方案1】:

你可以从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]获取GetIDFromDropDown()中的ID:

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

【讨论】:

  • 谢谢..这是更优雅的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-13
  • 2013-07-12
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多