GUI 设计

5.1 tkinter 之 ToolTip 实例

2020-01-13  本文已影响0人  水之心

ToolTip 代码内容见我的 GitHub: tkinter_action

效果图:

代码:

import sys
sys.path.append('../app')

from tools.tips import ToolTip

from tkinter import ttk, Tk
from tkinter import Toplevel, Canvas
from tkinter import StringVar

class Graph(Canvas):
    def __init__(self, master, **kw):
        super().__init__(master, **kw)
        self.master = master
        self._init_params()
        self.bind("<Double-Button-1>", self.double_button1)
        
    def _init_params(self):
        '''内部参数的初始化'''
        self.x, self.y = 0, 0
        
    def update_cursor(self, event):
        '''设定 鼠标光标的位置坐标 (x,y)'''
        self.x = event.x
        self.y = event.y
        
    def _to_canvas_xy(self, cursor_x, cursor_y):
        '''将窗口坐标系转换为画布坐标系'''
        x = self.canvasx(cursor_x)
        y = self.canvasy(cursor_y)
        return x, y
    
    def double_button1(self, event):
        """
        双击鼠标左键的回调函数
        
        参数
        =========
        event:  来自于 tkinter,有鼠标的 x,y 坐标属性
        """
        self.update_cursor(event)
        new_x, new_y = self._to_canvas_xy(self.x, self.y)
        text = f"鼠标左键双击的光标的坐标为{(self.x, self.y)}, 画布位置 {(new_x, new_y)}"
        tool_window = ToolTip(self, text=text)
        
        
root = Tk()
frame = ttk.Frame(root, width=100, height=100)
lb = ttk.Label(frame, text = '测试')
self = Graph(frame, background='blue')
self1 = Graph(frame, background='red')
frame.grid()
lb.grid(row=0, column=0)
self.grid(row=0, column=1)
self1.grid(row=0, column=2)
root.mainloop()
上一篇 下一篇

猜你喜欢

热点阅读