【问题标题】:How can I create a non-unique browse button in python?如何在 python 中创建一个非唯一的浏览按钮?
【发布时间】:2015-07-21 23:14:21
【问题描述】:

我正在使用; Python 3.4、Windows 8、tkinter。我正在尝试创建一个通用浏览按钮,它将获取文件名并将其分配给变量。

我创建了以下代码来执行此操作。

from tkinter import *
from tkinter import filedialog
from tkinter import ttk

class Application(Frame):
# A GUI Application.
# Initialize the Frame
    def __init__(self, master):
        Frame.__init__(self, master)
        nbook = ttk.Notebook(root)
        nbook.pack(fill='both', expand='yes')
        f1 = ttk.Frame(nbook)
        nbook.add(f1, text='QC1')
        self.qc1_tab(f1)

# create QC1 tab contents
    def qc1_tab(self, tab_loc):

        # Set up file name entry.
        Label(tab_loc, text="Select file:").grid(pady=v_pad, row=0, column=0, sticky=W)
        self.flnm = ttk.Entry(tab_loc, width=60)
        self.flnm.focus_set()
        self.flnm.grid(pady=v_pad, row=0, column=1, columnspan=2, sticky=W)
        ttk.Button(tab_loc, text="Browse...", width=10, command=self.browse).grid(row=0, column=3)

    def browse(self):
        temp = filedialog.askopenfilename()
        self.flnm.delete(0, END)
        self.flnm.insert(0, temp)

root = Tk()
app = Application(root)
root.mainloop()

唯一的问题是浏览按钮绑定到self.flnm 并且不能用于其他任何事情。我打算多次使用浏览按钮来获取几个不同文件的文件名,并且宁愿没有多个浏览命令。

我需要从一个按钮调用它,然后以某种方式将它分配给一个变量。

我在想类似的东西

ttk.Button(..., command=lambda: self.flnm = self.browse)
...
def browse(self):
    filename = filedialog.askopenfilename()
    return filename

但这非常失败。

如何制作通用浏览按钮?

【问题讨论】:

  • 我对 TKinter 了解不多,但至少可以看出一个问题:不能在 lambda 中进行赋值操作。相反,为此使用另一个命名函数。
  • 我不确定您要如何选择文件,但您要将文件名分配给哪个变量?你说你可能想在你的申请过程中选择不同的文件名,你想如何管理这个?例如,您是否想要覆盖之前选择的文件名,或者您想要跟踪用户在应用程序生命周期中可能选择的所有文件名?这些细节对我们很重要,以便给出具体的答案。
  • @nbro。我想将其分配给self.flnm。我想将文件名分配给一个外部变量,以便以后在需要时使用。 Eric Levieil 能够为我的需要提供足够的代码。

标签: python python-3.x button tkinter


【解决方案1】:

你可以写:

def browse(self, target):
    temp = filedialog.askopenfilename()
    target.delete(0, END)
    target.insert(0, temp)

ttk.Button(..., command=lambda: self.browse(self.flnm))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2014-02-24
    • 2012-09-13
    相关资源
    最近更新 更多