繁体   English   中英

将函数绑定到同名的多个标签 - tkinter

[英]Bind function to multiple labels named equally - tkinter

我想允许用户使用以下代码创建任意数量的标签:

def new_line(event):
    global Row_n
    Row_n = Row_n + 1
    Choose= tk.Label(frame, text="Choose option", background = "white",font = ("Helvetica",13),fg = "blue")
    Choose.grid(row = Row_n, column = 0, sticky = 'nsew')
    return Row_n

root.bind('<Return>',lambda event:new_line(event))

这样,通过按“Enter”,用户可以创建任意数量的“Choose”标签。 但是我希望每次用户单击“选择”标签之一时出现第二个标签。 所以我使用以下代码:

def second_l(event):
    Row_n = Row_n+1
    second_label = tk.Label(frame, text="Second label")

Choose.bind('<Button-1>',lambda event:second_l(event))

当我尝试运行它时,我收到以下错误:

无法调用“绑定”命令:应用程序已被销毁

如果我在“new_line”函数之外添加“Choose”标签,“second_l”函数将仅适用于该标签。 它不适用于“new_line”函数生成的标签。

整个代码:

import tkinter as tk#to create the gui
from tkinter import filedialog, Text #filedialog to pick apps and Text to display text
import os #Allows us to run apps

root = tk.Tk() 

frame = tk.Frame(root,bg="white")
frame.place(relwidth=0.8,relheight=0.7,relx=0.1,rely=0.1)

Row_n=0

def new_line(event):
    global Row_n
    Row_n = Row_n + 1
    Choose= tk.Label(frame, text="Choose option", background = "white",font = ("Helvetica",13),fg = "blue")
    Choose.grid(row = Row_n, column = 0, sticky = 'nsew')
    return Row_n

root.bind('<Return>',lambda event:new_line(event))

def second_l(event):
    global Row_n
    Row_n = Row_n+1
    second_label = tk.Label(frame, text="Second label")
    second_label.grid(row = Row_n, column = 0, sticky = 'nsew')

Choose.bind('<Button-1>',lambda event:second_l(event))

root.mainloop()

我无法理解您为什么会收到此错误“无法调用“绑定”命令”,但我想,我理解您的问题

你可以试试这个: -

import tkinter as tk#to create the gui
from tkinter import filedialog, Text #filedialog to pick apps and Text to display text
import os #Allows us to run apps

root = tk.Tk() 

frame = tk.Frame(root,bg="white")
frame.place(relwidth=0.8,relheight=0.7,relx=0.1,rely=0.1)

Row_n=0
Choose= tk.Label(frame, text="", background = "white",font = ("Helvetica",13),fg = "blue")


def new_line(event):
    global Row_n
    Row_n = Row_n + 1
    Choose.config(text="Choose option")
    Choose.grid(row = Row_n, column = 0, sticky = 'nsew')
    return Row_n

root.bind('<Return>',lambda event:new_line(event))

def second_l(event):
    global Row_n
    Row_n = Row_n+1
    second_label = tk.Label(frame, text="Second label")
    second_label.grid(row = Row_n, column = 0, sticky = 'nsew')

Choose.bind('<Button-1>',lambda event:second_l(event))

root.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM