主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PyGTKでテキスト置換ツール

                
tags:
HTMLやXMLをブログに載せるとき、&、>と<のそれぞれに置換をかける必要がある。GUI付きで両方同時に置換してくれるものを書いた。GUIのXMLはファイルから読み込む形でなく、Pythonスクリプト中に変数としてつっこんでおいた。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import re

##import pygtk
##pygtk.require('2.0')
import gtk


XML = """<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="window1">
<property name="width_request">500</property>
<property name="height_request">500</property>
<property name="resizable">False</property>
<child>
<object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="left_padding">12</property>
<child>
<object class="GtkTextView" id="textview1">
<property name="width_request">300</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes"><b>TEXT</b></property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkVButtonBox" id="vbuttonbox1">
<property name="width_request">50</property>
<property name="visible">True</property>
<child>
<object class="GtkButton" id="button1">
<property name="label" translatable="yes">button</property>
<property name="width_request">50</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="sub_text"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>"""

class SubText:
def __init__(self):
self.builder = gtk.Builder()
#sample.gladeファイルから画面を作成
self.builder.add_from_string(XML)
##self.builder.add_from_file(r'C:\Users\h\Desktop\un1.glade')
#sample.gladeで定義されているシグナルと連結
self.builder.connect_signals(self)
#windows1というオブジェクトを取得
self.window = self.builder.get_object("window1")
self.window.connect("destroy", lambda w: gtk.main_quit())
self.window.show()
#Glideで作ったオブジェクトをスクリプトとコネクト
self.textview = self.builder.get_object("textview1")
self.tbuffer=gtk.TextBuffer()
self.textview.set_buffer(self.tbuffer)

self.window.show_all()

def sub_text(self, widget):
text = self.tbuffer.get_text(
self.tbuffer.get_start_iter(),
self.tbuffer.get_end_iter())\
.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
self.tbuffer.set_text(text)
self.window.show_all()

def main():
gtk.main()
return 0

if __name__ == "__main__":
SubText()
main()
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。