如何为在for循环Tkinter中生成的每个小部件分配名称

时间:2018-09-17 14:52:19

标签: python python-3.x tkinter

在Python中是一个非常新的东西,我现在有一个问题,问题是试图通过for循环为列表中的每个项目创建一个小部件Notebook,但是问题是我无法为每个小部件分配名称,我需要小部件名称以在每个Notebook小部件中放置不同的小部件。

正如我所说的,我是python的菜鸟,我认为下面的代码很烂:),所以谢谢您的帮助。

from tkinter import ttk
note = ttk.Notebook()

list=["tab1","tab2"]

def show_parent_name():
    name= button2.winfo_parent()
    print(name)

for i in (list):
        name_tab=i

        tab = ttk.Frame(note, name=name_tab)   #-----name define the widget
        note.add(tab, text=nombre_tab)   # ---text define the tab name
        note.pack()

        global button2
        button2 = Button(tab, text="print parent name",command=show_parent_name)
        button2.grid(row=0, column=0, sticky=W)

note.mainloop()

1 个答案:

答案 0 :(得分:0)

几件事:list是一个内置函数。如果将list用作变量名,则该函数将不再可用。

我也正在导入tkinter,因为使用了来自tkinter的对象和常量。

我正在使用lambda编写按钮回调,该回调使我可以将选项卡名称作为参数传递给show_parent_name函数。那我也不需要全局变量。

我重写了循环变量的用法,因为它比必需的更为复杂。

如果您未明确创建窗口根目录(Tk(),Tkinter会自动创建该窗口根目录。但是,如果您打算对窗口进行任何操作,除了包含“笔记本”之外,还应该显式创建它。

尝试以下代码,看看它是否可以按照您想要的方式工作:

from tkinter import *
from tkinter import ttk

note = ttk.Notebook()
alist = ["tab1","tab2"]

def show_parent_name(name):
    print(name)

for name_tab in alist:
    tab = ttk.Frame(note, name=name_tab)   #-----name define the widget
    note.add(tab, text=name_tab)   # ---text define the tab name
    note.pack()

    button2 = Button(tab, text="print parent name",
                     command=lambda name_tab=name_tab: show_parent_name(name_tab))
    button2.grid(row=0, column=0, sticky=W)

note.mainloop()