#!/usr/bin/env python #from gi.repository import Gtk #import pygtk #import gtk try: import pygtk pygtk.require("2.0") except: pass try: import gtk except: sys.exit(1) class reuse_init(object): def make_label(self, text): label = gtk.Label(text) label.set_use_underline(True) label.set_alignment(1.0, 0.5) label.show() return label def make_slider_and_spinner(self, init, min, max, step, page, digits): controls = {'adj':gtk.Adjustment(init, min, max, step, page), 'slider':gtk.HScale(), 'spinner':gtk.SpinButton()} controls['slider'].set_adjustment(controls['adj']) controls['slider'].set_draw_value(False) controls['spinner'].set_adjustment(controls['adj']) controls['spinner'].set_digits(digits) controls['slider'].show() controls['spinner'].show() return controls class ProgrammaGTK(reuse_init): def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("destroy", self.on_window_destroy) self.window.set_title("FFmpeg video resize calculator") self.window.set_position(gtk.WIN_POS_CENTER) self.window.set_border_width(30) self.window.set_default_size(500,-1) #---------------------------------- # -------- table --------------- self.table = gtk.Table(3, 3, True) self.table.set_homogeneous(False) self.table.set_row_spacings(8) self.table.set_col_spacings(8) #self.window.add(self.table) #------------------------------------ # ------------------------------------ self.box1 = gtk.ComboBox() self.liststore = gtk.ListStore(int,str) self.liststore.append([0,"W"]) self.liststore.append([1, "H"]) self.box1.set_model(self.liststore) self.cell = gtk.CellRendererText() self.box1.pack_start(self.cell, True) self.box1.add_attribute(self.cell, 'text', 1) self.box1.set_active(0) self.table.attach(self.box1, 0, 1, 0, 1) self.box1.connect("changed", self.on_button1_clicked) #------------------------------------ self.box2 = gtk.ComboBox() self.liststore2 = gtk.ListStore(int,str) self.liststore2.append([0,"16/9"]) self.liststore2.append([1, "4/3"]) self.box2.set_model(self.liststore2) self.cell = gtk.CellRendererText() self.box2.pack_start(self.cell, True) self.box2.add_attribute(self.cell, 'text', 1) self.box2.set_active(0) self.table.attach(self.box2, 0, 1, 1, 2) self.box2.connect("changed", self.on_button1_clicked) #-------------------------------- self.labelout = gtk.Label("") self.labelout.set_selectable(1) #self.table.attach(self.labelout, 0, 3, 2, 3) #----------------------------------------- self.size_spinner = self.make_slider_and_spinner(702, 200, 2000, 1, 10, 0) self.table.attach(self.size_spinner['slider'], 1, 2, 0, 1) self.table.attach(self.size_spinner['spinner'], 2, 3, 0, 1) self.size_spinner['slider'].set_size_request(150,-1) self.size_spinner['adj'].set_value(702.001) #mettere decimali se no non si vede self.size_spinner['adj'].connect("value-changed", self.on_button1_clicked) #------------------------------------------------------- self.check = gtk.CheckButton("lanczos") self.check.connect("toggled", self.on_button1_clicked) self.table.attach(self.check, 2, 3, 1, 2) #------------------------ #self.button1 = gtk.Button(label="Calcola") #self.button1.connect("clicked", self.on_button1_clicked) #self.table.attach(self.button1, 2, 3, 1, 2) #-- VBox ------------------------- self.vbox1 = gtk.VBox() self.vbox1.set_spacing(12) self.vbox1.pack_start(self.table) self.frame = gtk.Frame() self.frame.set_shadow_type(gtk.SHADOW_IN) self.frame.set_label(" FFmpeg filter string (select and copy): ") self.ali1 = gtk.Alignment(0.5, 0.5) self.ali1.set_padding(12 ,12, 12, 12) self.frame.add(self.ali1) self.ali1.add(self.labelout) self.vbox1.pack_start(self.frame) self.window.add (self.vbox1) #--------------------------------- self.window.show_all() self.calcola() def on_window_destroy(self, *args): gtk.main_quit(*args) def on_button1_clicked(self, button): self.calcola() def calcola(self): numero = self.size_spinner['adj'].get_value() if ( (int(numero) % 2) != 0): numero = int(numero) + 1 else: numero = int(numero) dar = self.box2.get_active() lato = self.box1.get_active() if (dar == 1): if (lato == 0): n2 = numero/4*3 else: n2 = numero/3*4 setdar = ",setdar=4/3,setsar=1/1" else: if (lato == 0): n2 = numero/16*9 else: n2 = numero/9*16 setdar = ",setdar=16/9,setsar=1/1" if ( (int(n2) % 2) != 0): n2 = int(n2) + 1 else: n2 = int(n2) stringa = "-vf scale=" if (lato == 0): stringa = stringa + str(numero) + ":" + str(n2) else: stringa = stringa + str(n2) + ":" + str(numero) lanc = self.check.get_active() if lanc: stringa = stringa + ":flags=lanczos" + setdar else: stringa = stringa + setdar self.labelout.set_text(stringa) def main(self): gtk.main() if __name__ == "__main__": hwg = ProgrammaGTK() gtk.main()