标签被覆盖,如何删除

时间:2021-03-29 08:23:56

标签: python tkinter label

我正在制作一个单位转换器,用户可以在其中自由选择他想要的单位并进行转换 我正在制作温度单位(摄氏度、开尔文和华氏度)的转换器,但我偶然发现了一个错误,即使我试图删除它们,标签也会被覆盖

这里是处理这个的函数:

# Phase 2
def phase_2():

    # The Subphases
    # Temp
    def temprature():

        mega.forget()

        heading = Label(root, text="Temprature", padx=40, pady=15, relief=SUNKEN)
        heading.pack()

        frameps = LabelFrame(root)
        frameps.pack(padx=10, pady=10)

        def conversion():

            # Answer Box
            answer = LabelFrame(frameps, padx=10)
            answer.grid(row=3, column=4, columnspan=1, padx=20, pady=20)

            empty = Label(answer, text="Value")
            empty.grid(row=0, column=0)

            # C functions
            def C_F():                 
                empty = Label(answer, text=f"{(int(val.get()) * (9 / 5)) + 32}°F")
                empty.grid(row=0, column=0)

            def C_K():
                empty = Label(answer, text=f"{int(val.get()) + 273.15}°K")
                empty.grid(row=0, column=0)

            def C_C():
                empty = Label(answer, text=f"{int(val.get())}°C")
                empty.grid(row=0, column=0)

            # F functions
            def F_C():
                empty = Label(answer, text=f"{(int(val.get()) - 32) * 5/9}°C")
                empty.grid(row=0, column=0)

            def F_K():
                empty = Label(answer, text=f"{(int(val.get()) - 32) * 5/9 + 273.15}°K")
                empty.grid(row=0, column=0)

            def F_F():
                empty = Label(answer, text=f"{int(val.get())}°F")
                empty.grid(row=0, column=0)

            # K functions
            def K_F():
                empty = Label(answer, text=f"{(int(val.get()) - 273.15) * 9/5 + 32}°F")
                empty.grid(row=0, column=0)

            def K_C():
                empty = Label(answer, text=f"{int(val.get()) - 273.15}°C")
                empty.grid(row=0, column=0)

            def K_K():
                empty = Label(answer, text=f"{int(val.get())}°K")
                empty.grid(row=0, column=0)


            # C probs
            if unit.get() == "C" and u.get() == "F":
                answer.forget()
                C_F()
            if unit.get() == "C" and u.get() == "K":
                answer.forget()
                C_K()
            if unit.get() == "C" and u.get() == "C":
                answer.forget()
                C_C()
            
            # F probs
            if unit.get() == "F" and u.get() == "C":
                answer.forget()
                F_C()
            if unit.get() == "F" and u.get() == "K":
                answer.forget()
                F_K()
            if unit.get() == "F" and u.get() == "F":
                answer.forget()
                F_F()
            
            # K probs
            if unit.get() == "K" and u.get() == "F":
                answer.forget()
                K_F()
            if unit.get() == "K" and u.get() == "C":
                answer.forget()
                K_C()
            if unit.get() == "K" and u.get() == "K":
                answer.forget()
                K_K()

如您所见,我一直在尝试“answer.forget”,以便忘记标签,然后每次使用转换器按钮时都会重写,但是,却发生了这种情况: The labels are getting overlapped even tho im trying to delete them

1 个答案:

答案 0 :(得分:1)

总体思路是构建一次布局并根据需要更改值,如下所示:

import tkinter as tk


class MainApplication(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)
        self.parent = parent

        self.count = 0

        self.label = tk.Label(self, text="Click the button!")
        self.label.pack()

        self.some_button = tk.Button(self, text="Click", command=self.some)
        self.some_button.pack()

        self.close_button = tk.Button(self, text="Close", command=self.quit)
        self.close_button.pack()

    def some(self):
        self.count += 1
        self.label["text"] = f"You clicked {self.count} times."


if __name__ == "__main__":
    root = tk.Tk()
    MainApplication(root).pack(side="top", fill="both", expand=True)
    root.mainloop()

因此,当您点击 Convert 按钮时,您应该在您的应用中调用一个函数,并在其中读取您需要的值和设置,并使用新结果更新标签内的文本。< /p>

This 回答解释了如何使用 OOP 方法构建您的应用程序,我认为随着您的应用程序的发展,这非常有用。

干杯!

相关问题