[英]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.