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