Page MenuHomec4science

AscCam.py
No OneTemporary

File Metadata

Created
Wed, Sep 11, 21:15

AscCam.py

#!/usr/bin/python3
# Few required libraries
import tkinter as tk
import os
import time
from picamera import PiCamera
# Main Tkinter class
class GUI(tk.Frame):
# Initialization of the class
def __init__(self, master=None):
super().__init__(master)
self.master = master
# Create the GUI
self.create_widgets()
# Instantiate the camera
self.camera = PiCamera(sensor_mode=3, resolution=PiCamera.MAX_RESOLUTION, framerate=1)
#filepath for output:
self.basePath = '/home/pi/Desktop/Imaging/{}'.format(time.strftime('%Y-%m-%d'))
if not os.path.exists(self.basePath):
os.mkdir(self.basePath)
os.chown(self.basePath, 1000, 1000)
# Create the main GUI
def create_widgets(self):
# Create separate frames to group similar buttons
frame1 = tk.Frame(master=self.master, bd=2, relief="ridge")
frame1.grid(row=0, column=0, columnspan=1, rowspan=3, sticky="N")
frame2 = tk.Frame(master=self.master, bd=2)
frame2.grid(row=0, column=1, columnspan=2, rowspan=1, sticky="NW")
frame3 = tk.Frame(master=self.master, bd=2, relief="ridge")
frame3.grid(row=2, column=1, columnspan=2, rowspan=2, sticky="NW")
# In Frame1 the general handling buttons
# Place the first item (a label) in the first frame
self.camLabel = tk.Label(master=frame1, text="CAMERA")
self.camLabel.pack()
# Then the buttons
self.camOnButt = tk.Button(master=frame1, text="ON", fg="green", command=self.camOn)
self.camOnButt.pack()
self.camOffButt = tk.Button(master=frame1, text="OFF", fg="red", command=self.camOff)
self.camOffButt.pack()
# the acquisition section
self.camResLabel = tk.Label(master=frame1, text=" Acquisition ")
self.camResLabel.pack()
self.camSnapButt = tk.Button(master=frame1, text="Snapshot", command=self.camSnap)
self.camSnapButt.pack()
self.camTLButt = tk.Button(master=frame1, text="Time Lapse", command=self.camTL)
self.camTLButt.pack()
self.camRecButt = tk.Button(master=frame1, text="Video", command=self.camRec)
self.camRecButt.pack()
# The Exit section
self.camResLabel = tk.Label(master=frame1, text=" Exit ")
self.camResLabel.pack(fill="x")
self.quit= tk.Button(master=frame1, text="QUIT", fg="blue", command=self.master.destroy)
self.quit.pack()
# In Frame 2, the camera's options
self.zoomVar = tk.DoubleVar(value=1.0)
self.camZoom = tk.Scale(master=frame2, label="Digi Zoom",
variable=self.zoomVar, from_=1,
to=10, resolution=1, orient="horizontal",
command=self.setZoom)
self.camZoom.set(1.0)
self.camZoom.pack()
self.wbLabel = tk.Label(master=frame2, text=" White-balance modes ")
self.wbLabel.pack(fill="x")
wb_options = list(PiCamera.AWB_MODES.keys())
self.wbVar = tk.StringVar()
self.wbVar.set("auto")
self.wbMenu = tk.OptionMenu(frame2, self.wbVar, *wb_options)
self.wbMenu.pack(fill="x")
self.expLabel = tk.Label(master=frame2, text=" Exposure modes ")
self.expLabel.pack(fill="x")
exp_options = list(PiCamera.EXPOSURE_MODES.keys())
self.expVar = tk.StringVar()
self.expVar.set("auto")
self.expMenu = tk.OptionMenu(frame2, self.expVar, *exp_options)
self.expMenu.pack(fill="x")
def camOn(self):
self.camera.start_preview(fullscreen=False, window=(0, 0, 640, 480))
return
def camOff(self):
self.camera.stop_preview()
return
def camSnap(self):
photoPath = self.basePath + '/snaps/'
#check to see if the snap output folder is present:
if not os.path.exists(photoPath):
#if not, create it:
os.makedirs(photoPath)
os.chown(photoPath, 1000, 1000)
# Camera warm-up time
time.sleep(1)
self.camera.capture(photoPath + 'snap_' +
time.strftime("%Y-%m-%d-%H-%M-%S") + '.jpg')
return
def camTL(self):
return
def camRec(self):
return
def setZoom(self, zoom):
zoomSide = 1 / float(zoom)
edge = (1 - zoomSide)*0.5
self.camera.zoom = (edge, edge, zoomSide, zoomSide)
return
root = tk.Tk()
root.title("AscCam 0.01")
root.resizable(width=False, height=False)
root.geometry("+15+400")
app = GUI(master=root)
app.mainloop()

Event Timeline