新手第一次写程序求教

huangfeng1997 2026-08-07 17:54:09

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()

 

 

...全文
144 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

10,192

社区成员

发帖
与我相关
我的任务
社区描述
人生苦短,我用python
社区管理员
  • Python 学习者
  • 嗨学编程
  • 松鼠爱吃饼干
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎来到Python学习者们的社区,

 

本社区分享你需要的文章、问题解答、技术互助、学习资源、面试系列等等

 

欢迎你的加入,祝你学有所成~

试试用AI创作助手写篇文章吧