File size: 1,296 Bytes
136c905 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | # 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() |