10,192
社区成员
发帖
与我相关
我的任务
分享Python新手,如何优化下面这个界面,让界面变的好看点,空白处到时候要加入很多字,希望高手帮忙设计一下,我直接在代码里面加字,运行的时候就能显示。高手指教一下。

# modules/mod_agreement/core/window.py
import tkinter as tk
from tkinter import messagebox
import sys
import os
import logging
# 【核心修复】:确保无论直接运行还是被调用,都能找到项目根目录
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_ROOT = os.path.abspath(os.path.join(CURRENT_DIR, '..', '..', '..'))
if PROJECT_ROOT not in sys.path:
sys.path.insert(0, PROJECT_ROOT)
# 绝对导入逻辑层
from modules.mod_agreement.core import logic
class RiskTipWindow:
def __init__(self, on_success_callback):
self.on_success_callback = on_success_callback
self.click_lock = False
# 初始化主窗口
self.root = tk.Tk()
self.root.title("数据工具 - 使用须知")
self.root.geometry("750x580") # 稍微增加高度以容纳更多内容
self.root.resizable(False, False)
self.root.configure(bg="#f0f2f5")
self._center_window()
self._render_ui()
# 绑定窗口关闭按钮(X)的逻辑 -> 视为拒绝
self.root.protocol("WM_DELETE_WINDOW", self._on_reject)
def _center_window(self):
"""窗口居中显示"""
self.root.update_idletasks()
w = self.root.winfo_screenwidth()
h = self.root.winfo_screenheight()
x = (w - 750) // 2
y = (h - 580) // 2
self.root.geometry(f"+{x}+{y}")
def _render_ui(self):
"""渲染界面组件"""
# 1. 顶部标题栏
header_frame = tk.Frame(self.root, bg="#ffffff", height=60)
header_frame.pack(fill="x")
header_frame.pack_propagate(False)
title_label = tk.Label(
header_frame,
)
title_label.pack(pady=15)
# 2. 核心文本区域 (使用 Message 组件以支持自动换行)
# 【关键修改】:这里使用元组拼接字符串,确保 1. 后面不换行,段落之间才换行
disclaimer_text = (
)
text_frame = tk.Frame(self.root, bg="#f0f2f5", padx=20, pady=10)
text_frame.pack(fill="both", expand=True)
message_label = tk.Message(
text_frame,
text=disclaimer_text,
font=("Microsoft YaHei", 11),
bg="#f0f2f5",
fg="#333333",
aspect=600, # 控制宽高比,数值越大越宽
justify="left" # 左对齐
)
message_label.pack(fill="both", expand=True)
# 3. 底部按钮区
btn_frame = tk.Frame(self.root, bg="#f0f2f5", pady=20)
btn_frame.pack(fill="x")
# 拒绝/退出按钮
btn_reject = tk.Button(
btn_frame,
text="我不同意并退出",
command=self._on_reject,
bg="#ffffff",
fg="#666666",
activebackground="#eeeeee",
activeforeground="#333333",
relief="flat",
bd=1,
font=("Microsoft YaHei", 10),
width=15
)
btn_reject.pack(side="left", padx=(0, 10), expand=True)
# 同意按钮
btn_agree = tk.Button(
btn_frame,
text="我已阅读并同意",
command=self._on_agree,
bg="#1890ff",
fg="#ffffff",
activebackground="#40a9ff",
activeforeground="#ffffff",
relief="flat",
font=("Microsoft YaHei", 11, "bold"),
width=15
)
btn_agree.pack(side="right", padx=(10, 0), expand=True)
def _on_agree(self):
"""点击同意后的逻辑"""
if self.click_lock: return
self.click_lock = True
try:
# 调用逻辑层保存状态
logic.save_agreement_status(True)
logging.info("用户点击了同意协议")
# 关闭窗口
self.root.destroy()
# 执行回调(进入下一步)
if self.on_success_callback:
self.on_success_callback()
except Exception as e:
logging.error(f"同意协议处理失败: {e}")
messagebox.showerror("错误", f"保存配置失败: {e}")
self.click_lock = False
def _on_reject(self):
"""点击拒绝或关闭窗口的逻辑"""
if self.click_lock: return
self.click_lock = True
logging.warning("用户拒绝了协议或强制关闭窗口")
self.root.destroy()
# 通常拒绝协议后直接退出程序
import sys
sys.exit(0)
def run(self):
"""启动窗口循环"""
self.root.mainloop()
# 仅用于测试该文件时的入口
if __name__ == "__main__":
def dummy_callback():
print(">>> [测试成功] 用户已同意协议,进入下一步流程。")
win = RiskTipWindow(on_success_callback=dummy_callback)
win.run()