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

2024-04-18 00:13:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的新手,我现在有一个问题,就是试图通过for循环为列表中的每个项目制作一个widget笔记本,但问题是我不能为每个widget指定一个名称,我需要widget名称来将不同的widget放入每个Notebook widget中。在

正如我所说的,我是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()

Tags: textname名称forshowwidgettablist
1条回答
网友
1楼 · 发布于 2024-04-18 00:13:21

有几点: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()

相关问题 更多 >

    热门问题