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()