2017-10-05 1 views
0

Der Zweck meines Codes ist es, eine GUI mit 4 Tasten zu erstellen. Zwei davon öffnen ein "Browse" -Fenster, in dem der Benutzer eine Datei aus einem Verzeichnis auswählen kann. Die dritte Schaltfläche ermöglicht es dem Benutzer, ein Verzeichnis für das endgültige Dokument zu wählen, an das ausgegeben werden soll. Die vierte Schaltfläche wendet meinen Python-Code auf beide Dateien an und erstellt das ausgegebene Dokument.askopenfilename ist nicht definiert? - Erstellen einer Browse-Schaltfläche in tkinter

Beim Versuch, die "browse" -Schaltflächen durch viele Posts hier im Stackoverflow und im Internet zu erstellen, enthalten die meisten Lösungen das Modul "askopenfilename", das oft von tkFileDialog importiert wird. Aber egal wie ich es schreibe, oder welche Variationen von Tkinter-Modulen ich importiere, bekomme ich durchweg die gleichen Fehlermeldungen von "kein Modulname tkfileDialog" oder "askopenfilename ist nicht definiert".

Mache ich etwas falsch mit meinem Code? Ist das ein häufiger Fehler in tkinter mit Python 3.6? Wie würde man eine Schaltfläche zum Durchsuchen erstellen, die eine Datei findet und ihren Pfad hinzufügt?

Bitte lassen Sie mich wissen!

Danke.

Unten ist mein Code:

import os 
#from tkFileDialog import * 
from tkinter import filedialog 
from Tkinter import * 
from tkfileDialog import askopenfilename 
content = 'apple' 
file_path = 'squarebot' 


#FUNCTIONS 
def browsefunc(): #browse button to search for files 
    filename = askopenfilename() 
    infile = open(filename, 'r') 
    content = infile.read() 
    pathadd = os.path.dirname(filename)+filename 

    pathlabel.delete(0, END) 
    pathlabel.insert(0, pathadd) 

    return content 
def open_file(): #also browse button to search for files - im trying various things to get this to work! 
    global content 
    global file_path 

    #filename = filedialog.askopenfilename(filetypes = (typeName {.txt},)) 
    filename = askopenfilename()          
    infile = open(filename, 'r') 
    content = infile.read() 
    file_path = os.path.dirname(filename) 
    entry.delete(0, END) 
    entry.insert(0, file_path) 
    return content 

def process_file(content): #process conversion code 
    print(content) 

def directoryname(): 
    directoryname = filedialog.askdirectory() # pick a folder 


#GUI 

root = Tk() 
root.title('DCLF Converter') 
root.geometry("598x600") 

mf = Frame(root) 
mf.pack() 


f1 = Frame(mf, width=600, height=250) #DC file 
f1.pack(fill=X) 

f2 = Frame(mf, width=600, height=250) #LF file 
f2.pack(fill=X) 

f3 = Frame(mf, width=600, height=250) #destination folder 
f3.pack(fill=X) 

f4 = Frame(mf, width=600, height=250) #convert button 
f4.pack() 

file_path = StringVar 


Label(f1,text="Select Your DC File (Only txt files)").grid(row=0, column=0, sticky='e') #DC button 
entry = Entry(f1, width=50, textvariable=file_path) 
entry.grid(row=0,column=1,padx=2,pady=2,sticky='we',columnspan=25) 

Label(f2,text="Select Your LF File (Only csv files)").grid(row=0, column=0, sticky='e') #LF button 
entry = Entry(f2, width=50, textvariable=file_path) 
entry.grid(row=0,column=1,padx=2,pady=2,sticky='we',columnspan=25) 

Label(f3,text="Select Your Destination Folder").grid(row=0, column=0, sticky='e') #destination folder button 
entry = Entry(f3, width=50, textvariable=directoryname) 
entry.grid(row=0,column=1,padx=2,pady=2,sticky='we',columnspan=25) 

Button(f1, text="Browse", command=browsefunc).grid(row=0, column=27, sticky='ew', padx=8, pady=4)#DC button 
Button(f2, text="Browse", command=browsefunc).grid(row=0, column=27, sticky='ew', padx=8, pady=4)#LF button 
Button(f3, text="Browse", command=browsefunc).grid(row=0, column=27, sticky='ew', padx=8, pady=4)#destination folder button 
Button(f4, text="RECONCILE NOW", width=32, command=lambda: process_file(content)).grid(sticky='ew', padx=10, pady=10)#convert button 


root.mainloop() 

P. S Wenn Sie irgendwelche anderen Fehler in meinem Code gefunden haben, lassen Sie es mich wissen. Ich beginne gerade mit Tkinter, und als solches kann das etwas völlig Relatives zugeschrieben werden!

Viel geschätzt

+0

Was passiert, wenn Sie 'tkfileDialog' in 'tkFileDialog' ändern? – Kevin

+0

Verwenden Sie für Python 3.x 'filialialog.askopenfilename()', um die Funktion in Ihrem vorhandenen Code aufzurufen, oder fügen Sie einen 'from tkinter.filedialog-Import askopenfilename' hinzu und verwenden Sie' askopenfilename() ', um sie aufzurufen. – martineau

Antwort

3

Dies ist, was ich in meinem Code verwenden, damit es mit dem Tkinter Modul in beiden Python 2 und 3 funktioniert:

try: 
    import Tkinter as tk 
    import ttk 
    from tkFileDialog import askopenfilename 
    import tkMessageBox 
    import tkSimpleDialog 
    from tkSimpleDialog import Dialog 
except ModuleNotFoundError: # Python 3 
    import tkinter as tk 
    from tkinter import ttk 
    from tkinter.filedialog import askopenfilename 
    import tkinter.messagebox as tkMessageBox 
    import tkinter.simpledialog as tkSimpleDialog 
    from tkinter.simpledialog import Dialog 
.
1

Der Modulname ist falsch benannt.

Da die Python-Version 3.6 ist, müssen Sie die Dateiarchivbibliothek verwenden. Das schließt sollte wie folgt aussehen:

import os 
from tkinter import * 
import tkinter.filedialog 

oder

import os 
from tkinter import * 
from tkinter import filedialog 
+0

Ich bekomme immer noch den Fehler "ModuleNotFoundError: Kein Modul mit dem Namen 'tkFileDialog'" –

+0

Kann ich die Version von Python wissen, die Sie verwenden. Es funktioniert für mich in Python 2.7 –

+0

Wenn das Modul immer noch nicht gefunden wird, müssen Sie 'pip install tkFileDialog' verwenden, um das Modul zu installieren. –

0

Das Problem war eigentlich, dass ich brauchte askopenfilename() anhängen, wie durch Brüllen in einem jetzt gelöscht Kommentar erwähnt File-Dialog (es sieht aus wie diese -> filedialog.askopenfilename()

+0

Eine genaue Antwort wurde bereits von anderen gegeben. Beantworte deine eigene Frage nicht, wenn andere eine Antwort gegeben haben. Sowohl v.coder als auch martineau sind korrekt. Sie sollten beachten, dass die Bereitstellung der Python-Version Ihnen sofort eine genaue Antwort geliefert hätte. wie 2.X und 3.X importieren filialialog anders. –

Verwandte Themen