Uyghur-Char-KenLM-Input-Method / candidate_window.py
Rekipjan's picture
Upload folder using huggingface_hub
136c905 verified
# candidate_window.py
import tkinter as tk
from caret import get_caret_rect
class CandidateWindow:
def __init__(self):
self.root = tk.Tk()
self.root.overrideredirect(True) # 无边框
self.root.attributes("-topmost", True)
self.label = tk.Label(
self.root,
text="",
bg="#222",
fg="white",
font=("Segoe UI", 12),
justify="left",
padx=8,
pady=4
)
self.label.pack()
self.visible = False
def set_text(self, text):
self.label.config(text=text)
def show(self):
if not self.visible:
self.visible = True
self.root.deiconify()
def hide(self):
self.visible = False
self.root.withdraw()
def update_position(self):
rect = get_caret_rect()
if rect:
x = rect.left
y = rect.bottom + 5 # 关键:显示在光标下方
self.root.geometry(f"+{x}+{y}")
def tick(self):
self.update_position()
self.root.after(10, self.tick) # 高频刷新(输入法常见)
def start(self):
self.hide()
self.tick()
self.root.mainloop()