- #!/usr/bin/python
- import pygtk
- pygtk.require('2.0')
- import gtk
- class golden_crop_gtk:
- def delete_event(self, widget, event, data=None):
- """ Before quitting, print a message."""
- print "Goodbye!"
- gtk.main_quit()
- def update_entry(self, box):
- """ Update the text field with the selected file. """
- box.set_text(self.selected_file)
- def select_file(self, widget, textbox):
- """This launches the file selection dialog."""
- dialog = gtk.FileChooserDialog("Open..",
- None, gtk.FILE_CHOOSER_ACTION_OPEN,
- (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
- gtk.STOCK_OPEN, gtk.RESPONSE_OK))
- dialog.set_default_response(gtk.RESPONSE_OK)
- #filter = gtk.FileFilter()
- #filter.set_name("All files")
- #filter.add_pattern("*")
- #dialog.add_filter(filter)
- # Set up the filter
- filter = gtk.FileFilter()
- filter.set_name("Images")
- filter.add_mime_type("image/png")
- filter.add_mime_type("image/jpeg")
- filter.add_mime_type("image/gif")
- filter.add_pattern("*.png")
- filter.add_pattern("*.jpg")
- filter.add_pattern("*.gif")
- filter.add_pattern("*.tif")
- filter.add_pattern("*.xpm")
- dialog.add_filter(filter)
- response = dialog.run()
- # If a file was selected, update the text entry box, otherwise do
- # nothing.
- if response == gtk.RESPONSE_OK:
- print dialog.get_filename(), 'selected'
- self.selected_file = dialog.get_filename()
- self.update_entry(textbox)
- elif response == gtk.RESPONSE_CANCEL:
- print 'Closed, no files selected'
- self.selected_file = ""
- dialog.destroy()
- def crop_file(self, widget, data=None):
- pass
- def __init__(self):
- """Constructor for the main class."""
- self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
- # The container boxes.
- mainbox = gtk.VBox(False, 10)
- inputbox = gtk.HBox(False, 10)
- outputbox = gtk.HBox(False, 10)
- submitbox = gtk.HBox(False, 10)
- # When there is a "delete event" emitted, execute the delete_event
- # function.
- self.window.connect("delete_event", self.delete_event)
- # Border width (padding)
- self.window.set_border_width(10)
- # Add the text input box for infile
- self.inentry = gtk.Entry()
- inputbox.pack_start(gtk.Label("File to crop:"), False, 5, 5)
- inputbox.pack_end(self.inentry)
- # Add the "open file" button
- self.file_select_button = gtk.Button("Select file")
- self.file_select_button.connect("clicked", self.select_file,
- self.inentry)
- inputbox.pack_start(gtk.Label(""), False, 5, 5)
- inputbox.pack_end(self.file_select_button)
- #Add the text input box for outfile
- self.outentry = gtk.Entry()
- outputbox.pack_start(gtk.Label("File to save to:"), False, 5, 5)
- outputbox.pack_end(self.outentry)
- # Add another "open file" button
- self.execute_button = gtk.Button("Select file")
- self.execute_button.connect("clicked", self.select_file, self.outentry)
- outputbox.pack_start(gtk.Label(""), False, 5, 5)
- outputbox.pack_end(self.execute_button)
- # Add an "execute" button
- self.execute_button = gtk.Button("Crop")
- self.execute_button.connect("clicked", self.crop_file)
- submitbox.pack_start(gtk.Label(""), False, 5, 5)
- submitbox.pack_end(self.execute_button)
- # Add all hboxes to the vbox
- mainbox.pack_start(gtk.Label(""), False, 5, 5)
- mainbox.pack_end(submitbox)
- mainbox.pack_start(gtk.Label(""), False, 5, 5)
- mainbox.pack_end(outputbox)
- mainbox.pack_start(gtk.Label(""), False, 5, 5)
- mainbox.pack_end(inputbox)
- # Add everything to the window and show
- self.window.add(mainbox)
- inputbox.show()
- self.window.show_all()
- def main(self):
- """ Sends GTK into the main loop."""
- gtk.main()
- crop = golden_crop_gtk()
- crop.main()