【问题标题】:Use an entry input as a file name Python tkinter使用条目输入作为文件名 Python tkinter
【发布时间】:2019-12-06 14:29:53
【问题描述】:

我需要创建一个 excel 文件,然后使用 tkinter 文本框为其命名,换句话说,我需要将 tkinter entry getvalue 存储到一个变量中,然后将其作为名称分配给我将创建的文件。

代码:

import tkinter as tk

def show_entry_fields():
    print("Nom du rapport global: %s" % (e1.get()))

master = tk.Tk()
tk.Label(master, 
         text="Nom du rapport global").grid(row=0)

e1 = tk.Entry(master)

e1.grid(row=0, column=1)

tk.Button(master, 
          text='Quit', 
          command=master.quit).grid(row=3, 
                                    column=1, 
                                    sticky=tk.W, 
                                    pady=4)
tk.Button(master, 
          text='Show', command=show_entry_fields).grid(row=3, 
                                                       column=0, 
                                                       sticky=tk.W, 
                                                       pady=4)
import xlsxwriter

workbook = xlsxwriter.Workbook(e1.get()+'.xlsx')
worksheet = workbook.add_worksheet("Rapport global")
worksheet.set_column(1, 1, 25)
worksheet.set_column(1, 2, 25)
worksheet.write('F3', "Hello") 
worksheet.write('G3', "world") 
workbook.close()

tk.mainloop()
master.withdraw()

它创建了一个excel文件,但是没有名称,我不知道如何检索输入条目并将其分配为文件名

【问题讨论】:

  • 我认为问题在于您在循环中创建了 excel 表,因此一旦窗口打开,它就会创建带有空字段的 excel 表。您可以将 e1.get 分配给全局变量并使工作表在循环之外,或者您可以将保存功能绑定到保存按钮,例如
  • 它会创建一个未命名的文件,因为您的脚本一直运行到 "workbook = xlsxwriter.Workbook(e1.get()+'.xlsx')" 并将名称设置为 " " 因为您的条目字段为空。

标签: python-3.x tkinter input filenames


【解决方案1】:

我没有 xlsxwriter 但我认为你的

workbook = xlsxwriter.Workbook(e1.get()+'.xlsx')

在您在输入框中设置值之前执行。

一种可能的解决方案是:

获取入口值并将其存储在变量中。为此,我创建了另一个按钮 but_save。此按钮调用方法 save_entry 获取值 条目输入并存储在变量中。

运行脚本,输入所需的名称,然后按保存按钮。

没有以 Microsoft Excel 文件格式存储变量,因为我没有此模块 但为简单起见,我将其存储在文本文件中。您应该也可以将其存储为 xsl。

from tkinter import Tk, Label, Entry, Button

class Set_Name():
    def __init__(self, master):
        self.master = master
        self.init_widgets()

    def show_entry_fields(self):
        print("Nom du rapport global: %s" % (self.e1.get()))

    def init_widgets(self):

        self.lab_1 = Label(self.master, text="Nom du rapport global")
        self.lab_1.grid(row=0)
        self.e1 = Entry(self.master)
        self.e1.grid(row=0, column=1)
        self.but_quit = Button(self.master, text='Quit', command=self.master.quit)
        self.but_quit.grid(row=3, column=1, sticky='W', pady=4)
        self.but_show = Button(self.master, text='Show', command=self.show_entry_fields)
        self.but_show.grid(row=3, column=0, sticky='W', pady=4)
        self.but_save = Button(self.master, text="Save", command=self.save_entry)
        self.but_save.grid(row=3, column=2)

    def save_entry(self):
        # I don't have xlsxwriter.
        file_name = self.e1.get()   # get the string from Entry
        with open(file_name, 'w', encoding='utf-8') as f:
            f.write("Hello World!") # write whatever you want

if __name__ == "__main__":
    root = Tk()
    app = Set_Name(root)
    root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多