【问题标题】:ttk.Label to show variablettk.Label 显示变量
【发布时间】:2013-07-23 10:31:33
【问题描述】:

我试图在 ttk.Label(变量 Fname)中显示/更新文件名但没有成功,我该怎么做?有什么想法吗?

谢谢。

我的脚本:

import os
from tkinter import *
from tkinter import ttk

def printName():
    path="X:\\Temp"
    dir=os.listdir(path)
    for fn in dir:
        fName=path+'/'+fn
        print(fName)

rt = Tk()

Frame = ttk.Frame(rt, padding="10 10 100 100")
Frame.grid(column=0, row=0, sticky=(N, W, E, S))
ttk.Button(Frame, text='Click', command=printName).grid(column=1, row=1, sticky=W)
ttk.Label(Frame, text="fName").grid(column=1, row=3, sticky=(W, E))

rt.mainloop()

【问题讨论】:

    标签: python-3.x tkinter


    【解决方案1】:

    您想要做的是使用 tkinter 变量类。 在你的情况下,你想要一个StringVar

    您可以将 Tkinter 变量与标签(或基本上任何其他小部件)相关联。当变量的内容发生变化时,标签会自动更新:

    v = StringVar()
    Label(master, textvariable=v).pack()
    
    v.set("New Text!")
    

    变量类包括BooleanVar, DoubleVar, IntVar, StringVar

    Read more

    【讨论】:

    • 感谢您的帮助。我在脚本中的哪里添加这些行。该链接不提供此信息。
    • 好吧,您不要将这些行添加到脚本中。这只是一个示例,可帮助您了解如何将 tkinter 变量与小部件相关联。
    【解决方案2】:

    另一个没有 StringVar 的解决方案只是存储对 Label 小部件的引用并使用其 config 方法来更改文本选项。

    除此之外,我建议您使用os.path.join 而不是fName=path+'/'+fn,并为变量dir 使用另一个名称,因为它已经是built-in function

    def printName():
        path="X:\\Temp"
        newtext = '\n'.join(os.path.join(path, fn) for fn in listdir)
        label.config(text=newtext)
    
    label = ttk.Label(Frame, text="fName")
    label.grid(column=1, row=3, sticky=(W, E))
    

    【讨论】:

    • 谢谢。它只打印最后一个文件名。有什么原因吗?
    • @user1212200 这是因为标签更新了每个文件的文本,所以最后一个不会被任何其他 config 调用更改。要显示所有文件名吗?
    • 是的,那太好了。如果按照循环中的当前文件进行更改,那就太棒了。
    • @user1212200 它将根据循环中的当前文件进行更改,唯一的事情是它发生得如此之快(以毫秒为单位)以至于您无法注意到。请参阅我的更新答案。
    猜你喜欢
    • 1970-01-01
    • 2015-09-29
    • 2020-08-23
    • 1970-01-01
    • 2015-06-28
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多