簡體   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