Files
H100PowerManger/test/scripts/logWin.py
T

78 lines
2.9 KiB
Python

import socket
import struct
import tkinter as tk
import threading
from udpmsg import *
from datetime import datetime
from tkinter import font, filedialog
from tkinter import Frame
from tkinter.ttk import *
class logWin(Frame):
def __init__(self, root):
super().__init__(root)
self.root = root
custom_font = font.Font(family="Arial", size=8)
# 设置 state 为 tk.DISABLED 禁用编辑功能
self.text_box = tk.Text(root, height=10, width=50, font=custom_font, state=tk.DISABLED)
self.text_box.grid(row=0, column=0, columnspan=2, sticky='nsew')
# 创建垂直滚动条
scrollbar = tk.Scrollbar(root, command=self.text_box.yview)
scrollbar.grid(row=0, column=2, sticky='ns')
# 将滚动条与 Text 组件关联
self.text_box.config(yscrollcommand=scrollbar.set)
# 创建保存按钮
save_button = tk.Button(root, text="保存日志", command=self.save_log)
save_button.grid(row=1, column=0, sticky='ew')
# 创建清空按钮
clear_button = tk.Button(root, text="清空日志", command=self.clear_log)
clear_button.grid(row=1, column=1, sticky='ew')
# 配置行和列的权重,使组件能够随窗口大小变化而调整
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=1)
def display_log(self, log_message):
# 启用编辑功能
self.text_box.config(state=tk.NORMAL)
# 将日志信息添加到 Text 组件中
self.text_box.insert(tk.END, log_message + "\n")
# 滚动到 Text 组件的底部,以显示最新的日志信息
self.text_box.see(tk.END)
# 禁用编辑功能
self.text_box.config(state=tk.DISABLED)
def save_log(self):
# 打开文件选择对话框
file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text Files", "*.txt"), ("All Files", "*.*")])
if file_path:
# 获取文本框中的内容
log_content = self.text_box.get("1.0", tk.END)
# 将内容写入文件
with open(file_path, "w") as file:
file.write(log_content)
# 显示保存成功的提示
tk.messagebox.showinfo("保存成功", "日志已成功保存到文件。")
def clear_log(self):
# 启用编辑功能
self.text_box.config(state=tk.NORMAL)
# 清空 Text 组件中的内容
self.text_box.delete("1.0", tk.END)
# 禁用编辑功能
self.text_box.config(state=tk.DISABLED)
if __name__ == "__main__":
root = tk.Tk()
root.title("能源管理系统调试")
log_win = logWin(root)
# 假设您有一个日志消息需要显示
for i in range(100):
log_win.display_log("这是一条日志信息" + str(i))
root.mainloop()