已选择Python tkinter验证文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已选择Python tkinter验证文件相关的知识,希望对你有一定的参考价值。

我正在Python 3.7中使用Tkinter,作为一种让用户使用askopenfilename窗口选择文件的方法。我也有一个“运行”按钮。我想检查一下是否已打开文件。如果没有打开任何文件,我会收到一条错误消息,并且如果选择了文件,则希望该程序运行。

这里是我到目前为止的代码:

import tkinter as tk
from tkinter import *
from tkinter import ttk
from tkinter import filedialog

class GetInfo:
    def __init__(self, master):
        self.master = master
        self.FileLabel = Label(master, text="Open the File to Use", font=("Arial Bold", 13)).grid(row=9, column=0,
                                                                                                  sticky=W)
        openFileCommand = master.register(self.FileOpen)
        self.file_button = ttk.Button(master, text="Select File",
                                      command=openFileCommand).grid(row=10, column=0, sticky=W, pady=10)

        runCommand = master.register(self.getInput)
        exitCommand = master.register(self.getCancel)

        self.run_button = ttk.Button(master, text="Run",
                                     command=runCommand).grid(row=20, column=0, sticky=W)

        self.cancel_button = ttk.Button(master, text="Cancel",
                                        command=exitCommand).grid(row=20, column=1, sticky=W)

    def FileOpen(self):
        self.File = filedialog.askopenfilename(title="Open the file",
                                               filetypes=(("Files", "*.txt"), ("All Files", "*")))
        self.file_only = self.File.split('/')[-1]

    def getInput(self):
        if self.File is None:
            self.warning_window = tk.showerror('Error', 'Please select a file to use.')
        else:
            self.close_box_window = tk.messagebox.askokcancel('Running', "Running the program, default = 'ok'")
            if self.close_box_window == True:
                root.destroy()
            else:
                return

    def getCancel(self):

        self.MsgBox_window = tk.messagebox.askokcancel("Exit", "Are you sure you want to exit?", icon="warning",
                                                       default='cancel')
        if self.MsgBox_window == False:
            return
        else:
            root.destroy()


root = Tk()
root.geometry('800x500')
gui = GetInfo(root)

root.mainloop()

File = gui.file_only

我不断收到错误:

AttributeError: 'GetInfo' object has no attribute 'File'

我以前曾做过这项工作(不对self.File代码进行if / else检查)。我不确定如何获得想要的东西。任何帮助,将不胜感激。

答案
class GetInfo: def __init__(self, master): self.File = None

此外,为避免一些粗心的错误,您可以使用if语句来判断函数FileOpen()中的文件名:

    def FileOpen(self):
        filename = filedialog.askopenfilename(title="Open the file",
                                               filetypes=(("Files", "*.txt"), ("All Files", "*")))
        if filename: # when cancel, it will be ""
            self.File = filename
            self.file_only = self.File.split('/')[-1]

以上是关于已选择Python tkinter验证文件的主要内容,如果未能解决你的问题,请参考以下文章

Python.tkinter.打开对话框选择文件文件夹

Python - 如何读取从Tkinter中选择的文件?

用Tkinter打造自己的Python IDE开发工具可调整分割布局文件夹和文件名选择及目录树

用Tkinter打造自己的Python IDE开发工具可调整分割布局文件夹和文件名选择及目录树

用Tkinter打造自己的Python IDE开发工具可调整分割布局文件夹和文件名选择及目录树

Python Tkinter。以画布形式打开 BMP 文件