Python Tkinter 通过单击另一个按钮替换按钮的标签和命令

Python Tkinter replacing the label and command of a button by clicking another button

我正在编写一个带有第二个按钮的科学计算器。第二个按钮的功能是什么,例如它将 sin 更改为 sin^-1,加上更改 sin 按钮命令;如果你再次点击第二个按钮,它会将 sin^-1 改回 sin

我会使用不同的框架将我的计算器分成几个部分(一个用于显示计算,一个带有按钮,但按钮没有 2 个功能,最后一个按钮有 2 个功能)。 我将其拆分的原因是因为我会使用销毁对象并制作新对象这种拆分意味着您可以销毁所需的框架而不是特定的按钮(需要更少的代码)。同样为此,我将创建 3 个 GUI def。一个是具有一种功能的按钮和显示计算的位。一个是具有 2 个功能的按钮(它们的第一个功能),最后一个是具有 2 个功能的按钮(它们的第二个功能)。要决定使用哪个 GUI gen def 有一个带有全局变量的 if 语句,每次调用第二个功能按钮时都会更改它,并决定使用哪个 def。

如果你只是想改变命令而不是标签和命令,我会有一个变量,它是 1 或 2(当点击第二个按钮时改变)然后在你的定义(你的按钮调用的)中有一个if 语句决定是执行正常操作(例如 cos)还是第二个操作(例如 cos-1)。

下面是使用我在第一段中描述的内容的代码:

from tkinter import *

class Calc(Frame):
    def __init__(self, master):
        self.modefunction = 1
        """ Initialize the frame. """
        super(Calc,self).__init__(master)
        self.grid()

        self.calculations_frm = Frame(self, width=100, height=30)#bg = "red"
        self.calculations_frm.grid(row = 0, column = 0, columnspan=2)

        self.buttons_frm = Frame(self, width= 50, height=30,)#bg = "green")
        self.buttons_frm.grid(row = 1, column = 1)

        self.buttons_2_functions_1_frm = Frame(self, width=50, height=30)#bg = "blue")
        self.buttons_2_functions_1_frm.grid(row = 1, column = 0)
        self.create_GUI()

    def create_show_calculations(self):
        self.calculation_lbl = Label(self.calculations_frm, text = "will show caluclations here").pack()

    def create_buttons(self):
        #mc stands for mode change
        self.mode_change_btn = Button(self.buttons_frm, text = "mc", command = self.mode_change, height = 1, width = 5)
        self.mode_change_btn.grid(row = 0,column = 0)

        self.plus_btn = Button(self.buttons_frm, text = "plus", height = 1, width = 5)
        self.plus_btn.grid(row = 1,column = 0)

    def create_GUI(self):
        self.create_show_calculations()
        self.create_buttons()
        self.create_1_function_gui()


    def create_1_function_gui(self):
        self.tan_btn = Button(self.buttons_2_functions_1_frm, text = "tan", height = 1, width = 5)
        self.tan_btn.grid(row = 0,column = 0)

        self.san_btn = Button(self.buttons_2_functions_1_frm, text = "san", height = 1, width = 5)
        self.san_btn.grid(row = 0,column = 1)

        self.coz_btn = Button(self.buttons_2_functions_1_frm, text = "coz", height = 1, width = 5)
        self.coz_btn.grid(row = 1,column = 0)

    def create_2_function_gui(self):
        self.buttons_2_functions_2_frm = Frame(self, width=50, height=30)#bg = "blue")
        self.buttons_2_functions_2_frm.grid(row = 1, column = 0)

        self.inverse_tan_btn = Button(self.buttons_2_functions_2_frm, text = "tan-1", height = 1, width = 5)
        self.inverse_tan_btn.grid(row = 0,column = 0)

        self.inverse_san_btn = Button(self.buttons_2_functions_2_frm, text = "san-1", height = 1, width = 5)
        self.inverse_san_btn.grid(row = 0,column = 1)

        self.inverse_coz_btn = Button(self.buttons_2_functions_2_frm, text = "coz-1", height = 1, width = 5)
        self.inverse_coz_btn.grid(row = 1,column = 0)

    def mode_change(self):
        if self.modefunction == 1:
            self.buttons_2_functions_1_frm.destroy()
            self.modefunction = 2
            self.buttons_2_functions_2_frm = Frame(self, width=50, height=30)#bg = "blue")
            self.buttons_2_functions_2_frm.grid(row = 1, column = 0)
            self.create_2_function_gui()
        else:
            self.buttons_2_functions_2_frm.destroy()
            self.modefunction =  1
            self.buttons_2_functions_1_frm = Frame(self, width=50, height=30)#bg = "blue")
            self.buttons_2_functions_1_frm.grid(row = 1, column = 0)
            self.create_1_function_gui()

root = Tk()
root.title("booking system")
root.geometry("500x500")
root.configure(bg="white")
app = Calc(root)

root.mainloop()