下記のコードを、piminizipを使用して、8文字のランダムなパスワードを生成（edittext1に表示しているもの）したものを使用して、zip圧縮の際にパスワード保護してください。
そして、zip圧縮時には、元のフォルダ階層を保ったままzip圧縮するようにコードを変更してください。

import tkinter as tk
from tkinter import ttk
import sys
import os
import random
import string
import pyperclip
import zipfile
import glob

class MyZipFile(zipfile.ZipFile):
    def __init__(self, file, mode='r', compression=zipfile.ZIP_STORED, allowZip64=True, compresslevel=None):
        super().__init__(file, mode, compression, allowZip64, compresslevel)
        self._passphrase = None

    def _writecheck(self, zinfo):
        super()._writecheck(zinfo)
        if self._passphrase:
            zinfo.flag_bits |= 0x1  # 設定したパスワードを使うためのフラグ

root = tk.Tk()
root.withdraw()

# Create the main window
CompDecomp = tk.Toplevel(root)
CompDecomp.title("Dialog")

# Set window dimensions and position it at the center of the screen
window_width = 300
window_height = 130
screen_width = CompDecomp.winfo_screenwidth()
screen_height = CompDecomp.winfo_screenheight()
x = int((screen_width / 2) - (window_width / 2))
y = int((screen_height / 2) - (window_height / 2))
CompDecomp.geometry(f"{window_width}x{window_height}+{x}+{y}")

# Create the Password panel
panel1 = tk.LabelFrame(CompDecomp, text="Password", padx=60, pady=3)
panel1.pack(pady=10, padx=60)

# Create the edit text
edittext1 = tk.Entry(panel1)

def generate_random_password(length):
    characters = string.ascii_letters + string.digits  # 英字と数字を含む文字列
    password = ''.join(random.choice(characters) for _ in range(length))
    return password

# 8文字のランダムなパスワードを生成する
password = generate_random_password(8)

def copy_to_clipboard(password):
    pyperclip.copy(password)

copy_to_clipboard(password)

# Set the text of the edit text
edittext1.insert(0, password)
edittext1.pack()

# Create the button group
group1 = tk.Frame(CompDecomp)
group1.pack()

def get_dropped_paths():
    return sys.argv[1:]

def compress():
    global password  # グローバル変数を使用するための宣言
    paths = get_dropped_paths()
    password = edittext1.get()  # 入力されたパスワードを取得
    if not paths:
        return
    zip_filename = os.path.basename(paths[0])  # ドロップされた最初のファイル名を取得
    zip_filename = zip_filename.split(".")[0]  # 拡張子を除去
    zip_filename += ".zip"  # 拡張子.zipを追加
    with MyZipFile(zip_filename, "w", compression=zipfile.ZIP_DEFLATED) as zipf:
        zipf.setpassword(password.encode())  # パスワードを設定
        total_files = 0
        for path in paths:
            if os.path.isfile(path):
                total_files += 1
            elif os.path.isdir(path):
                to