#!/usr/bin/env python
# -*- coding: cp936 -*-
import gtk
import Image
import sys
import itertools
class PyApp(gtk.Window, gtk.HScrollbar, gtk.VScrollbar):
def __init__(self):
super(PyApp, self).__init__()
self._title = u'图像编辑软件'
self._vbox = gtk.VBox(False, 2)
self._menu = None
self._toolbar = None
self._hscale = None
self._image_control = gtk.Image()
self._image_file = ''
self._image = None
self._image_changed = None
self._file_name = ''
self._size_label = '(0:0)'
self._size_label_control = None
self.set_title(self._title)
self.set_size_request(1150, 750)
self.set_resizable(True)
self.set_border_width(8)
self.set_position(gtk.WIN_POS_CENTER)
try:
self.set_icon_from_file("program.bmp")
except Exception, e:
print e.message
sys.exit(1)
self.Menu()
self.Toolbar()
self.HScale()
sw = gtk.ScrolledWindow(None, None)
sw.set_shadow_type(gtk.SHADOW_ETCHED_OUT)
sw.set_border_width(1)
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
sw.set_size_request(250, 550)
sw.add_with_viewport(self._image_control)
sw.set_tooltip_text(u'显示图像区域')
table = gtk.Table(4, 11, False)
table.set_col_spacings(3)
title = gtk.Label(u'显示')
halign = gtk.Alignment(0, 0, 0, 0)
halign.add(title)
table.attach(halign, 0, 1, 0, 1, gtk.FILL, gtk.FILL, 0, 0)
table.attach(sw, 0, 3, 1, 2, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
self._size_label_control = gtk.Label(self._size_label)
self._size_label_control.set_tooltip_text(u'图像分辨率大小')
valign_size = gtk.Alignment(0, 0, 0, 0)
valign_size.add(self._size_label_control)
self._size_label_control.set_size_request(300,30)
table.attach(valign_size, 1, 2, 2, 3, gtk.FILL, gtk.FILL | gtk.EXPAND, 1, 1) #gtk.SHRINK
valign_preview = gtk.Alignment(0, 0, 0, 0)
previewb = gtk.Button(u'预览')
previewb.set_size_request(70, 30)
valign_preview.add(previewb)
previewb.connect("clicked", self.on_preview)
table.attach(valign_preview, 2, 3, 3, 4, gtk.FILL, gtk.SHRINK, 1, 1)
table.set_row_spacing(3, 6)
valign_hscale = gtk.Alignment(0, 0, 0, 0)
valign_hscale.add(self._hscale)
table.attach(valign_hscale, 1, 2, 3, 4, gtk.FILL, gtk.FILL, 0, 0)
self._vbox.pack_start(self._menu, False, False, 0)
self._vbox.pack_start(self._toolbar, False, False, 0)
self._vbox.pack_start(table, False, False, 0)
self.add(self._vbox)
self.connect("destroy", gtk.main_quit)
self.show_all()
def Menu(self):
self._menu = gtk.MenuBar()
filemenu = gtk.Menu()
filemenua = gtk.Menu()
filem = gtk.MenuItem(u'_文件')
filema = gtk.MenuItem(u'_帮助')
filem.set_submenu(filemenu)
filema.set_submenu(filemenua)
agr = gtk.AccelGroup()
self.add_accel_group(agr)
openm = gtk.ImageMenuItem(gtk.STOCK_OPEN, agr)
key, mod = gtk.accelerator_parse("<Control>O")
openm.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
openm.connect("activate", self.on_open)
filemenu.append(openm)
closem = gtk.ImageMenuItem(gtk.STOCK_CLOSE, agr)
key, mod = gtk.accelerator_parse("C")
closem.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
closem.connect("activate", self.on_close)
filemenu.append(closem)
sep = gtk.SeparatorMenuItem()
filemenu.append(sep)
savem = gtk.ImageMenuItem(gtk.STOCK_SAVE, agr)
key, mod = gtk.accelerator_parse("<Control>S")
savem.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
savem.connect("activate", self.on_save)
filemenu.append(savem)
saveasm = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS, agr)
key, mod = gtk.accelerator_parse("A")
saveasm.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
saveasm.connect("activate", self.on_saveas)
filemenu.append(saveasm)
sep = gtk.SeparatorMenuItem()
filemenu.append(sep)
exit = gtk.ImageMenuItem(gtk.STOCK_QUIT, agr)
key, mod = gtk.accelerator_parse("<Control>Q")
exit.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
exit.connect("activate", gtk.main_quit)
filemenu.append(exit)
aboutm = gtk.ImageMenuItem(gtk.STOCK_ABOUT, agr)
key, mod = gtk.accelerator_parse("B")
aboutm.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
aboutm.connect("activate", self.on_about)
filemenua.append(aboutm)
self._menu.append(filem)
self._menu.append(filema)
def Toolbar(self):
self._toolbar = gtk.Toolbar()
self._toolbar.set_style(gtk.TOOLBAR_ICONS)
opentb = gtk.ToolButton(gtk.STOCK_OPEN)
opentb.set_tooltip_text(u'打开')
closetb = gtk.ToolButton(gtk.STOCK_CLOSE)
closetb.set_tooltip_text(u'关闭')
savetb = gtk.ToolButton(gtk.STOCK_SAVE)
savetb.set_tooltip_text(u'保存')
saveastb = gtk.ToolButton(gtk.STOCK_SAVE_AS)
saveastb.set_tooltip_text(u'另存为')
sep = gtk.SeparatorToolItem()
quittb = gtk.ToolButton(gtk.STOCK_QUIT)
quittb.set_tooltip_text(u'退出')
self._toolbar.insert(opentb, 0)
self._toolbar.insert(closetb, 1)
self._toolbar.insert(sep, 2)
self._toolbar.insert(savetb, 3)
self._toolbar.insert(saveastb, 4)
self._toolbar.insert(sep, 5)
self._toolbar.insert(quittb, 6)
opentb.connect("clicked", self.on_open)
closetb.connect("clicked", self.on_close)
savetb.connect("clicked", self.on_save)
saveastb.connect("clicked", self.on_saveas)
quittb.connect("clicked", gtk.main_quit)
def HScale(self):
self._hscale = gtk.HScale()
self._hscale.set_range(1, 30)
self._hscale.set_increments(1, 2)
self._hscale.set_digits(0)
self._hscale.set_size_request(300, 30)
self._hscale.set_tooltip_text(u'图像缩放比例')
self._hscale.connect("value-changed", self.on_changed)
def on_changed(self, widget):
size = widget.get_value()
size = 1 / size
self._image_changed = self._image
w,h = self._image_changed.size
w,h = int(w*size),int(h*size)
print(w, h)
self._image_changed = self._image_changed.resize((w,h))
self._image_changed.save(r'C:\WINDOWS\Temp\t.jpg')
file_temp = gtk.gdk.pixbuf_new_from_file(r'C:\WINDOWS\Temp\t.jpg')
self._image_control.set_from_pixbuf(file_temp)
self._size_label = str(self._image_changed.size).replace(',', ':')
self._size_label_control.set_label(self._size_label)
def on_open(self, widget):
filter_name1 = [u'位图文件(*.bmp)', u'JPEG(*.JPG;*.JPEG;*.JPE;*.JFIF)', u'GIF(*.GIF)', u'TIFF(*.TIF;*.TIFF)'
, u'PNG(*.PNG)', u'ICO(*.ICO)', u'所有文件']
filter_name2 = [[u'*.bmp'], [u'*.JPG', u'*.JPEG', u'*.JPE', u'*.JFIF'], [u'*.GIF'], [u'*.TIF', u'*.TIFF'], [u'*.PNG'], [u'*.ICO'], [u'*']]
dialog = gtk.FileChooserDialog(u'打开', None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
for name1, name2 in itertools.izip(filter_name1, filter_name2):
filter = gtk.FileFilter()
filter.set_name(name1)
for name3 in name2:
filter.add_pattern(name3)
dialog.add_filter(filter)
res = dialog.run()
if res == gtk.RESPONSE_OK:
file_name = dialog.get_filename()
self._file_name = file_name
#print(file_name)
dialog.destroy()
self._image = Image.open(file_name)
self._image_changed = self._image
self._size_label = str(self._image.size).replace(',', ':')
self._size_label_control.set_label(self._size_label)
file_temp = gtk.gdk.pixbuf_new_from_file(file_name)
self._image_control.set_from_pixbuf(file_temp)
def on_close(self, widget):
self._image = None
self._image_changed = None
self._image_control.set_from_pixbuf(None)
def on_save(self, widget):
self._image_changed.save(self._file_name)
def on_saveas(self, widget):
dialog = gtk.FileChooserDialog(u'另存为', None, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK))
res = dialog.run()
if res == gtk.RESPONSE_OK:
file_name = dialog.get_filename()
if(-1 == file_name.rfind('.')):
file_name += self._file_name[self._file_name.rfind('.'):]
print(file_name)
self._image_changed.save(file_name)
dialog.destroy()
def on_preview(self, widget):
self._image_changed.show()
def on_about(self, widget):
about = gtk.AboutDialog()
about.set_program_name(u'图像编辑软件')
about.set_version("1.0.1")
about.set_copyright(u'(C) 科技有限公司')
about.set_comments(u'编辑图像分辨率使其调整所需大小、实时显示、预览')
#about.set_website("http://www.sggg.com")
about.set_position(gtk.WIN_POS_CENTER)
about.set_logo(gtk.gdk.pixbuf_new_from_file("about.bmp"))
about.run()
about.destroy()
def main(self):
gtk.main()
pyApp = PyApp()
pyApp.main()
# -*- coding: cp936 -*-
import gtk
import Image
import sys
import itertools
class PyApp(gtk.Window, gtk.HScrollbar, gtk.VScrollbar):
def __init__(self):
super(PyApp, self).__init__()
self._title = u'图像编辑软件'
self._vbox = gtk.VBox(False, 2)
self._menu = None
self._toolbar = None
self._hscale = None
self._image_control = gtk.Image()
self._image_file = ''
self._image = None
self._image_changed = None
self._file_name = ''
self._size_label = '(0:0)'
self._size_label_control = None
self.set_title(self._title)
self.set_size_request(1150, 750)
self.set_resizable(True)
self.set_border_width(8)
self.set_position(gtk.WIN_POS_CENTER)
try:
self.set_icon_from_file("program.bmp")
except Exception, e:
print e.message
sys.exit(1)
self.Menu()
self.Toolbar()
self.HScale()
sw = gtk.ScrolledWindow(None, None)
sw.set_shadow_type(gtk.SHADOW_ETCHED_OUT)
sw.set_border_width(1)
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
sw.set_size_request(250, 550)
sw.add_with_viewport(self._image_control)
sw.set_tooltip_text(u'显示图像区域')
table = gtk.Table(4, 11, False)
table.set_col_spacings(3)
title = gtk.Label(u'显示')
halign = gtk.Alignment(0, 0, 0, 0)
halign.add(title)
table.attach(halign, 0, 1, 0, 1, gtk.FILL, gtk.FILL, 0, 0)
table.attach(sw, 0, 3, 1, 2, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
self._size_label_control = gtk.Label(self._size_label)
self._size_label_control.set_tooltip_text(u'图像分辨率大小')
valign_size = gtk.Alignment(0, 0, 0, 0)
valign_size.add(self._size_label_control)
self._size_label_control.set_size_request(300,30)
table.attach(valign_size, 1, 2, 2, 3, gtk.FILL, gtk.FILL | gtk.EXPAND, 1, 1) #gtk.SHRINK
valign_preview = gtk.Alignment(0, 0, 0, 0)
previewb = gtk.Button(u'预览')
previewb.set_size_request(70, 30)
valign_preview.add(previewb)
previewb.connect("clicked", self.on_preview)
table.attach(valign_preview, 2, 3, 3, 4, gtk.FILL, gtk.SHRINK, 1, 1)
table.set_row_spacing(3, 6)
valign_hscale = gtk.Alignment(0, 0, 0, 0)
valign_hscale.add(self._hscale)
table.attach(valign_hscale, 1, 2, 3, 4, gtk.FILL, gtk.FILL, 0, 0)
self._vbox.pack_start(self._menu, False, False, 0)
self._vbox.pack_start(self._toolbar, False, False, 0)
self._vbox.pack_start(table, False, False, 0)
self.add(self._vbox)
self.connect("destroy", gtk.main_quit)
self.show_all()
def Menu(self):
self._menu = gtk.MenuBar()
filemenu = gtk.Menu()
filemenua = gtk.Menu()
filem = gtk.MenuItem(u'_文件')
filema = gtk.MenuItem(u'_帮助')
filem.set_submenu(filemenu)
filema.set_submenu(filemenua)
agr = gtk.AccelGroup()
self.add_accel_group(agr)
openm = gtk.ImageMenuItem(gtk.STOCK_OPEN, agr)
key, mod = gtk.accelerator_parse("<Control>O")
openm.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
openm.connect("activate", self.on_open)
filemenu.append(openm)
closem = gtk.ImageMenuItem(gtk.STOCK_CLOSE, agr)
key, mod = gtk.accelerator_parse("C")
closem.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
closem.connect("activate", self.on_close)
filemenu.append(closem)
sep = gtk.SeparatorMenuItem()
filemenu.append(sep)
savem = gtk.ImageMenuItem(gtk.STOCK_SAVE, agr)
key, mod = gtk.accelerator_parse("<Control>S")
savem.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
savem.connect("activate", self.on_save)
filemenu.append(savem)
saveasm = gtk.ImageMenuItem(gtk.STOCK_SAVE_AS, agr)
key, mod = gtk.accelerator_parse("A")
saveasm.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
saveasm.connect("activate", self.on_saveas)
filemenu.append(saveasm)
sep = gtk.SeparatorMenuItem()
filemenu.append(sep)
exit = gtk.ImageMenuItem(gtk.STOCK_QUIT, agr)
key, mod = gtk.accelerator_parse("<Control>Q")
exit.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
exit.connect("activate", gtk.main_quit)
filemenu.append(exit)
aboutm = gtk.ImageMenuItem(gtk.STOCK_ABOUT, agr)
key, mod = gtk.accelerator_parse("B")
aboutm.add_accelerator("activate", agr, key, mod, gtk.ACCEL_VISIBLE)
aboutm.connect("activate", self.on_about)
filemenua.append(aboutm)
self._menu.append(filem)
self._menu.append(filema)
def Toolbar(self):
self._toolbar = gtk.Toolbar()
self._toolbar.set_style(gtk.TOOLBAR_ICONS)
opentb = gtk.ToolButton(gtk.STOCK_OPEN)
opentb.set_tooltip_text(u'打开')
closetb = gtk.ToolButton(gtk.STOCK_CLOSE)
closetb.set_tooltip_text(u'关闭')
savetb = gtk.ToolButton(gtk.STOCK_SAVE)
savetb.set_tooltip_text(u'保存')
saveastb = gtk.ToolButton(gtk.STOCK_SAVE_AS)
saveastb.set_tooltip_text(u'另存为')
sep = gtk.SeparatorToolItem()
quittb = gtk.ToolButton(gtk.STOCK_QUIT)
quittb.set_tooltip_text(u'退出')
self._toolbar.insert(opentb, 0)
self._toolbar.insert(closetb, 1)
self._toolbar.insert(sep, 2)
self._toolbar.insert(savetb, 3)
self._toolbar.insert(saveastb, 4)
self._toolbar.insert(sep, 5)
self._toolbar.insert(quittb, 6)
opentb.connect("clicked", self.on_open)
closetb.connect("clicked", self.on_close)
savetb.connect("clicked", self.on_save)
saveastb.connect("clicked", self.on_saveas)
quittb.connect("clicked", gtk.main_quit)
def HScale(self):
self._hscale = gtk.HScale()
self._hscale.set_range(1, 30)
self._hscale.set_increments(1, 2)
self._hscale.set_digits(0)
self._hscale.set_size_request(300, 30)
self._hscale.set_tooltip_text(u'图像缩放比例')
self._hscale.connect("value-changed", self.on_changed)
def on_changed(self, widget):
size = widget.get_value()
size = 1 / size
self._image_changed = self._image
w,h = self._image_changed.size
w,h = int(w*size),int(h*size)
print(w, h)
self._image_changed = self._image_changed.resize((w,h))
self._image_changed.save(r'C:\WINDOWS\Temp\t.jpg')
file_temp = gtk.gdk.pixbuf_new_from_file(r'C:\WINDOWS\Temp\t.jpg')
self._image_control.set_from_pixbuf(file_temp)
self._size_label = str(self._image_changed.size).replace(',', ':')
self._size_label_control.set_label(self._size_label)
def on_open(self, widget):
filter_name1 = [u'位图文件(*.bmp)', u'JPEG(*.JPG;*.JPEG;*.JPE;*.JFIF)', u'GIF(*.GIF)', u'TIFF(*.TIF;*.TIFF)'
, u'PNG(*.PNG)', u'ICO(*.ICO)', u'所有文件']
filter_name2 = [[u'*.bmp'], [u'*.JPG', u'*.JPEG', u'*.JPE', u'*.JFIF'], [u'*.GIF'], [u'*.TIF', u'*.TIFF'], [u'*.PNG'], [u'*.ICO'], [u'*']]
dialog = gtk.FileChooserDialog(u'打开', None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
for name1, name2 in itertools.izip(filter_name1, filter_name2):
filter = gtk.FileFilter()
filter.set_name(name1)
for name3 in name2:
filter.add_pattern(name3)
dialog.add_filter(filter)
res = dialog.run()
if res == gtk.RESPONSE_OK:
file_name = dialog.get_filename()
self._file_name = file_name
#print(file_name)
dialog.destroy()
self._image = Image.open(file_name)
self._image_changed = self._image
self._size_label = str(self._image.size).replace(',', ':')
self._size_label_control.set_label(self._size_label)
file_temp = gtk.gdk.pixbuf_new_from_file(file_name)
self._image_control.set_from_pixbuf(file_temp)
def on_close(self, widget):
self._image = None
self._image_changed = None
self._image_control.set_from_pixbuf(None)
def on_save(self, widget):
self._image_changed.save(self._file_name)
def on_saveas(self, widget):
dialog = gtk.FileChooserDialog(u'另存为', None, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK))
res = dialog.run()
if res == gtk.RESPONSE_OK:
file_name = dialog.get_filename()
if(-1 == file_name.rfind('.')):
file_name += self._file_name[self._file_name.rfind('.'):]
print(file_name)
self._image_changed.save(file_name)
dialog.destroy()
def on_preview(self, widget):
self._image_changed.show()
def on_about(self, widget):
about = gtk.AboutDialog()
about.set_program_name(u'图像编辑软件')
about.set_version("1.0.1")
about.set_copyright(u'(C) 科技有限公司')
about.set_comments(u'编辑图像分辨率使其调整所需大小、实时显示、预览')
#about.set_website("http://www.sggg.com")
about.set_position(gtk.WIN_POS_CENTER)
about.set_logo(gtk.gdk.pixbuf_new_from_file("about.bmp"))
about.run()
about.destroy()
def main(self):
gtk.main()
pyApp = PyApp()
pyApp.main()