Sqlite 基于tkinter StringVar的动态where子句

Sqlite 基于tkinter StringVar的动态where子句,sqlite,tkinter,Sqlite,Tkinter,这里仍然有一些问题: 我附上了3个截图来说明最终的工具和我目前试图修复的bug 因此,我想要实现的是,该工具中的所有组合框都会根据每个组合框之前的组合框输入进行过滤 现在我尝试了Artikelbez\u Liste和ArtikelNr\u Liste。结果是,如果我为Artikelbez_列表选择一个值,则ArtikelNr_列表会弹出一个新字段,并对Artikelbez_列表的输入进行过滤。到目前为止还不错,但我不希望组合框显示为一个新框,但是ArtikelNr_Liste的现有框将被过滤为A

这里仍然有一些问题:

我附上了3个截图来说明最终的工具和我目前试图修复的bug

因此,我想要实现的是,该工具中的所有组合框都会根据每个组合框之前的组合框输入进行过滤

现在我尝试了
Artikelbez\u Liste
ArtikelNr\u Liste
。结果是,如果我为
Artikelbez_列表
选择一个值,则
ArtikelNr_列表
会弹出一个新字段,并对
Artikelbez_列表
的输入进行过滤。到目前为止还不错,但我不希望组合框显示为一个新框,但是
ArtikelNr_Liste
的现有框将被过滤为
Artikelbez_Liste
的输入,并在我更改
Artikelbez_Liste
的值时更新

有人能指出一个实现这一目标的方法吗

请在下面的相关窗口中找到代码片段。
在此处输入代码

提前谢谢

干杯, 一月

`类别特征材料(特征再现): definit(自我,根): self.root=根 自根几何(“600x600”) self.root.title(“Erfassung特征材料”) self.Menüpunkt=tkinter.ttk.Label(self.root,text=“Eigenmaterial”,style=“Eigen.TLabel”) 自助男装(pady=10) self.Kennzeichen_Liste() self.Artikelbez_Liste() self.ArtikelNr_Liste() self.widgets_特征材料() #self.Lagerort_Liste()


您发布的代码有什么问题?这不是你所期望的吗?它在做什么,它与你期望的有什么不同?还有,如果第一行代码被破坏,缩进。是的,我的错!在第二个组合框中,它根本不过滤任何内容。所以我确实得到了两个组合框,但我得到了数据库中存在的所有值,即使我在第一个组合框中选择了一个值……应该
self.emc2[“值”]=self.emc1\u缓存
be
self.emc2[“值”]=self.emc2\u缓存
?@CoolCloud:不,如果代码使用的是
lambda
,那么它必须是
self.Artike1Nr\u缓存()
。您做了哪些调试工作?您是否已验证在
Artikelbez_Liste
之后以及在用户做出选择之后是否正在调用
ArtikelNr_Liste
?您是否验证了
ArtBez
是否就是您假设的那样?您是否验证了
self.ArtNr
正在返回您认为应该返回的内容?
def Artikelbez_Liste(self):
    self.con = sqlite3.connect('//SERVER/Werkstatt/VR_Werkstatt.db')
    self.c = self.con.cursor()
    self.text_emc1 = tk.StringVar()
    self.ArtBez = self.c.execute("SELECT ArtBez FROM Eigenmaterial_Lagerbestand")
    self.emc1 = tk.Label(self.root, text="Artikelbezeichnung")
    self.emc1.pack()
    self.emc1 = tkinter.ttk.Combobox(self.root, textvariable=self.text_emc1, width=17, state='readonly') #text="Artikelbezeichnung"
    self.emc1_cache = list()
    for ArtBez in self.ArtBez:
        self.emc1_cache.append(ArtBez)
    self.emc1["values"] = self.emc1_cache
    self.emc1.pack()
    #self.text_emc1.trace("w", self.ArtikelNr_Liste)
    self.text_emc1.trace("w", lambda name, index, mode: self.ArtikelNr_Liste())
    self.c.close()
    self.con.close()

def ArtikelNr_Liste(self):
    ArtBez = self.text_emc1.get()
    #self.text_emc2 = tk.StringVar()
    self.con = sqlite3.connect('//SERVER/Werkstatt/VR_Werkstatt.db')
    self.c = self.con.cursor()
    self.ArtNr = self.c.execute("SELECT ArtNr FROM Eigenmaterial_Lagerbestand WHERE ArtBez = ?",(self.text_emc1.get(),))
    self.emc2 = tk.Label(self.root, text="Artikelnummer")
    self.emc2.pack()
    self.emc2 = tkinter.ttk.Combobox(self.root,  text="Artikelnummer", width=17, state='readonly')#textvariable = self.text_emc2,
    self.emc2_cache = list()
    for ArtNr in self.ArtNr:
        self.emc2_cache.append(ArtNr)
    self.emc2["values"] = self.emc2_cache
    self.emc2.pack()
    #self.text_emc2.trace("w", lambda name, index, mode: self.Lagerort_Liste())
    self.c.close()
    self.con.close()

def widgets_Eigenmaterial(self):
    self.l5 = tk.Label(self.root, text="Anzahl")
    self.l5.pack()
    self.db5 = tk.StringVar()
    self.e5 = tk.Entry(self.root, textvariable=self.db5)
    self.e5.pack()
    self.l6 = tk.Label(self.root, text="Lagerort")
    self.l6.pack()
    self.db6 = tk.StringVar()
    self.e6 = tk.Entry(self.root, textvariable=self.db6)
    self.e6.pack()

    # Definition des Submit-Buttons (Erfasste Daten in DB schreiben)
    self.button_submit = tkinter.ttk.Button(self.root, text="Daten Speichern",  style='Speichern.TButton',
                                   command=lambda: self.submit_Eigenmaterialverbrauch_to_db())
    self.button_submit.pack(padx=15, pady=15)`