【问题标题】:displaying corresponding message on label in tkinter在 tkinter 的标签上显示相应的消息
【发布时间】:2016-12-06 00:30:31
【问题描述】:

--编辑:我目前的尝试,很丑

    import tkinter as tk

class Example(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)


        self.labelLists = []
        self.labelBLists = []

        self.Label1 = tk.Label(self,text=str(1),bg="red")
        self.Label1.pack()
        self.Label1.bind("<Enter>", self.on_enter1)
        self.Label1.bind("<Leave>", self.on_leave1)
        self.Labela = tk.Label(self,text="",bg="blue")
        self.Labela.pack()

        self.Label2 = tk.Label(self,text=str(2),bg="red")
        self.Label2.pack()
        self.Label2.bind("<Enter>", self.on_enter2)
        self.Label2.bind("<Leave>", self.on_leave2)
        self.Labelb = tk.Label(self,text="",bg="blue")
        self.Labelb.pack()

        self.Label3 = tk.Label(self,text=str(3),bg="red")
        self.Label3.pack()
        self.Label3.bind("<Enter>", self.on_enter3)
        self.Label3.bind("<Leave>", self.on_leave3)
        self.Labelc = tk.Label(self,text="",bg="blue")
        self.Labelc.pack()


    def on_enter1(self, event):
        self.Labela.config(text=self.Label1.cget("text"))

    def on_leave1(self, enter):
        self.Labela.config(text="")

    def on_enter2(self, event):
        self.Labelb.config(text=self.Label2.cget("text"))
    def on_leave2(self, enter):
        self.Labelb.config(text="")
    def on_enter3(self, event):
        self.Labelc.config(text=self.Label3.cget("text"))
    def on_leave3(self, enter):
        self.Labelc.config(text="")

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(side="top", fill="both", expand="true")
    root.mainloop()

我想创建一组标签,比如 L1、L2、L3,每个标签都有对应的标签 La、Lb、Lc。我想要做的是当我将鼠标悬停在 L1 上时,La 在 L1 上显示单词的翻译。目前我正在查看Display message when going over something with mouse cursor in PythonPython Tkinter: addressing Label widget created by for loop,但它们都没有解决绑定相应方法的问题。有没有一种方法可以在不创建三对不同方法的情况下实现这一目标?

谢谢!

【问题讨论】:

  • 你的尝试在哪里?

标签: python tkinter


【解决方案1】:

将每组标签存储在一个列表中。然后,您可以一起浏览它们以及翻译词典,并将辅助标签(显示翻译)连接到主要标签(响应用户输入)。这允许您创建单个 enter 方法和单个 leave 方法,使用 event.widget 访问触发事件的小部件。

import tkinter as tk

class Example(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        self.translations = {'a':'A', 'b':'B', 'c':'C'}

        self.labelLists = [tk.Label(self,text=str(x),bg="red") for x in range(1,4)]
        self.labelBLists = [tk.Label(self,text="",bg="blue") for x in range(3)]
        for x,y,tr in zip(self.labelLists, self.labelBLists, sorted(self.translations)):
            x.bind('<Enter>', self.enter)
            x.bind('<Leave>', self.leave)
            x.connected = y
            x.key = tr
            x.pack()
            y.pack()

    def enter(self, event):
        widget = event.widget
        widget.connected.config(text=self.translations[widget.key])

    def leave(self, event):
        widget = event.widget
        widget.connected.config(text='')

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(side="top", fill="both", expand="true")
    root.mainloop()

【讨论】:

  • 我不太明白这里的翻译是如何工作的,你能解释一下吗?
  • @angieShroom - 正如这为每个x 小部件分配一个连接的y 小部件connected 的属性一样,它也分配一个trkey 的属性。该属性用作在self.translations 中查找相应值的键。
猜你喜欢
  • 2022-12-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 2021-04-28
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多