#!/usr/bin/env python2 # coding: utf-8 powitanie = ''' Prosty edytor plików tekstowych Demonstracja użycia biblioteki GTK do tworzenia aplikacji GUI. Program zbudowano dla celów poglądowych. Nie jest on kompletny; użytkowanie grozi utratą danych. ''' import gtk w = gtk.Window(gtk.WINDOW_TOPLEVEL) zmienione = False def makieta(dane): dialog = gtk.MessageDialog(parent = w, flags = gtk.DIALOG_DESTROY_WITH_PARENT, type = gtk.MESSAGE_WARNING, buttons = gtk.BUTTONS_OK, message_format = 'Do zrobienia...') dialog.set_title('Info') dialog.run() dialog.destroy() def about(dane): dialog = gtk.MessageDialog(parent = w, flags = gtk.DIALOG_DESTROY_WITH_PARENT, type = gtk.MESSAGE_INFO, buttons = gtk.BUTTONS_OK, message_format = 'Szkielet aplikacji GUI\nutworzony przy użyciu biblioteki GTK') dialog.set_title('Info') dialog.run() dialog.destroy() sb = gtk.Statusbar() tb = gtk.TextBuffer() fn = None def nowyPlik(dane): global fn if zmienione: zapiszPlikJako(dane) fn = None tb.set_text('') sb.pop(0) sb.push(0, 'Nowy bufor') def otworzPlik(dane): global fn if zmienione: zapiszPlikJako(dane) dialog = gtk.FileChooserDialog(title='Otwórz plik',action=gtk.FILE_CHOOSER_ACTION_OPEN, buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)) dialog.set_default_response(gtk.RESPONSE_OK) odp = dialog.run() if odp == gtk.RESPONSE_OK: nazwa = dialog.get_filename() else: nazwa = None dialog.destroy() if nazwa: tb.set_text(open(nazwa).read()) sb.pop(0) sb.push(0, 'Wczytano '+ nazwa) fn = nazwa def zapiszPlik(dane): if fn: plik = open(fn, 'w') start, end = tb.get_bounds() plik.write(tb.get_text(start, end).encode('utf-8')) plik.close() sb.pop(0) sb.push(0, 'Zapisano '+ fn) else: zapiszPlikJako(None) def zapiszPlikJako(dane): global fn dialog = gtk.FileChooserDialog(title='Otwórz plik',action=gtk.FILE_CHOOSER_ACTION_SAVE, buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)) dialog.set_default_response(gtk.RESPONSE_OK) odp = dialog.run() if odp == gtk.RESPONSE_OK: nazwa = dialog.get_filename() else: nazwa = None dialog.destroy() if nazwa: fn = nazwa zapiszPlik(None) pass mb = gtk.MenuBar() mm = gtk.Menu() mi = gtk.MenuItem('Nowy') mi.connect('activate', nowyPlik) mm.append(mi) mi.show() mi = gtk.MenuItem('Otwórz') mi.connect('activate', otworzPlik) mm.append(mi) mi.show() mi = gtk.MenuItem('Zapisz') mi.connect('activate', zapiszPlik) mm.append(mi) mi.show() mi = gtk.MenuItem('Zapisz jako') mi.connect('activate', zapiszPlikJako) mm.append(mi) mi.show() mi = gtk.SeparatorMenuItem() mm.append(mi) mi.show() mi = gtk.MenuItem('Drukuj') mi.connect('activate', makieta) mm.append(mi) mi.show() mi = gtk.SeparatorMenuItem() mm.append(mi) mi.show() mi = gtk.MenuItem('Zakończ') mi.connect('activate', gtk.main_quit) mm.append(mi) mi.show() mt = gtk.MenuItem('Plik') mt.show() mt.set_submenu(mm) mb.add(mt) mm = gtk.Menu() mi = gtk.MenuItem('Znajdź') mi.connect('activate', makieta) mm.append(mi) mi.show() mt = gtk.MenuItem('Edycja') mt.show() mt.set_submenu(mm) mb.add(mt) mm = gtk.Menu() mi = gtk.MenuItem('O programie') mi.connect('activate', about) mm.append(mi) mi.show() mt = gtk.MenuItem('Pomoc') mt.show() mt.set_submenu(mm) mb.add(mt) mb.show() v = gtk.VBox(False,0) v.pack_start(mb, 0, 0, 2) sb = gtk.Statusbar() sb.push(0, 'Gotowe') sb.show() v.pack_end(sb,0,0,2) tv = gtk.TextView(tb) v.pack_start(tv, expand = True, fill = True, padding = 2) tv.show() tb.set_text(powitanie) v.show() w.set_title('aplikacja GTK') w.connect('destroy', gtk.main_quit) w.set_size_request(500, 300) w.add(v) w.show() gtk.main()