2011-02-09 27 views
0

我有一些難以管理與擱置模塊gtk.view對象的持久性。persistenc e gtk.view與擱置模塊

我使用python 2.6.5和PyGtk。

我的第一個測試 我實現過程與基本對象這樣

#!/usr/bin/env python 

- - 編碼方式:iso-8859-1 - -

'' '試驗德擱置 ''' import gtk import gobject import shelve import os class ShelveDemo(object): def i NIT(個體): self.variable1 = 'essai' self.variable2 = '1' self.variable3 = '15' self.variable4 = 15000

def affiche(self): 
    print self.variable1 
    print self.variable2 
    print self.variable3 
    print self.variable4 
def save(self,objet): 
    save_file = os.path.abspath("D:\sphinx" + os.sep + 'essai2.tvw') 
    db = shelve.open(save_file) 
    db['cle1']=objet 
    print 
    print "liste des clé enregistrée",db.keys 
    print 
    db.close() 
    print('sauvegarde ok') 

def load(self): 
    save_file = os.path.abspath("D:\sphinx" + os.sep + 'essai2.tvw') 

    xx = shelve.open(save_file) 
    print 
    print "liste des clé loading....",xx.keys 
    print 
    objet1 = xx['cle1'] 
    objet1.affiche() 
    xx.close() 

測試= ShelveDemo() 測試.affiche() test.save(test) test.load()

它運行正常。好!!!!!!!

TEST 2的TextView

#!/usr/bin/env python 

- - 編碼:ISO-8859-1 - -

