【问题标题】:Tkinter Click Event Highlights the Label Clicked?Tkinter 单击事件突出显示单击的标签?
【发布时间】:2020-04-15 09:48:52
【问题描述】:

我正在尝试在 tkinter 中编写一个程序,其中有一个标签表,当您单击标签时,该行会突出显示。

我的代码目前看起来像这样,用于定义点击事件和标签(dbf 是它们所在的框架):

def callback(event):
    event.widget.bg('blue')

for i in range(0,len(table_values)):
    num_lab1 = tk.Label(dbf, text=table_values[i][0], width=10, justify='left', bg='white')
    num_lab1.bind("<Button-1>", callback)
    num_lab1.grid(row=i+1, column=0)

    name_lab1 = tk.Label(dbf, text=table_values[i][1], width=20, justify='left', bg='white')
    name_lab1.bind("<Button-1>", callback)
    name_lab1.grid(row=i+1, column=1)

    comm_lab1 = tk.Label(dbf, text=table_values[i][2], width=50, justify='left', bg='white', wraplength=250)
    comm_lab1.bind("<Button-1>", callback)
    comm_lab1.grid(row=i+1, column=2)

但是,当我单击标签时,它会告诉我“标签没有属性 'bg'”。为什么 bg 在这里不起作用,但在定义标签时起作用?

有什么方法可以做我所追求的并让点击的行突出显示?

(我现在知道,如果它有效,它只会突出显示当前标签。我想知道如何突出显示该行之后,我想出了这一点,但在这里被难住了。)

任何帮助将不胜感激!谢谢!

编辑:更正了代码中的 .bind 行(感谢 acw)

Edit2:想出了如何让整行改变颜色。将每一行放在一个框架中,然后调用该框架及其所有子框架。这样回调事件看起来像这样:

def callback(event):
    # Makes all rows white
    for j in row_dict:
        for k in row_dict[j].winfo_children():
            k.configure(bg='white')
    # Makes clicked row highlighted
    for l in event.widget.master.winfo_children():
        l.configure(bg='#a1c1ff')

其中 row_dict 是所有帧(或行)的字典。还有田!突出显示点击的表格行!

【问题讨论】:

  • 应该是event.widget.config(bg='blue')
  • 另外,num_lab1.bind(...) 也被调用了 3 次。第二个和第三个应该分别是name_lab1.bind(...)comm_lab1.bind(...)
  • 谢谢两位!是的,配置有效!而且啊,我的复制粘贴技能需要一些工作......感谢您指出 acw :)

标签: python tkinter mouseclick-event


【解决方案1】:

像这样修改callback() 函数:

def callback(event):
    event.widget.config(bg='blue')

希望这会有所帮助。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多