123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- import ttkbootstrap as ttk
- import os
- import tkinter as tk
- from tkhtmlview import HTMLLabel
- # from tkinterweb import HtmlFrame
- def on_menu_item_click(label):
- if label == "Item 1":
- display_html_file("data/1.html")
- elif label == "Item 2":
- display_html_file("data/2.html")
- elif label == "Sub Item 1":
- display_text_and_entries()
- elif label == "about":
- display_html_file("data/about.html")
- else:
- print(f"Clicked on {label}")
- def display_html_file(filepath):
- # 清空当前窗口内容,但保留菜单栏
- for widget in window.winfo_children():
- if not isinstance(widget, ttk.Menu):
- widget.destroy()
- if os.path.exists(filepath):
- with open(filepath, 'r', encoding='utf-8') as file:
- html_content = file.read()
- # 创建 HTMLLabel 来显示 HTML 内容
- global html_label
- html_label = HTMLLabel(window, html=html_content,wrap=ttk.CHAR)
- # tkinterweb
- # html_label = HtmlFrame(window)
- #
- # html_label.load_file("C:\\Users\\wang\\PycharmProjects\\PythonProject\\data\\1.html")
- # html_label.add_html(html_content)
- #html_label.load_html(html_content,base_url="C:\\Users\\wang\\PycharmProjects\\PythonProject\\data")
- html_label.pack(side=ttk.TOP, fill=ttk.BOTH, expand=True)
- html_label.fit_height()
- else:
- # 创建文本区域用于显示错误信息
- global text_area
- text_area = ttk.Text(window, wrap=ttk.WORD, font=('Arial', 12))
- text_area.pack(side=ttk.TOP, fill=ttk.BOTH, expand=True)
- text_area.insert(ttk.END, f"File {filepath} not found.")
- def display_text_and_entries():
- # 清空当前窗口内容,但保留菜单栏
- for widget in window.winfo_children():
- if not isinstance(widget, ttk.Menu):
- widget.destroy()
- global entry_list
- entry_list = []
- global label_list
- label_list = []
- # 创建10行界面
- for i in range(1, 11):
- frame = ttk.Frame(window)
- frame.pack(pady=5, fill=ttk.X)
- title_label = ttk.Label(frame, text=f"Title {i}", font=('Arial', 12))
- title_label.pack(side=ttk.LEFT, padx=5)
- entry = ttk.Entry(frame, font=('Arial', 12), width=20)
- entry.pack(side=ttk.LEFT, padx=5)
- entry_list.append(entry)
- # 添加一个新的Label来显示内容
- label = ttk.Label(frame, text=f"text {i}", font=('Arial', 12))
- label.pack(side=ttk.LEFT, padx=5)
- label_list.append(label)
- # 创建按钮
- fill_button = ttk.Button(window, text="Fill All with Hello", command=fill_entries_with_hello)
- fill_button.pack(pady=10)
- def fill_entries_with_hello():
- for entry in entry_list:
- entry.delete(0, ttk.END)
- entry.insert(0, "Hello")
- def display_text_area():
- # 清空当前窗口内容,但保留菜单栏
- for widget in window.winfo_children():
- if not isinstance(widget, ttk.Menu):
- widget.destroy()
- global text_area
- text_area = ttk.Text(window, wrap=ttk.WORD, font=('Arial', 12))
- text_area.pack(side=ttk.TOP, fill=ttk.BOTH, expand=True)
- # 创建窗口并设置主题为 'flatly'
- window = ttk.Window(themename='flatly')
- # 设置窗口大小为 2000x1200
- window.geometry("2000x1200")
- # 初始显示 text_area
- display_text_area()
- # 创建菜单栏
- menu_bar = ttk.Menu(window)
- # 创建第一个菜单及其子菜单
- first_menu = ttk.Menu(menu_bar, tearoff=0)
- for i in range(1, 11):
- menu_label = f"Item {i}"
- first_menu.add_command(label=menu_label, command=lambda label=menu_label: on_menu_item_click(label))
- menu_bar.add_cascade(label="Menu 1", menu=first_menu)
- # 创建第二个菜单及其子菜单
- second_menu = ttk.Menu(menu_bar, tearoff=0)
- second_menu.add_command(label="Sub Item 1", command=lambda: on_menu_item_click("Sub Item 1"))
- second_menu.add_command(label="Sub Item 2", command=lambda: on_menu_item_click("Sub Item 2"))
- menu_bar.add_cascade(label="Menu 2", menu=second_menu)
- # 创建第三个菜单及其子菜单
- third_menu = ttk.Menu(menu_bar, tearoff=0)
- third_menu.add_command(label="关于本软件", command=lambda: on_menu_item_click("about"))
- #third_menu.add_command(label="Sub Item 2", command=lambda: on_menu_item_click("Sub Item 2"))
- menu_bar.add_cascade(label="关于", menu=third_menu)
- # 设置窗口的菜单栏
- window.config(menu=menu_bar)
- # 运行窗口主循环
- window.mainloop()
|