簡體   English   中英

打印后是否有重置 label 的選項? [蟒蛇,Tkinter]

[英]Is there any option to reset label after printing it ? [Python, Tkinter]

這是我的代碼

from tkinter import *

root = Tk()
root.title("MyTitle")
root.iconbitmap("icon.ico")
root.geometry("800x800")
c = []
feature1 = IntVar()
feature1.set(0)
feature2 = IntVar()
feature2.set(0)
feature3 = IntVar()
feature3.set(0)
Checkbutton(root, text="Pizza", variable=feature1).pack()
Checkbutton(root, text="Hamburger", variable=feature2).pack()
Checkbutton(root, text="Cola", variable=feature3).pack()
adej = "You've ordered"


def receipt():
    global c, adej
    if feature1.get() == 1:
        c.append("Pizza")
    if feature2.get() == 1:
        c.append("Hamburger")
    if feature3.get() == 1:
        c.append("Cola")
    adej = "You've ordered"
    for x in c:
        adej = adej + " " + x
    Label(root, text=adej).pack()
    adej = ""


button1 = Button(root, text="Get Receipt", command=receipt)
button1.pack()
root.mainloop()

edit_1:我已經像這樣更改了代碼,但它仍然給我重復的答案,如 label。我所說的重復是例如,如果選中 box_1 和 box_2,它會返回給我選中 box_1 和 check box_2。 但是,如果我取消選中復選框 1 並單擊按鈕,它會返回給我復選框 1、復選框 2 和復選框 2(再次)。 這是更改后的代碼

from tkinter import *

root = Tk()
root.title("MyTitle")
root.iconbitmap("icon.ico")
root.geometry("800x800")
c = []
feature1 = IntVar()
feature1.set(0)
feature2 = IntVar()
feature2.set(0)
feature3 = IntVar()
feature3.set(0)
Checkbutton(root, text="Pizza", variable=feature1).pack()
Checkbutton(root, text="Hamburger", variable=feature2).pack()
Checkbutton(root, text="Cola", variable=feature3).pack()
adej = "You've ordered"


def receipt():
    global c, adej
    if feature1.get() == 1:
        c.append("Pizza")
    if feature2.get() == 1:
        c.append("Hamburger")
    if feature3.get() == 1:
        c.append("Cola")
    adej = "You've ordered"
    for x in c:
        adej = adej + " " + x
    label1.config(text=adej)


button1 = Button(root, text="Get Receipt", command=receipt)
button1.pack()
label1 = Label(root, text="")
label1.pack()
root.mainloop()

edit2:感謝 Tim Roberts 先生的回答。 您可以在下面找到他的答案作為標記的解決方案。 與此同時,我已經用“StringVar”為這個項目找到了另一個解決方案。 這是我所做的更改后的工作代碼。

from tkinter import *

root = Tk()
root.title("MyTitle")
root.iconbitmap("icon.ico")
root.geometry("250x150")
# creating string variables that will be connected to check boxes
feature1 = StringVar()
feature2 = StringVar()
feature3 = StringVar()

# attaching variables to checkboxes
Checkbutton(root, text="Pizza", variable=feature1, onvalue="Pizza ", offvalue="").pack()
Checkbutton(root, text="Hamburger", variable=feature2, onvalue="Hamburger ", offvalue="").pack()
Checkbutton(root, text="Cola", variable=feature3, onvalue="Cola ", offvalue="").pack()


def receipt():
    adej = "You've ordered "
    if len(feature1.get()+feature2.get()+feature3.get()) == 0:
        label1.config(text="You didn't order anything.")
    else:
        label1.config(text=adej + feature1.get() + feature2.get() + feature3.get())


button1 = Button(root, text="Get Receipt", command=receipt)
button1.pack()
label1 = Label(root, text="")
label1.pack()
root.mainloop()

c不應該是全局的。 每次單擊按鈕時,您都需要從頭開始重建它。 adej也不需要是全局的。

這行得通。 此外,刪除cadej的全局定義。

def receipt():
    c = []
    if feature1.get() == 1:
        c.append("Pizza")
    if feature2.get() == 1:
        c.append("Hamburger")
    if feature3.get() == 1:
        c.append("Cola")
    adej = "You've ordered " + ' '.join(c)
    label1.config(text=adej)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM