Обозреватель файлов Python GUI (Tkinter) и укажите выбранный файл на пустом месте
Этот графический интерфейс позволяет пользователю открывать браузер файлов и выбирать нужные файлы, показывать их в пустом поле и затем открывать файл после нажатия кнопки "Открыть". Я новичок в Python и пытался поместить print tkFileDialog.askopenfilename() в self.filename, но это приводит к синтаксической ошибке. Пожалуйста помоги. Спасибо!
Мой вопрос заключается в следующем: 1) Почему мой файловый браузер открывается дважды при нажатии кнопки "Файловый браузер". 2) Кроме того, как мне указать каталог файла, выбранного в пустом файле, а не в командной строке python?
Я хотел бы открыть файл в будущем после нажатия кнопки ОК.
from Tkinter import *
import csv
import tkFileDialog
class Window:
def __init__(self, master):
self.filename=""
csvfile=Label(root, text="Load File:").grid(row=1, column=0)
bar=Entry(master).grid(row=1, column=1)
#Buttons
y=12
self.cbutton= Button(root, text="OK", command=self.process_csv) #command refer to process_csv
y+=1
self.cbutton.grid(row=15, column=3, sticky = W + E)
self.bbutton= Button(root, text="File Browser", command=self.browsecsv) #open browser; refer to browsecsv
self.bbutton.grid(row=1, column=3)
def browsecsv(self):
from tkFileDialog import askopenfilename
Tk().withdraw()
self.filename = askopenfilename()
print tkFileDialog.askopenfilename() # print the file that you opened.
def callback():
abc = askopenfilename()
execfile("input.xlsx")
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()
1 ответ
Оба ваших вопроса связаны. Проблема в вашем browsecsv(self)
метод. Ваш directory
уже хранится в self.filename
нет необходимости звонить askopenfilename()
снова. Вот почему файловый браузер открывается дважды. Кроме того, чтобы установить текст в вашем Entry
Вам необходимо присвоить ему текстовую переменную.
self.entryText = StringVar()
self.bar = Entry(root, textvariable=self.entryText ).grid(row=1, column=1)
Затем вы можете назначить его Entry
в вашем методе:
def browsecsv(self):
from tkFileDialog import askopenfilename
Tk().withdraw()
self.filename = askopenfilename()
self.entryText.set(self.filename)