0

I have searched around and have not really found the answer to my problem yet.

I am trying to browse through files to take in an image file and a use its path as a variable to pass into my qr function, but when using file dialog it gives me this

<_io.TextIOWrapper name='C:/Users/Elias/Desktop/New folder/IMG_2635.JPG' mode='r' encoding='cp1252'>

rather than this C:/Users/Elias/Desktop/New folder/IMG_2635.JPG

Is there any way to do this better?

import tkinter as tk
from tkinter import ttk
from MyQR import myqr
from tkinter import filedialog
import os

LARGE_FONT = ("Verdana", 12)

class QRgenerator(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)

        tk.Tk.wm_title(self,"CST-205-Project2")
        container.pack(side = "top", fill  = "both", expand = True)

        container.grid_rowconfigure(0,weight = 1)
        container.grid_columnconfigure(0,weight = 1)

        self.frames = {}

        for f in (StartPage,PageOne,QR1,QR2):

            frame = f(container, self)

            self.frames[f] = frame

            frame.grid(row = 0, column = 0, sticky = "nsew")

        self.show_frame(StartPage)

    def show_frame(self,cont):
        frame = self.frames[cont]
        frame.tkraise()

def qr_2(size,url_in,path):
    print('\n\n\n\n1  being smaller \n40 being bigger')
    num = size
    # url = 'https://www.instagram.com/jayrfitz/?hl=en'
    url = url_in
    pic = path

    version, level, qr_name = myqr.run(
        words=url,
        version=num,
        level='H',
        picture=pic,
        colorized=True,
        contrast=1.0,
        brightness=1.0,
        save_name=None,
    #outputdirectory I deleted but we can set it here
        )

class StartPage(tk.Frame):

    def __init__(self,parent,controller):
        tk.Frame.__init__(self,parent)
        label = ttk.Label(self,text = "start page", font = LARGE_FONT)
        label.pack(pady = 10, padx = 10)

        button1 = ttk.Button(self,text = "next page", command = lambda: controller.show_frame(PageOne))
        button1.pack()
class PageOne(tk.Frame):
    def __init__(self,parent,controller):
        tk.Frame.__init__(self,parent)
        label = ttk.Label(self,text = "Page One", font = LARGE_FONT)
        label.pack(pady = 10, padx = 10)

        button1 = ttk.Button(self,text = "Option1", command = lambda: controller.show_frame(QR1))
        button1.place(x = 0, y = 0)

        button2 = ttk.Button(self,text = "Option2", command = lambda: controller.show_frame(QR2))
        button2.place(x = 425, y = 0)
class QR1(tk.Frame):

    def __init__(self,parent,controller):
        URLin = ' '
        Size = 1
        filePath = ' '

        def submit():
            content = url_entry.get()
            URLin = content
            print(URLin)
        def submit2():
            content = size_entry.get()
            Size = content
            print(Size)

        def Browse():
            filename = filedialog.askopenfile()
            filePath = filename
            print(filePath)

        tk.Frame.__init__(self,parent)
        label = ttk.Label(self,text = "start page", font = LARGE_FONT)
        label.pack()

        label = ttk.Label(self,text = "start page", font = LARGE_FONT)
        button1 = ttk.Button(self,text = "Page 1", command = lambda: controller.show_frame(PageOne))
        button1.place(x = 0, y = 450)

        url_label = ttk.Label(self,text = "Enter URL in box", font = LARGE_FONT)
        url_label.place(x = 100, y = 25)

        submit1 = ttk.Button(self,text = "submit", command = submit)
        submit1.place(x = 0, y = 25)

        url_entry = ttk.Entry(self,width = 50)
        url_entry.place(x = 0, y = 100)

        submit2 = ttk.Button(self,text = "submit", command = submit2)
        submit2.place(x = 0, y = 150)

        size_label = ttk.Label(self,text = "Enter the size of the QR code", font = LARGE_FONT)
        size_label.place(x = 100, y = 150)

        size_entry = ttk.Entry(self,width = 50)
        size_entry.place(x = 0, y = 200)

        file_label = ttk.Label(self,text = "Press Browse to locate file or enter and click submit", font = LARGE_FONT)
        file_label.place(x = 0, y = 350)
        FileBrowse = ttk.Button(self,text = "Browse",command = Browse,)
        FileBrowse.place(x = 0, y= 250)

        file_ent = ttk.Entry(self,width = 50, text = filePath)
        file_ent.place(x = 0, y = 300)



        run = ttk.Button(self,text = "Run", command = lambda: qr_2(Size,URLin,filePath))
        run.place(x = 0, y = 400)




class QR2(tk.Frame):

    def __init__(self,parent,controller):
        tk.Frame.__init__(self,parent)
        label = ttk.Label(self,text = "start page", font = LARGE_FONT)
        label.pack(pady = 10, padx = 10)

        button1 = ttk.Button(self,text = "next page", command = lambda: controller.show_frame(PageOne))
        button1.pack()


app = QRgenerator()
app.geometry("500x500")
app.mainloop()
2
  • Please cut the code down. If the problem is with the file dialed g, you can probably remove 90% of the code. See stackoverflow.com/help/mcve Commented Oct 10, 2016 at 1:57
  • @BryanOakley - file dialed g? Posting from your phone, perhaps? :P Commented Oct 10, 2016 at 2:03

1 Answer 1

3

You are using filedialog.askopenfile(). This gives you a file handle. If you just want the file name, use filedialog.askopenfilename().

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.