使用TKinter创建浏览按钮

use*_*081 6 python tkinter

我正在编写一些代码,用户需要能够选择程序将运行的文件.我创建了一个允许用户选择文件的浏览按钮,但是当你点击'okay'时,程序的其余部分都没有意识到有输入.选择文件后,还应在浏览栏中自动输入文件名.有什么建议?

from Tkinter import *

class Window:       

def __init__(self, master):     

    #Browse Bar
    csvfile=Label(root, text="File").grid(row=1, column=0)
    bar=Entry(master).grid(row=1, column=1) 

    #Buttons  
    y=7
    self.cbutton= Button(root, text="OK", command=master.destroy)       #closes window
    y+=1
    self.cbutton.grid(row=10, column=3, sticky = W + E)
    self.bbutton= Button(root, text="Browse", command=self.browsecsv)
    self.bbutton.grid(row=1, column=3)

#-------------------------------------------------------------------------------------#
def browsecsv(self):
    from tkFileDialog import askopenfilename

    Tk().withdraw() 
    filename = askopenfilename()

#-------------------------------------------------------------------------------------#
import csv

with open('filename', 'rb') as csvfile:
    logreader = csv.reader(csvfile, delimiter=',', quotechar='|')
    rownum=0

    for row in logreader:    
        NumColumns = len(row)        
        rownum += 1

    Matrix = [[0 for x in xrange(NumColumns)] for x in xrange(rownum)] 

csvfile.close()


root = Tk()
window=Window(root)
root.mainloop()  
Run Code Online (Sandbox Code Playgroud)

abh*_*arg 6

你也可以使用tkFileDialog ..

import Tkinter,tkFileDialog

root = Tkinter.Tk()
file = tkFileDialog.askopenfile(parent=root,mode='rb',title='Choose a file')
if file != None:
    data = file.read()
    file.close()
    print "I got %d bytes from this file." % len(data)
Run Code Online (Sandbox Code Playgroud)


ela*_*tic 4

filename = askopenfilename()仅在此范围内已知,您必须返回它或以任何方式使用它。

请参阅此网站了解更多示例:

    Tkinter.Button(self, text='Browse', command=self.askopenfile)
Run Code Online (Sandbox Code Playgroud)

...

    def askopenfile(self):
        return tkFileDialog.askopenfile(mode='r', **self.file_opt)
Run Code Online (Sandbox Code Playgroud)

编辑

布莱恩·奥克利当然是对的!这就是我说的“以任何方式使用它”时的意思;)有时您选择一个文件名,有时您只需使用filename.

这个怎么样?

from Tkinter import *
import csv

class Window:       
def __init__(self, master):     
    self.filename=""
    csvfile=Label(root, text="File").grid(row=1, column=0)
    bar=Entry(master).grid(row=1, column=1) 

    #Buttons  
    y=7
    self.cbutton= Button(root, text="OK", command=self.process_csv)
    y+=1
    self.cbutton.grid(row=10, column=3, sticky = W + E)
    self.bbutton= Button(root, text="Browse", command=self.browsecsv)
    self.bbutton.grid(row=1, column=3)

def browsecsv(self):
    from tkFileDialog import askopenfilename

    Tk().withdraw() 
    self.filename = askopenfilename()

def process_csv(self):
    if self.filename:
        with open(self.filename, 'rb') as csvfile:
            logreader = csv.reader(csvfile, delimiter=',', quotechar='|')
            rownum=0

            for row in logreader:    
                NumColumns = len(row)        
                rownum += 1

            Matrix = [[0 for x in xrange(NumColumns)] for x in xrange(rownum)] 

root = Tk()
window=Window(root)
root.mainloop()  
Run Code Online (Sandbox Code Playgroud)

这还有很多工作要做,但至少在确定文件名称之前您不会尝试打开文件。