'''文字模組/超文本 通常,標籤修改文本中的外觀查看,例如使其爲 粗體或彩色或下劃線。但標籤不限於外觀。 他們還可以影響鼠標和按鍵的行爲,這個演示 顯示「」」

pygtk的版本:MAIK柏林赫塔

進口GTK 進口攀高 進口的GObject 進口shelve_whc爲擱置 進口OS 從printv進口printv 類test_affiche: 高清初始化(個體經營,bufferr): self.window = gtk.Window() self.window.connect( '破壞',拉姆達*寬:gtk.main_quit( )) self.window.set_title(self。 ._ 名稱 _ + '克隆') self.window.set_default_size(450,450) self.window.set_border_width(0)

view = gtk.TextView() 
    view.set_buffer(bufferr) 
    view.set_wrap_mode(gtk.WRAP_WORD) #c'est utile car il y a en permanence une partie cachée pas top pour une aide 
    sw = gtk.ScrolledWindow() 
    sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) 
    self.window.add(sw) 
    sw.add(view) 
    self.window.show_all() 

類HypertextDemo(gtk.Window): hovering_over_link =假 hand_cursor = gtk.gdk.Cursor(gtk.gdk.HAND2) regular_cursor = gtk.gdk.Cursor(gtk.gdk.XTERM) DEF保存(個體,bufferr): SAVE_FILE = os.path.abspath則(「D:\ sphinx」+ os.sep +'essai.tvw') db =擱置。開放(SAVE_FILE,協議= 2)#協議= 2需要處理複雜的對象類型TextBuffer printv(緩衝液) 打印類型(緩衝液) 分貝[ '鍵'] = bufferr db.close() 打印('備份OK「)# 功能測試,以找出我 備份測試= test_affiche(bufferr) printv(bufferr)

def load(self): 
    save_file = os.path.abspath("D:\sphinx" + os.sep + 'essai.tvw') 
    db = shelve.open(save_file,protocol=2) # protocol=2 est nécessaire pour traiter objet complexe type TextBuffer 
    print 
    print "liste des clé enregistrée",db.keys() 
    print 
    conteneur = db['cle'] 
    print "type de l'objet en cours de chargement %s" %type(conteneur) 
    print "nom de l'objet en cours de chargement %s" %conteneur.__class__.__name__ 
    printv (conteneur) 
    # fonction de test pour savoir ce que je sauvegarde 
    essai3 = test_affiche(conteneur) 
    db.close() 

def __init__(self, parent=None): 
    gtk.Window.__init__(self) 
    try: 
     self.set_screen(parent.get_screen()) 
    except AttributeError: 
     self.connect('destroy', lambda *w: gtk.main_quit()) 
    self.set_title(self.__class__.__name__) 
    self.set_default_size(450, 450) 
    self.set_border_width(0) 
    view = gtk.TextView() 
    view.set_wrap_mode(gtk.WRAP_WORD) #c'est utile car il y a en permanence une partie cachée pas top pour une aide 
    view.connect("key-press-event", self.key_press_event) 
    view.connect("event-after", self.event_after) 
    view.connect("motion-notify-event", self.motion_notify_event) 
    view.connect("visibility-notify-event", self.visibility_notify_event) 
    buffer = view.get_buffer() 
    sw = gtk.ScrolledWindow() 
    sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) 
    self.add(sw) 
    sw.add(view) 
    self.show_page(buffer, 1) 
    self.show_all() 
    self.save(view.get_buffer()) 
    self.load() 
# Links can be activated by pressing Enter. 
def key_press_event(self, text_view, event): 
    if (event.keyval == gtk.gdk.Return or 
     event.keyval == gtk.gdk.KP_Enter): 
     buffer = text_view.get_buffer() 
     iter = buffer.get_iter_at_mark(buffer.get_insert()) 
     self.follow_if_link(text_view, iter) 
    return False 
# Links can also be activated by clicking. 
def event_after(self, text_view, event): 
    if event.type != gtk.gdk.BUTTON_RELEASE: 
     return False 
    if event.button != 1: 
     return False 
    buffer = text_view.get_buffer() 
    # we shouldn't follow a link if the user has selected something 
    try: 
     start, end = buffer.get_selection_bounds() 
    except ValueError: 
     # If there is nothing selected, None is return 
     pass 
    else: 
     if start.get_offset() != end.get_offset(): 
      return False 
    x, y = text_view.window_to_buffer_coords(gtk.TEXT_WINDOW_WIDGET, 
     int(event.x), int(event.y)) 
    iter = text_view.get_iter_at_location(x, y) 
    self.follow_if_link(text_view, iter) 
    return False 

# Looks at all tags covering the position (x, y) in the text view, 
# and if one of them is a link, change the cursor to the "hands" cursor 
# typically used by web browsers. 
def set_cursor_if_appropriate(self, text_view, x, y): 
    hovering = False 
    buffer = text_view.get_buffer() 
    iter = text_view.get_iter_at_location(x, y) 
    tags = iter.get_tags() 
    for tag in tags: 
     page = tag.get_data("page") 
     if page != 0: 
      hovering = True 
      break 
    if hovering != self.hovering_over_link: 
     self.hovering_over_link = hovering 
    if self.hovering_over_link: 
     text_view.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(self.hand_cursor) 
    else: 
     text_view.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(self.regular_cursor) 
# Update the cursor image if the pointer moved. 
def motion_notify_event(self, text_view, event): 
    x, y = text_view.window_to_buffer_coords(gtk.TEXT_WINDOW_WIDGET, 
     int(event.x), int(event.y)) 
    self.set_cursor_if_appropriate(text_view, x, y) 
    text_view.window.get_pointer() 
    return False 
# Also update the cursor image if the window becomes visible 
# (e.g. when a window covering it got iconified). 
def visibility_notify_event(self, text_view, event): 
    wx, wy, mod = text_view.window.get_pointer() 
    bx, by = text_view.window_to_buffer_coords(gtk.TEXT_WINDOW_WIDGET, wx, wy) 
    self.set_cursor_if_appropriate (text_view, bx, by) 
    return False 
def insert_link(self, buffer, iter, text, page): 
    ''' Inserts a piece of text into the buffer, giving it the usual 
     appearance of a hyperlink in a web browser: blue and underlined. 
     Additionally, attaches some data on the tag, to make it recognizable 
     as a link. 
    ''' 
    tag = buffer.create_tag(None, 
     foreground="blue", underline=pango.UNDERLINE_SINGLE) 
    tag.set_data("page", page) 
    buffer.insert_with_tags(iter, text, tag) 

def show_page(self, buffer, page): 
    ''' Fills the buffer with text and interspersed links. In any real 
     hypertext app, this method would parse a file to identify the links. 
    ''' 
    buffer.set_text("", 0) 
    iter = buffer.get_iter_at_offset(0) 
    if page == 1: 
     buffer.insert(iter, "Some text to show that simple ") 
     self.insert_link(buffer, iter, "hypertext", 3) 
     buffer.insert(iter, " can easily be realized with ") 
     self.insert_link(buffer, iter, "tags", 2) 
     buffer.insert(iter, ".") 
     buffer.insert(iter, "\n") 
     buffer.insert(iter, 'Inserts a piece of text into the buffer, giving it the usual' 
     'appearance of a hyperlink in a web browser: blue and underlined.' 
     'Additionally, attaches some data on the tag, to make it recognizable' 
     'as a link') 
     buffer.insert(iter, "\n") 
     buffer.insert(iter, 'Inserts a piece of text into the buffer, giving it the usual' 
     'appearance of a hyperlink in a web browser: blue and underlined.' 
     'Additionally, attaches some data on the tag, to make it recognizable' 
     'as a link') 
    elif page == 2: 
     buffer.insert(iter, 
      "A tag is an attribute that can be applied to some range of text. " 
      "For example, a tag might be called \"bold\" and make the text inside " 
      "the tag bold. However, the tag concept is more general than that " 
      "tags don't have to affect appearance. They can instead affect the " 
      "behavior of mouse and key presses, \"lock\" a range of text so the " 
      "user can't edit it, or countless other things.\n", -1) 
     self.insert_link(buffer, iter, "Go back", 1) 
    elif page == 3: 
     tag = buffer.create_tag(None, weight=pango.WEIGHT_BOLD) 
     buffer.insert_with_tags(iter, "hypertext:\n", tag) 
     buffer.insert(iter, 
      "machine-readable text that is not sequential but is organized " 
      "so that related items of information are connected.\n") 
     self.insert_link(buffer, iter, "Go back", 1) 

def follow_if_link(self, text_view, iter): 
    ''' Looks at all tags covering the position of iter in the text view, 
     and if one of them is a link, follow it by showing the page identified 
     by the data attached to it. 
    ''' 
    tags = iter.get_tags() 
    for tag in tags: 
     page = tag.get_data("page") 
     if page != 0: 
      self.show_page(text_view.get_buffer(), page) 
      break 

高清的main():

HypertextDemo() 
gtk.main() 
如果

名==「」:

main() 

關於測試2動作重裝也不行一樣,如果持續性的行爲不發生

我能有一些說明是我的錯謝謝 在您的幫助

回答

0

嗨抱歉它是爲其他人

代替你擱置進口shelve_whc一個小錯誤

通過進口貨架