Tkinter/Python: 先前搜索的文本不会消失

huangapple go评论128阅读模式
英文:

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

Tkinter/Python: 先前搜索的文本不会消失

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 Tkinter/Python: 先前搜索的文本不会消失

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

huangapple
  • 本文由 发表于 2023年3月7日 03:05:41
  • 转载请务必保留本文链接:https://go.coder-hub.com/75654837.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定