双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

新手第一次写程序求教

huangfeng1997 huangfeng1997 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

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

 

 

...全文

相关推荐

新手小白第一次复现3D高斯&3DGS复现全流程

新手小白第一次复现3D高斯&3DGS&3D Gaussian Splatting &Linux系统 新手小白与error硬磕到底 Linux系统无法播放MP4视频? 读入 PNG 图像文件时发生严重错误:Not a PNG file 显卡3080ti&操作系统Ubuntu 20.04.3 LTS& 操作系统位数x86_64 Ubuntu 20.04.3纯文本界面、图形界面切换 稳扎稳打&Ubuntu 20.04.3 LTS更新显卡驱动遇到纯黑的/闪光标的黑屏怎么办?&安装colmap编译环节报错怎么办:“undefined reference to `TIFFReadRGBAImage@LIBTIFF_4.0'”&colmap编译报错踩了无数个坑&第一视角尝试解决colmap编译报错的N种方法&解决报错:由于找不到cudart64_12.dll,无法继续执行代码,重新安装程序可能会解决此问题&点云ply文件可视化

「已注销」

按键控制MSP430F5529单片机控制灯闪烁+按键控制LED新手程序

按键控制MSP430F5529单片机控制灯闪烁+按键控制LED新手程序,这个程序是我在编写完之后进行编译成功版,第一次使用430F5529单片机的新手同学可以试一试

Mr__WD

单片机第一次烧写程序.doc

详细讲述了 单片机 第一次烧写程序的方法与注意事项.doc适合新手。

yankang39

新手自学php写的日历程序

最近自学php,费了好大劲写了个日历程序,调试好了之后一顿开心,现在分享给大家吧。

LLyeap

freshmanguide:实现第一次进入一个界面新手引导效果

freshmanguide (原生js和jquery分别实现)实现第一次进入一个界面新手引导效果 分别用原生的js和jquery来写index.js 1.点击按钮下一步的实现是通过将当前页面隐藏,下一个页面的展现的方法 2.关闭按钮是将所有的页面都进行隐藏 3.cookie的添加和读取。添加:[removed]="name=expires表示的失效时间/。读取:var res=[removed].substring(5);//表示从第五个字符开始读取 4.jquery没有封装cookie的方法,所以和原生的js一样的方法。

清净平常心
评论
收藏 已收藏
分享
返回顶部
huangfeng1997
Python 10,244 成员 705 内容