#-------------------------------------------------------------------------------
# Name: sub2srt-python-GUI
# Purpose:
#
# Author: Bojan
#
# Created: 8:03 AM 7/7/2012
# Licence: bsd
# Version: 1.0b
#-------------------------------------------------------------------------------
#!/usr/bin/env python
import os
import subprocess
#suproces needed for open file, os for os.*
from tkinter import *
from tkinter import ttk
from tkinter import filedialog
#functions callable
def convert(*args):
try:
command_line = "python.exe sub2srt-python-command-line.py " + source_edit_variable.get() + " " + dest_edit_variable.get() + " " + fps_combobox_variable.get()
if os.system(command_line) == 0:
status['text'] = 'status = command completed succesfully'
else:
status['text'] = 'status = failed, sorry'
except ValueError:
pass
def find_sub_file():
subloc = filedialog.askopenfilename( initialdir=os.path.expanduser('~'),filetypes=[('MicroDVD subtitle','*.sub')] )
subloc = '"' + subloc +'"'
source_edit_variable.set(subloc)
dest_edit_variable.set(subloc.replace('.sub','.srt'))
#set width. although different ending srt/sub, length is the same
source_edit['width'] = len(subloc)
dest_edit['width'] = len(subloc)
def save_as_srt_file():
srtloc = filedialog.asksaveasfilename(initialdir=os.path.expanduser('~'),filetypes=[('Subrip subtitle','*.srt')] )
srtloc = '"' + srtloc +'"'
dest_edit_variable.set(srtloc)
dest_edit['width'] = len(srtloc)
def preview_movie():
previewloc = source_edit_variable.get()
previewloc = previewloc.replace('.sub','.avi')
#os.startfile(previewloc)
#start file win only
if sys.platform.startswith('darwin'):
subprocess.call(('open', previewloc))
elif os.name == 'nt':
os.startfile(previewloc)
elif os.name == 'posix':
subprocess.call(('xdg-open', previewloc))
#appwindow init
root = Tk()
root.title("Sub2srt-python-GUI")
#appwindow will expand
root.columnconfigure(0,weight=1)
root.rowconfigure(1,weight=1)
#frame init
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N,W,E,S))
#only middle frame.column will expand.
mainframe.columnconfigure(0, weight=0)
mainframe.columnconfigure(1, weight=1)
#mainframe.columnconfigure(1,minsize=330 )
mainframe.columnconfigure(2, weight=0)
mainframe.columnconfigure(3, weight=0)
mainframe.columnconfigure(4, weight=0)
#mainframe.rowconfigure(0, weight=1)
#for test
#mainframe["relief"]="sunken"
#elements init
ttk.Label(mainframe, text='Source (.sub file):').grid(column=0, row=1, sticky=W)
ttk.Label(mainframe, text='Destination (.srt file, auto name):').grid(column=0, row=2, sticky=W)
ttk.Label(mainframe, text='FPS:').grid(column=0, row=3, sticky=(W))
#we hold widget state in special variable, gui gets updated automatically. use get/set to read/write from it
source_edit_variable = StringVar()
#you can add width or height here:
source_edit = ttk.Entry(mainframe, textvariable=source_edit_variable)
#if we use myedit = ttk.entru(..).grid(), myedit[width]=.. will show error. so we use separately, like next line
source_edit.grid(column=1, row=1, sticky=EW )
dest_edit_variable = StringVar()
dest_edit = ttk.Entry(mainframe, textvariable=dest_edit_variable)
dest_edit.grid(column=1, row=2, sticky=EW )
fps_combobox_variable = StringVar()
#set init value
fps_combobox_variable.set('25')
#add combobox values, 25,23.976
fps_combobox = ttk.Combobox(mainframe, textvariable=fps_combobox_variable, values=(25,23.976))
fps_combobox.grid(column=1, row=3, sticky=EW )
ttk.Button(mainframe, text="Find .sub file ...", command=find_sub_file).grid(column=2, row=1, sticky=E)
ttk.Button(mainframe, text="Save as .srt file ...", command=save_as_srt_file).grid(column=2, row=2, sticky=E)
ttk.Button(mainframe, text="Preview movie (to see fps)", command=preview_movie).grid(column=2, row=3, sticky=E)
ttk.Button(mainframe, text="Convert!", command=convert, padding =(40,10)).grid(column=2, row=4, sticky=E)
status = Label(mainframe, text="status = OK")
status.grid(column=0, row=5,sticky=SW,columnspan=3 )
#status["relief"]="sunken"
#neat it up
for child in mainframe.winfo_children(): child.grid_configure(padx=4, pady=4)
root.mainloop()