1. 安装基础库
使用Windows 11标题样式和主题自定义UI窗口库pywinstyles(github: https://github.com/Akascape/py-window-styles),结合python自带tkinter库设计一个报告GUI软件。
pip install pywinstyles
2. 设计一个简单的Windwos风格的GUI报告软件
# report.py
import tkinter as tk
import pywinstyles
from tkinter import ttk
def generate_report(sample_name, analysis_type):
"""模拟生信报告生成函数"""
with open(f"{sample_name}_report.txt", "w") as f:
# 写入表头
f.write(f"Sample Name\tAnalysis Type\n")
# 写入内容
f.write(f"{sample_name}\t{analysis_type}\n")
def on_selection_changed(event):
"""下拉框选择改变时触发事件"""
global selected_value
selected_value = combo_box.get()
print(f"Selected value changed to: {selected_value}")
# 创建主窗口
root = tk.Tk()
# 应用mica主题
pywinstyles.apply_style(root, 'mica')
label = tk.Label(root, text="mica风格界面")
label.pack(pady=20)
# 设置窗口标题
root.title("生信报告软件")
# 设置窗口大小
root.geometry("800x600")
# 内边距(水平方向)像素值
pad_x_value = 15
# 外边距(垂直方向)像素值
pad_y_value = 10
# 组件内部内边距
ipad_x_value = 5
# 组件外部外边距
ipad_y_value = 2
# 创建标签和输入框用于样本名称
# side设置边:tkinter.TOP(默认值)、tkinter.BOTTOM、tkinter.LEFT、tkinter.RIGHT
# anchor设置锚点:tkinter.N(北,即顶部居中)、tkinter.NE(东北,即右上角)、tkinter.E(东,即右# 侧居中)、tkinter.SE(东南,即右下角)、tkinter.S(南,即底部居中)、tkinter.SW(西南,即左下
# 角)、tkinter.W(西,即左侧居中)、tkinter.NW(西北,即左上角)、tkinter.CENTER(居中)
sample_name_label = tk.Label(root, text="样本名称:")
sample_name_label.pack(anchor=tk.NW, side=tk.LEFT, padx=pad_x_value, pady=pad_y_value,
ipadx=ipad_x_value, ipady=ipad_y_value)
sample_name_entry = tk.Entry(root)
sample_name_entry.pack(anchor=tk.NW,side=tk.LEFT, padx=pad_x_value, pady=pad_y_value,
ipadx=ipad_x_value, ipady=ipad_y_value)
# 创建标签和下拉菜单用于分析类型
analysis_type_label = tk.Label(root, text="报告类型:")
analysis_type_label.pack(anchor=tk.NW, side=tk.LEFT,
padx=pad_x_value, pady=pad_y_value,
ipadx=ipad_x_value, ipady=ipad_y_value)
style = ttk.Style()
style.theme_use('clam')
style.configure('TCombobox', font=('Arial', 12),
fieldbackground='white', arrowcolor='blue')
combo_box = ttk.Combobox(root, values=["WES报告", "WGS报告", "CNV-seq报告"])
combo_box.pack(anchor=tk.NW, side=tk.LEFT,
padx=pad_x_value, pady=pad_y_value,
ipadx=ipad_x_value, ipady=ipad_y_value)
# 绑定事件处理函数
# 当使用Combobox的<<ComboboxSelected>>事件绑定函数后,在函数内部可以直接获取到改变后的值
combo_box.bind("<<ComboboxSelected>>", on_selection_changed)
# 创建按钮用于生成报告
generate_button = tk.Button(root, text="生成报告",
command=lambda: generate_report(sample_name_entry.get(),
selected_value))
generate_button.pack(anchor=tk.NW,side=tk.LEFT, padx=pad_x_value, pady=pad_y_value,
ipadx=ipad_x_value + 30, ipady=0)
# 运行主循环
root.mainloop()
3. 测试结果
根据业务需求,可自行调整报告生成函数。