英文:
Tkinter/Python: text from earlier searches doesn't disappear
问题
# 在Tkinter中创建了一个窗口。使用下拉框选择一个名称(从SQLite3数据库中选择)。它显示数据库中该行的其他数据(例如电子邮件等)。
# 但是,当我在下拉框中选择另一个名称时,之前的数据仍然可见(见图像)。
# 之前的数据仍然可见
# 我尝试通过将变量设置为'text=""'(空白)来修复此问题(请参见'ZoekNAW()'函数中的前几行),但它不起作用。
# 希望有人能帮助我:)
# 在下面是你提供的Python代码:
#(请注意,代码部分不需要翻译,以下只包括注释的翻译)
#设置下拉框的数据:从数据库中检索名称
def windowNAW():
gebruikers = []
sqliteConnection = sqlite3.connect('ZHSys-NAW.db')
cursor = sqliteConnection.cursor()
cursor.execute("SELECT achternaam FROM gebruikers")
for row in cursor.fetchall():
gebruikers.append(row[0])
cursor.close()
sqliteConnection.close()
#显示所选用户的其他数据(从数据库中获取电子邮件等)
def ZoekNAW():
emailZk = Label(windowNAW, text="", font="Verdana 10 bold").place(x=200, y=233)
adresZk = Label(windowNAW, text="", font="Verdana 10 bold").place(x=200, y=263)
woonplaatsZk = Label(windowNAW, text="", font="Verdana 10 bold").place(x=200, y=293)
ZoekGebruiker = StringVar()
ZoekGebruiker = CBZoekGebruiker.get()
sqliteConnection = sqlite3.connect('ZHSys-NAW.db')
cursor = sqliteConnection.cursor()
cursor.execute(f"SELECT * FROM gebruikers WHERE Achternaam='{ZoekGebruiker}'")
rows = cursor.fetchall()
for data in rows:
emailZk = Label(windowNAW, text=f"{data[1]}", font="Verdana 10 bold")
emailZk.place(x=200, y=233)
adresZk = Label(windowNAW, text=f"{data[4]}", font="Verdana 10 bold")
adresZk.place(x=200, y=263)
woonplaatsZk = Label(windowNAW, text=f"{data[5]}", font="Verdana 10 bold")
woonplaatsZk.place(x=200, y=293)
cursor.close()
sqliteConnection.close()
windowNAW = Tk()
windowNAW.title("Gegevens bij gebruikers zoeken")
windowNAW.geometry("500x500")
IntroNAW = Label(windowNAW, text="Zoek gegevens bij bestaande gebruikers. Selecteer een gebruiker.", font='Verdana 10')
IntroNAW.place(x=10, y=60)
CBZoekGebruiker = ttk.Combobox(windowNAW, values=gebruikers, state="readonly")
CBZoekGebruiker.place(x=10, y=100)
Button(windowNAW, text="Zoek", command=ZoekNAW).place(x=10, y=150)
email = Label(windowNAW, text="Email: ", font="Verdana 10 bold")
email.place(x=10, y=230)
adres = Label(windowNAW, text="Adres: ", font="Verdana 10 bold")
adres.place(x=10, y=260)
woonplaats = Label(windowNAW, text="Woonplaats: ", font="Verdana 10 bold")
woonplaats.place(x=10, y=290)
windowNAW.mainloop()
英文:
I created a window in Tkinter. With a combobox you select a name (from a SQLite3 database). It shows other data from this row in the database (email etc).
However: when I choose another name in the combobox, earlier data is still visible (see image).
earlier data is still visible
I tried to fix this to set the variable with text=""
(nothing) (see first rows in the def ZoekNAW():
, but it doesn't work.
I hope someone can help me
#setting data for combobox: retrieve names from database
def windowNAW():
gebruikers = []
sqliteConnection = sqlite3.connect('ZHSys-NAW.db')
cursor = sqliteConnection.cursor()
cursor.execute("SELECT achternaam FROM gebruikers")
for row in cursor.fetchall():
gebruikers.append(row[0])
cursor.close()
sqliteConnection.close()
#show other data from selected user (get email etc from database)
def ZoekNAW():
emailZk = Label(windowNAW, text="", font="Verdana 10 bold").place(x=200, y=233)
adresZk = Label(windowNAW, text="", font="Verdana 10 bold").place(x=200, y=263)
woonplaatsZk = Label(windowNAW, text="", font="Verdana 10 bold").place(x=200, y=293)
ZoekGebruiker = StringVar()
ZoekGebruiker = CBZoekGebruiker.get()
sqliteConnection = sqlite3.connect('ZHSys-NAW.db')
cursor = sqliteConnection.cursor()
cursor.execute(f"SELECT * FROM gebruikers WHERE Achternaam='{ZoekGebruiker}'")
rows = cursor.fetchall()
for data in rows:
emailZk = Label(windowNAW, text=f"{data[1]}", font="Verdana 10 bold")
emailZk.place(x=200, y=233)
adresZk = Label(windowNAW, text=f"{data[4]}", font="Verdana 10 bold")
adresZk.place(x=200, y=263)
woonplaatsZk = Label(windowNAW, text=f"{data[5]}", font="Verdana 10 bold")
woonplaatsZk.place(x=200, y=293)
cursor.close()
sqliteConnection.close()
windowNAW = Tk()
windowNAW.title("Gegevens bij gebruikers zoeken")
windowNAW.geometry("500x500")
IntroNAW = Label(windowNAW, text="Zoek gegevens bij bestaande gebruikers. Selecteer een gebruiker.", font='Verdana 10')
IntroNAW.place(x=10, y=60)
CBZoekGebruiker = ttk.Combobox(windowNAW, values=gebruikers, state="readonly")
CBZoekGebruiker.place(x=10, y=100)
Button(windowNAW, text="Zoek", command=ZoekNAW).place(x=10, y=150)
email = Label(windowNAW, text="Email: ", font="Verdana 10 bold")
email.place(x=10, y=230)
adres = Label(windowNAW, text="Adres: ", font="Verdana 10 bold")
adres.place(x=10, y=260)
woonplaats = Label(windowNAW, text="Woonplaats: ", font="Verdana 10 bold")
woonplaats.place(x=10, y=290)
windowNAW.mainloop()
答案1
得分: 0
谢谢,丰田Supra。
我现在明白我不应该在函数中设置标签。必须创建变量(StringVar)用于标签,并在函数中更改这些StringVar变量的值。随着值的更改,标签将被更新。如果有人感兴趣,我将在下面放置新代码。
def windowNAW():
gebruikers = []
sqliteConnection = sqlite3.connect('ZHSys-NAW.db')
cursor = sqliteConnection.cursor()
cursor.execute("SELECT achternaam FROM gebruikers")
for row in cursor.fetchall():
gebruikers.append(row[0])
cursor.close()
sqliteConnection.close()
def ZoekNAW():
ZoekGebruiker = StringVar()
ZoekGebruiker = CBZoekGebruiker.get()
sqliteConnection = sqlite3.connect('ZHSys-NAW.db')
cursor = sqliteConnection.cursor()
cursor.execute(f"SELECT * FROM gebruikers WHERE Achternaam='{ZoekGebruiker}'")
rows = cursor.fetchall()
for data in rows:
emailDB = f"{data[1]}"
adresDB = f"{data[4]}"
woonplaatsDB = f"{data[5]}"
emailGet.set(emailDB)
adresGet.set(adresDB)
woonplaatsGet.set(woonplaatsDB)
cursor.close()
sqliteConnection.close()
windowNAW = Tk()
windowNAW.title("Gegevens bij gebruikers zoeken")
windowNAW.geometry("500x500")
emailGet = StringVar()
emailGet.set("")
adresGet = StringVar()
adresGet.set("")
woonplaatsGet = StringVar()
woonplaatsGet.set("")
IntroNAW = Label(windowNAW, text="Zoek gegevens bij bestaande gebruikers. Selecteer een gebruiker.", font='Verdana 10')
IntroNAW.place(x=10, y=60)
CBZoekGebruiker = ttk.Combobox(windowNAW, values=gebruikers, state="readonly")
CBZoekGebruiker.place(x=10, y=100)
Button(windowNAW, text="Zoek", command=ZoekNAW).place(x=10, y=150)
email = Label(windowNAW, text="Email: ", font="Verdana 10 bold")
email.place(x=10, y=230)
emailZk = Label(windowNAW, textvariable=emailGet, font="Verdana 10 bold")
emailZk.place(x=200, y=230)
adres = Label(windowNAW, text="Adres: ", font="Verdana 10 bold")
adres.place(x=10, y=260)
adresZk = Label(windowNAW, textvariable=adresGet, font="Verdana 10 bold")
adresZk place(x=200, y=260)
woonplaats = Label(windowNAW, text="Woonplaats: ", font="Verdana 10 bold")
woonplaats.place(x=10, y=290)
woonplaatsZk = Label(windowNAW, textvariable=woonplaatsGet, font="Verdana 10 bold")
woonplaatsZk.place(x=200, y=290)
windowNAW.mainloop()
英文:
Thank you, toyota Supra.
I understand now that I shouldn't have set the Labels in the function. It was necessary to create variables (StringVar) for the labels and in the function change the values of these StringVar-variables. With the change in values, the Labels were updated. I place the new code underneed, should anyone be interested.
def windowNAW():
gebruikers = []
sqliteConnection = sqlite3.connect('ZHSys-NAW.db')
cursor = sqliteConnection.cursor()
cursor.execute("SELECT achternaam FROM gebruikers")
for row in cursor.fetchall():
gebruikers.append(row[0])
cursor.close()
sqliteConnection.close()
def ZoekNAW():
ZoekGebruiker = StringVar()
ZoekGebruiker = CBZoekGebruiker.get()
sqliteConnection = sqlite3.connect('ZHSys-NAW.db')
cursor = sqliteConnection.cursor()
cursor.execute(f"SELECT * FROM gebruikers WHERE Achternaam='{ZoekGebruiker}'")
rows = cursor.fetchall()
for data in rows:
emailDB = f"{data[1]}"
adresDB = f"{data[4]}"
woonplaatsDB = f"{data[5]}"
emailGet.set(emailDB)
adresGet.set(adresDB)
woonplaatsGet.set(woonplaatsDB)
cursor.close()
sqliteConnection.close()
windowNAW = Tk()
windowNAW.title("Gegevens bij gebruikers zoeken")
windowNAW.geometry("500x500")
emailGet = StringVar()
emailGet.set("")
adresGet = StringVar()
adresGet.set("")
woonplaatsGet = StringVar()
woonplaatsGet.set("")
IntroNAW = Label(windowNAW, text="Zoek gegevens bij bestaande gebruikers. Selecteer een gebruiker.", font='Verdana 10')
IntroNAW.place(x=10, y=60)
CBZoekGebruiker = ttk.Combobox(windowNAW, values=gebruikers, state="readonly")
CBZoekGebruiker.place(x=10, y=100)
Button(windowNAW, text="Zoek", command=ZoekNAW).place(x=10, y=150)
email = Label(windowNAW, text="Email: ", font="Verdana 10 bold")
email.place(x=10, y=230)
emailZk = Label(windowNAW, textvariable=emailGet, font="Verdana 10 bold")
emailZk.place(x=200, y=230)
adres = Label(windowNAW, text="Adres: ", font="Verdana 10 bold")
adres.place(x=10, y=260)
adresZk = Label(windowNAW, textvariable=adresGet, font="Verdana 10 bold")
adresZk.place(x=200, y=260)
woonplaats = Label(windowNAW, text="Woonplaats: ", font="Verdana 10 bold")
woonplaats.place(x=10, y=290)
woonplaatsZk = Label(windowNAW, textvariable=woonplaatsGet, font="Verdana 10 bold")
woonplaatsZk.place(x=200, y=290)
windowNAW.mainloop()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论