【问题标题】:Access name of chosen directory in python with Tkinter使用 Tkinter 在 python 中访问所选目录的名称
【发布时间】:2015-07-09 00:57:29
【问题描述】:

我正在尝试使用带有 Tkinter 网格的最小 GUI 让我的 python 程序更易于访问。

我创建了一个类,该类创建一个要求选择目录的按钮。这可以正常工作。但是,我希望将目录的路径镜像到按钮下方的一行中。

class dir_choice:
  def __init__(self, master, text, prow, pcol):
    self.dir_button = Button(master, text = text, command = self.askdir)
    self.dir_button.grid(row = prow, column = pcol)

    self.feedb = Label(master, text = "text")
    self.feedb.grid(row = prow+1, column = pcol)

  def askdir(self):
    name = askdirectory() #from tkFileDialog
    return name

使用中:

dir1 = dir_choice(root, "FOLDER 1", 3, 2)

如果选择了该目录,我希望在按钮下方显示"C:/user/A/B/C" 之类的东西,而不是text = "text"

我认为假设这是在 name 变量中是不正确的,或者如果是,我需要以不同的方式定义它。所以我的问题是如何访问askdirectory() 函数的值以及如何将该值推送到feedb 标签。

【问题讨论】:

  • 快速注释。 self.dir_buttonself.feedb 根据定义是 None 。原因是 grid 返回 None。不要像这样链接网格。在单独的行中调用它,即self.dir_button.grid(...)
  • @Marcin 谢谢。我在我的代码中更改了它并对其进行了编辑。对我的目录值问题有任何想法吗?

标签: python tkinter


【解决方案1】:

可能只是复制粘贴错误,但缩进不正确。

PEP-8 风格要求使用 CamelCase 命名的类。它不会使您的代码运行得更快,但可读性很重要。

避免链接您的几何管理方法。如果您将几何方法(例如grid())链接到小部件创建,您最终会保存这些方法的返回值,该值始终为None,因此self.dir_buttonself.feedb 都只是None。而是将几何管理方法放在单独的一行。

要更改小部件的属性,只需configure() 它(或简称config())。 askdirectory() 返回一个字符串,因此您可以直接使用它或将其保存到类似self.directory_name 的位置。 return 在任何地方都没有用,因为该函数是由 Button 调用的,而 Button 不能对返回值做任何事情。

class DirChoice:
    def __init__(self, master, text, prow, pcol):
        self.dir_button = Button(master, text = text, command = self.askdir)
        self.dir_button.grid(row = prow, column = pcol)
        self.feedb = Label(master, text = "text")
        self.feedb.grid(row = prow+1, column = pcol)
    def askdir(self):
        self.feedb.config(text= askdirectory()) #from tkFileDialog

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 2021-12-09
    • 2017-06-08
    相关资源
    最近更新 更多