新手第一次写程序求教
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单片机的新手同学可以试一试
单片机第一次烧写程序.doc
详细讲述了 单片机 第一次烧写程序的方法与注意事项.doc适合新手。
新手自学php写的日历程序
最近自学php,费了好大劲写了个日历程序,调试好了之后一顿开心,现在分享给大家吧。
freshmanguide:实现第一次进入一个界面新手引导效果
freshmanguide (原生js和jquery分别实现)实现第一次进入一个界面新手引导效果 分别用原生的js和jquery来写index.js 1.点击按钮下一步的实现是通过将当前页面隐藏,下一个页面的展现的方法 2.关闭按钮是将所有的页面都进行隐藏 3.cookie的添加和读取。添加:[removed]="name=expires表示的失效时间/。读取:var res=[removed].substring(5);//表示从第五个字符开始读取 4.jquery没有封装cookie的方法,所以和原生的js一样的方法。



