Aug-12-2019, 11:47 AM
Hello, I am trying to read PDF file in Gui class and then I will use that read file to do some graphical process.
Here is the Gui class:
Gui.py:
TestBench.py:
I am not rally familiar with OOP so am currently learning but as I understand, the program calls the class as expected,
Here is the Gui class:
Gui.py:
# Multi-frame tkinter application v2.3
import os
import sys
sys.path.insert(0, "..")
import tkinter as tk
import tkinter.filedialog
class SampleApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self._frame = None
self.switch_frame(StartPage)
self.title("Welcome to EMC Deep Learning Application")
self.geometry('1000x500')
self.pdf_File = None
def switch_frame(self, frame_class):
"""Destroys current frame and replaces it with a new one."""
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.grid()
## def on_change(e):
## print e.widget.get()
class StartPage(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
tk.Label(self, text="Ne işlem yapılacak?").grid(row=1,column=1)
tk.Button(self, text="Öğret",
command=lambda: master.switch_frame(PageOne)).grid()
tk.Button(self, text="Öğren",
command=lambda: master.switch_frame(PageTwo)).grid()
class PageOne(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
tk.Label(self, text="Öğretmek için orjinal test sonuçlarının yüklü olduundan emin olun").grid(row=1,column=1)
tk.Button(self, text="Ana Sayfaya Dön",
command=lambda: master.switch_frame(StartPage)).grid(row=2,column=1)
vendorVar = tk.StringVar(self) #create a panel vendor variable
vendors = {'BOE','SAMSUNG','LG'}
vendorVar.set('BOE') # set default opt
self.vendorVar = vendorVar
vendorLabel = tk.Label(self, text="Marka:")
vendorLabel.grid(row = 3, column = 1)
popMenuVendor = tk.OptionMenu(self, vendorVar, *vendors)
popMenuVendor.grid(row=4,column=1)
techVar = tk.StringVar(self) #create a panel vendor variable
techs = {'LCD','OLED','QDOT'}
techVar.set('LCD') # set default opt
self.techVar = techVar
techLabel = tk.Label(self, text="Teknoloji:")
techLabel.grid(row = 3, column = 2)
popMenuTech = tk.OptionMenu(self, techVar, *techs)
popMenuTech.grid(row=4,column=2)
sizeBox = tk.IntVar(self)
tk.Label(self, text="Ekran Boyutu:").grid(row = 3, column = 3)
sizeBox = tk.Entry(self)
sizeBox.grid(row=4,column=3)
self.sizeBox = sizeBox
tk.Label(self, text="PDF dosyası").grid(row = 3, column = 4)
pdfButton = tk.Button(self, text="Yükle",
command=lambda: self.pdfUpload())
pdfButton.grid(row=4,column=4)
buttonT = tk.Button(self, text="Goster", command=self.ok)
buttonT.grid(row=5,column=1)
def ok(self):
print ("vendor is: " + self.vendorVar.get() )
print("tech is " + self.techVar.get() )
if(self.sizeBox.get().isdigit()):
print("size is: " + self.sizeBox.get())
else:
print("not an integer!")
master.pdf_File = self.pdf_File
def pdfUpload(self):
self.pdf_File = tk.filedialog.askopenfilename(initialdir = "/Users/26015017/Desktop/",title = "Dosya Seçin",filetypes = [("pdf files","*.pdf")])
## os.startfile(self.pdf_File)
## master.quit()
class PageTwo(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
tk.Label(self, text="This is page two").pack(side="top", fill="x", pady=10)
tk.Button(self, text="Return to start page",
command=lambda: master.switch_frame(StartPage)).pack()
if __name__ == "__main__":
app = SampleApp()
app.mainloop()and here is the main file:TestBench.py:
import cv2
import tkinter
import numpy as np
import matplotlib.pylab as plt
import matplotlib.pyplot as plot
'exec(%matplotlib inline)'
import tabula
from classes.Graphs import *
from classes.Gui import *
from pdf2image import convert_from_path
from pdf2image import convert_from_bytes
##tkinter._test()
app = SampleApp()
app.mainloop()
pdf_File = app.pdf_File
os.startfile(pdf_File)
##pdf2PNG = convert_from_path('images/ex2.Pdf', 500)
pdf_File.save('images/temp/ex2.pdf', 'PDF')
##pdf2PNG = convert_from_bytes(app.pdf_File, 500)
tabula.convert_into("images/ex2.pdf", "images/ex2.csv", output_format="csv", pages='all')
tabula.convert_into(pdf2PNG, "images/ex2.csv", output_format="csv", pages='all')
pdf2PNG[0].save('images/temp/ex2.png', 'PNG')
img = cv2.imread('images/temp/ex2.png')
graph1 = BasicGraph(1, img)
print("Graph revision: ", graph1.revision)
print("Y origin is: ", graph1.yOrigin)
print("xAxis legth is: ", graph1.xAxisLength)
print("X origin is: ", graph1.xOrigin)
print("yAxis legth is: ", graph1.yAxisLength)
print("47 Limit Len: ", graph1.limit47Length)
print("47 Limit Y is: ", graph1.y47)
print("40 Limit Len is: ", graph1.limit40Length)
print("40 Limit Y is: ", graph1.y40)
print("Last data on X axis is: ", graph1.lastDataX)
print("Last y axis is: ", graph1.lastXAxis)
print("unitY is : ", graph1.unitY)
plot.plot(graph1.hrzData)
plot.plot(graph1.vrtData)
plot.axis([0, 970, 0, 80])
plot.show()
cv2.waitKey(0)
cv2.destroyAllWindows()what I get (after selecting the file) is like this:Quote:Traceback (most recent call last):
File "D:\Users\26015017\Desktop\Deneme9\testBench_2.py", line 20, in <module>
os.startfile(pdf_File)
TypeError: startfile: filepath should be string, bytes or os.PathLike, not NoneType
I am not rally familiar with OOP so am currently learning but as I understand, the program calls the class as expected,
app = SampleApp()reads the file correctly and opens the file after reading correctly in class script:
def pdfUpload(self):
self.pdf_File = tk.filedialog.askopenfilename(initialdir = "/Users/26015017/Desktop/",title = "Dosya Seçin",filetypes = [("pdf files","*.pdf")])
os.startfile(self.pdf_File)When I run os.startfile I see the document I choosed (because it happens under gui.py). And till I close the window, I don't get the warning so I think after I close the window, all the variables in the class vanishes too. So my question is 'what is happening here?' If I correctly assessed the problem, how can I overcome this problem?
