PyKanjiCard-开源

  • W8_948969
    了解作者
  • 2MB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-14 22:05
    上传日期
PyKanjiCard是一种闪存卡程序,可帮助学习平假名,片假名和汉字中的日语书面单词。 您可以选择仅由已知字符组成的单词。 它是使用Pygtk用Python编写的。
pykanjicard-1.3.zip
  • pykanjicard-1.3
  • pykanjicard.py
    13.8KB
  • pykanjiedit.py
    16.1KB
  • PKG-INFO
    297B
  • edict.py
    2.5KB
  • README
    3KB
  • pykanjicard.dict
    5.2MB
  • setup.py
    480B
内容介绍
#!/usr/bin/env python import gtk import gobject import pango import os.path import sys ############################################################################### # @brief TextBuffer with undo ############################################################################### class TextBuffer (gtk.TextBuffer): def __init__(self, text=None): gtk.TextBuffer.__init__ (self, text) gobject.signal_new ("undo-modified", gtk.TextBuffer, gobject.SIGNAL_RUN_LAST, gobject.TYPE_BOOLEAN, (gobject.TYPE_BOOLEAN,)) gobject.signal_new ("redo-modified", gtk.TextBuffer, gobject.SIGNAL_RUN_LAST, gobject.TYPE_BOOLEAN, (gobject.TYPE_BOOLEAN,)) self.__actionlist = [] self.__actionidx = 0 self.__running = False self.connect ("delete-range", self.__on_delete) self.connect ("insert-text", self.__on_insert) ############################################################################# # @brief Set text ############################################################################# def set_text (self, text): self.__running = True gtk.TextBuffer.set_text (self, text) self.__actionlist = [] self.__actionidx = 0 self.__running = False ############################################################################# # @brief Undo last action ############################################################################# def undo (self): self.__running = True cmd, pos, text, length = self.__pop_undo_action () if cmd: iter = self.get_iter_at_offset (pos) if cmd == 'INSERT': end = self.get_iter_at_offset (pos + length) self.delete (iter, end) elif cmd == 'DELETE': self.insert (iter, text) self.__running = False ############################################################################# # @brief Redo last action ############################################################################# def redo (self): self.__running = True cmd, pos, text, length = self.__pop_redo_action () if cmd: iter = self.get_iter_at_offset (pos) if cmd == 'INSERT': self.insert (iter, text) elif cmd == 'DELETE': end = buffer.get_iter_at_offset (pos + length) self.delete (iter, end) self.__running = False ############################################################################# # @brief Register an action for undo ############################################################################# def __push_action (self, action, pos, text, length): if self.__actionidx < len (self.__actionlist): self.__actionlist[self.__actionidx] = (action, pos, text, length) else: self.__actionlist.append ((action, pos, text, length)) if self.__actionidx == 0: self.emit ('undo-modified', True) self.__actionidx += 1 ############################################################################# # @brief Get last action for undo ############################################################################# def __pop_undo_action (self): if self.__actionidx > 0: self.__actionidx -= 1 ret = self.__actionlist[self.__actionidx] if self.__actionidx == 0: self.emit ('undo-modified', False) else: ret = (None, None, None, None) return ret ############################################################################# # @brief Get last action for redo ############################################################################# def __pop_redo_action (self): if self.__actionidx < len (self.__actionlist): ret = self.__actionlist[self.__actionidx] if self.__actionidx == 0: self.emit ('undo-modified', True) self.__actionidx += 1 else: ret = (None, None, None, None) return ret ############################################################################# # @brief Event: delete ############################################################################# def __on_delete (self, widget, start, end, data=None): if not self.__running: text = self.get_text (start, end) length = len (unicode (text, 'utf-8')) self.__push_action ('DELETE', start.get_offset (), text, length) ############################################################################# # @brief Event: insert ############################################################################# def __on_insert (self, widget, iter, text, length, data=None): if not self.__running: length = len (unicode (text, 'utf-8')) self.__push_action ('INSERT', iter.get_offset (), text, length) ############################################################################### # @brief Editor window ############################################################################### class MainWindow: ############################################################################# # @brief Fill buffer from a file ############################################################################# def open_file (self, filename): buffer = self.text.get_buffer () fp = open (filename, "r") buffer.set_text (fp.read ().decode ("euc_jp").encode ("utf-8")) fp.close () buffer.set_modified (False) self.save_button.set_sensitive (False) self.save_menuitem.set_sensitive (False) self.filename = filename ############################################################################# # @brief Save current buffer to a file ############################################################################# def save_file (self): buffer = self.text.get_buffer() fp = open (self.filename, "w") start, end = buffer.get_bounds () fp.write (buffer.get_text(start, end).decode("utf-8").encode("euc_jp")) fp.close () buffer.set_modified (False) self.save_button.set_sensitive (False) self.save_menuitem.set_sensitive (False) ############################################################################# # @brief save file ############################################################################# def on_save (self, widget, data=None): self.save_file () ############################################################################# # @brief quit ############################################################################# def on_quit (self, widget, data=None): buffer = self.text.get_buffer () if buffer.get_modified(): dialog = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, "Save changes to 'pykanjicard.dict'?") dialog.add_button (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) rc = dialog.run () dialog.destroy () if rc == gtk.RESPONSE_YES: self.save_file () elif rc == gtk.RESPONSE_NO: pass else: return False gtk.main_quit () ############################################################################# # @brief Executed for the first time text went modified ############################################################################# def on_text_modified (self, buffer, data=None): self.save_button.set_sensitive (True) self.save_menuitem.set_sensitive (True) ############################################################################# # @brief Executed when undo status is modified ############################################################################# def on_undo_modified (self, widget, flag, data=None): self.undo_button.set_sensitive (flag) self.undo_menuitem.set_sensitive (flag) ############################################################################# # @brief Undo last change ############################################################################# def on_undo (self, wi
评论
    相关推荐
    • Python
      Python Boto3代码
    • Python
      python程序
    • Python
      Python
    • python
      Python,就在这里。
    • Python
      Python-
    • Python
      完整的python 其中包含用于学习python的代码,注释和微型项目。
    • Python
      项目Python
    • Python
      Pythonpython3中使用乌龟库的简单pong游戏 贡献 拉请求是欢迎的! :) 执照
    • Python
      Python Dit是Mijn储存库van Python
    • python
      Python 基本的python编程