Я сделал некоторые изменения в коде и добавил комментарии, если вы ничего не понимаете, скажите мне.Должны быть лучшие решения для этого (я не так хорош в tkinter), но этого должно быть достаточно для тестирования, я думаю ...
from serial import*
from time import*
from tkinter import*
window = Tk()
def open_command():
print("Opening")
# i destroy button here which was before and create new one
global b1
b1.destroy()
b1 = Button(window, text="Open", font=("Times New Roman", 12), fg="green", bg="green", height=1, width=5,
command=open_command)
b1.grid(row=1)
def close_command():
print("Closing")
global b2
b2.destroy()
b2 = Button(window, text="Close", font=("Times New Roman", 12), fg="red", bg="green", height=1, width=5,
command=close_command)
b2.grid(row=2)
# first of all you need b1 and b2 (you had b and b (same buttons))
b1 = Button(window, text="Open", font=("Times New Roman", 12), fg="black", bg="white", height=1, width=5,
command=open_command)
# i use grid instead of pack because it is placed exactly where you want
b1.grid(row=1)
b2 = Button(window, text="Close", font=("Times New Roman", 12), fg="black", bg="white", height=1, width=5,
command=close_command)
b2.grid(row=2)
mainloop()