def set_fullscreen(self, widget): if self.fullscreened: self.mainWindow.unfullscreen() self.toolbar.show() self.seekBar.show() self.stream.show() self.fullscreened = False else: self.mainWindow.fullscreen() self.toolbar.hide() self.seekBar.hide() self.stream.hide() self.fullscreened = True
大樹のUbuntu備忘録
2010年12月31日金曜日
pyGTKでfullscreenするには
答えとしてはgtk_window_fullscreen()とgtk_window_unfullscreen()を使う。これだけで、ウィンドウがフルスクリーンになるので、あとはhide()でいらないコンテンツを隠すだけで良い。 フルスクリーン状態の判定はwindow_state_eventを使えとあるが、邪魔くさいのでself.fullscreenedというフラグを作って判定に使っている。果たしてこれでいいのかは不明。。。
GladeでDialogにRESPONSE_IDを設定する。
GladeでGUIを作り、その応答を得る場合はgtk_builder_connect_signalsなどを用いて関数に繋げる。しかし、Dialog程度に関数を発行していると大変なことになる。
そんなときはresponce_idをセットすればよい。Gladeでは右ペインの全般タブに応答IDの項目がそれに当たる。
後はgtk_windowをrun()すればresponce_idが返される。これでresponce_idにより、値を得るかどうかの分岐が簡単にできる。
そんなときはresponce_idをセットすればよい。Gladeでは右ペインの全般タブに応答IDの項目がそれに当たる。
後はgtk_windowをrun()すればresponce_idが返される。これでresponce_idにより、値を得るかどうかの分岐が簡単にできる。
self.wTree = gtk.Builder() self.wTree.connect("gtk_widget_hide", gtk_widget_hide) dialog = self.wTree.get_object("DialogName") response = dialog.run() if response == 0: print self.wTree.get_object("entry") elif response == 1: print "False" def gtk_widget_hide(widget): widget.hide()あと、Dialogとメインのウィンドウを同じgladefileに保存している場合、destroy()してしまうと、再び呼び出したときに崩れてしまうので、Dialogの×はdestroy()ではなく、hide()に関連付けておいたほうがいい。
2010年12月19日日曜日
pythonのSQLiteでUTF-8を使う
pythonのsqlite3は標準でTEXTがunicodeを要求するようです。何も考えずにUTF-8を投げたらエラーを食らいました。
sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.
SQLiteでUTF-8を用いたい場合はtext_factoryにstrを指定して解決しました。
sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.
SQLiteでUTF-8を用いたい場合はtext_factoryにstrを指定して解決しました。
import sqlite3 db = sqlite3.connect(":memory:") db.text_factory = str
Mouseover dictionaryのSQLiteファイルをpythonで作成した。
Mouseover dictionaryの辞書登録をPythonを用いて直接行ってみました。流れとしてはCSVファイル(PDIC)を読み込んでSQLiteのDBを作成し、Firefoxのフォルダに放り込んだだけです。rubyでやっておられる方がいたので真似してpythonの勉強がてらやってみました。
- PDICでCSV形式の辞書ファイルを作成
- エンコードをUTF-8に変換
- 下記のプログラムでSQLiteのDBを作成
- /.mozilla/firefox/default.*/に出来たmoseoverdictionary.sqliteを入れる。
#!/usr/bin/env python #-*- coding:utf-8 -*- import sqlite3 import csv def mkMouseOverDicSqlite(filename): db = sqlite3.connect("mouseoverdictionary.sqlite") # UTF-8で記述したいのでSQLiteの文字コードを指定 db.text_factory = str # テーブルを作成する try: db.execute('create table dict(key TEXT PRIMARY KEY, desc TEXT)') except:pass sql = "insert into dict values (?, ?)" # csvファイルをパースする。 reader = csv.reader(file(filename, "rb")) reader.next() # 先頭はラベルなので飛ばす for row in reader: # Windowsの改行コード\r\nを\に変換する try: row = map(lambda x: x.replace("\r\n", "\\ "), row) except IndexError:pass except:raise # sqliteDBにデータを入力 try: # 新規のデータを入力 if len(row[2]) != 0: db.execute(sql, (row[0], row[2]+"\\ "+row[1])) else: db.execute(sql, (row[0], row[1])) except sqlite3.IntegrityError: # kyeが存在するので上書きする if len(row[2]) !=0: db.execute("update dict set desc=? where key =?", (row[2]+"\\ "+row[1], row[0])) else: db.execute("update dict set desc=? where key =?", (row[1], row[0])) except IndexError:pass # 空のListが読み出された時の処理 except:raise db.commit() # データベースに保存する。 db.close() if __name__ == '__main__': myFiles = ["ryaku-116.csv", "reiji-116.csv", "waei-116.csv", "eiji-116.csv"] for filename in myFiles: print filename+"をデータベースに登録します。" mkMouseOverDicSqlite(filename)
登録:
投稿 (Atom)