更差劲了,透明,还没有我给你的代码好,你只需要在下面的代码上解决浅色背景下的白色边缘的问题。import tkinter as tk
from tkinter import font
import sys
class JapaneseTable:
def __init__(self, root):
self.root = root
self.root.title("五十音图")
# 设置窗口属性 - 完全透明背景
self.root.overrideredirect(True)
self.root.attributes("-topmost", True)
self.root.attributes("-transparentcolor", "#f0f8ff") # 设置透明色
self.root.geometry("620x500") # 优化窗口尺寸
self.root.configure(bg="#f0f8ff") # 透明背景色
# 添加拖动功能
self.drag_data = {"x": 0, "y": 0}
self.root.bind("<Button-1>", self.start_drag)
self.root.bind("<B1-Motion>", self.drag_window)
# 创建自定义字体
self.create_fonts()
# 创建精简布局 - 完全透明
self.create_widgets()
# 绑定右键菜单
self.root.bind("<Button-3>", self.show_menu)
# 内存优化:移除不必要的引用
self.root.bind("<Destroy>", self.on_destroy)
def create_fonts(self):
"""创建自定义字体并确保兼容性 - 减少内存占用"""
available_fonts = font.families()
jp_fonts = ["MS Gothic", "Meiryo", "Yu Gothic", "Hiragino Sans", "Noto Sans CJK JP"]
self.jp_font_name = "Arial"
for font_name in jp_fonts:
if font_name in available_fonts:
self.jp_font_name = font_name
break
# 使用共享字体对象减少内存占用
self.hira_font = font.Font(family=self.jp_font_name, size=22, weight="bold")
self.kata_font = font.Font(family=self.jp_font_name, size=18)
self.roma_font = font.Font(family="Arial", size=12)
def create_widgets(self):
# 创建主框架 - 完全透明背景
main_frame = tk.Frame(self.root, bg="#f0f8ff")
main_frame.pack(fill="both", expand=True, padx=0, pady=0) # 完全移除边距
# 行首罗马音数据
row_romaji = ["a", "k", "s", "t", "n", "h", "m", "y", "r", "w"]
# 列首罗马音数据
column_romaji = ["a", "i", "u", "e", "o"]
# 添加列首罗马音 - 无间距
for j, roma in enumerate(column_romaji):
label = tk.Label(
main_frame,
text=roma,
font=self.roma_font,
bg="#f0f8ff", # 透明背景色
fg="#808080",
width=1 # 最小宽度
)
label.grid(row=1, column=j+2, pady=(0, 0), padx=(0, 0)) # 完全移除间距
# 平假名和片假名数据
hiragana = [
['あ', 'い', 'う', 'え', 'お'],
['か', 'き', 'く', 'け', 'こ'],
['さ', 'し', 'す', 'せ', 'そ'],
['た', 'ち', 'つ', 'て', 'と'],
['な', 'に', 'ぬ', 'ね', 'の'],
['は', 'ひ', 'ふ', 'へ', 'ほ'],
['ま', 'み', 'む', 'め', 'も'],
['や', 'い', 'ゆ', 'え', 'よ'],
['ら', 'り', 'る', 'れ', 'ろ'],
['わ', 'い', 'う', 'え', 'を']
]
katakana = [
['ア', 'イ', 'ウ', 'エ', 'オ'],
['カ', 'キ', 'ク', 'ケ', 'コ'],
['サ', 'シ', 'ス', 'セ', 'ソ'],
['タ', 'チ', 'ツ', 'テ', 'ト'],
['ナ', 'ニ', 'ヌ', 'ネ', 'ノ'],
['ハ', 'ヒ', 'フ', 'ヘ', 'ホ'],
['マ', 'ミ', 'ム', 'メ', 'モ'],
['ヤ', 'イ', 'ユ', 'エ', 'ヨ'],
['ラ', 'リ', 'ル', 'レ', 'ロ'],
['ワ', 'イ', 'ウ', 'エ', 'ヲ']
]
# 创建表格 - 完全透明
for i in range(10):
# 添加行首罗马音 - 最小间距
roma_label = tk.Label(
main_frame,
text=row_romaji[i],
font=self.roma_font,
bg="#f0f8ff", # 透明背景色
fg="#808080",
width=1, # 最小宽度
anchor="e"
)
# 行首位置优化 - 靠近左侧边缘
roma_label.grid(row=i+2, column=0, sticky="e", padx=(0, 0)) # 完全移除右侧间距
for j in range(5):
# 创建单元格框架 - 完全透明
cell_frame = tk.Frame(
main_frame,
bg="#f0f8ff", # 透明背景色
highlightthickness=0 # 完全移除边框
)
cell_frame.grid(row=i+2, column=j+2, sticky="nsew", padx=0, pady=0) # 完全移除间距
# 平假名和片假名紧凑显示
hira_label = tk.Label(
cell_frame,
text=hiragana[i][j],
font=self.hira_font,
bg="#f0f8ff", # 透明背景色
fg="#0066cc"
)
hira_label.grid(row=0, column=0, padx=0, pady=0) # 完全移除间距
kata_label = tk.Label(
cell_frame,
text=katakana[i][j],
font=self.kata_font,
bg="#f0f8ff", # 透明背景色
fg="#228b22"
)
kata_label.grid(row=0, column=1, padx=0, pady=0) # 完全移除间距
# 设置行和列的权重 - 最小化间距
for i in range(12):
main_frame.grid_rowconfigure(i, weight=1, minsize=0)
for j in range(7):
main_frame.grid_columnconfigure(j, weight=1, minsize=0)
def set_transparency(self, value):
"""设置窗口透明度"""
self.root.attributes("-alpha", value)
def toggle_pin(self):
"""切换置顶状态"""
is_topmost = not self.root.attributes("-topmost")
self.root.attributes("-topmost", is_topmost)
def show_menu(self, event):
"""显示右键菜单"""
menu = tk.Menu(self.root, tearoff=0, bg="#f0f8ff", fg="#333333")
menu.add_command(label="切换置顶", command=self.toggle_pin)
menu.add_command(
label="增加透明度",
command=lambda: self.set_transparency(max(0.3, self.root.attributes("-alpha") - 0.05))
)
menu.add_command(
label="减少透明度",
command=lambda: self.set_transparency(min(1.0, self.root.attributes("-alpha") + 0.05))
)
menu.add_separator()
menu.add_command(label="关闭", command=self.root.destroy)
menu.tk_popup(event.x_root, event.y_root)
def start_drag(self, event):
"""开始拖动窗口"""
self.drag_data["x"] = event.x
self.drag_data["y"] = event.y
def drag_window(self, event):
"""拖动窗口"""
x = self.root.winfo_rootx() + (event.x - self.drag_data["x"])
y = self.root.winfo_rooty() + (event.y - self.drag_data["y"])
self.root.geometry(f"+{x}+{y}")
def on_destroy(self, event):
"""清理资源"""
self.hira_font = None
self.kata_font = None
self.roma_font = None
self.root.unbind_all()
self.root.destroy()
sys.exit(0)
if __name__ == "__main__":
root = tk.Tk()
app = JapaneseTable(root)
root.mainloop()