1287531 ランダム
 ホーム | 日記 | プロフィール 【ログイン】

傀儡師の館.Python

PR

日記/記事の投稿

カレンダー

キーワードサーチ

▼キーワード検索

カテゴリ

バックナンバー

フリーページ

楽天プロフィール


kugutsushiさん

怠惰な人

フォローする

サイド自由欄

設定されていません。

 

全1776件 (1776件中 1-10件目)

1 2 3 4 5 6 >

2015年03月25日
楽天プロフィール XML
カテゴリ:Raspberry Pi
Raspberry Pi 用 PoE基板があればイーサネットケーブルから電源供給できるから電源を気にしなくて済むようになる。あちこちしかけるのにちょうどいい。とはいえ、Raspberry Pi 本体と合わせて 1万円ぐらいになっちゃうけど。

無線LANの AP をつくるかな。これにセンサーをつけたり、カメラをつけて防犯カメラとかにするとか、いろいろできそう。そういえば、まだカメラをつけてあれこれしてなかった。





楽天SocialNewsに投稿!

最終更新日  2015年03月26日 02時30分27秒
コメント(0) | コメントを書く

2015年03月23日
カテゴリ:Python
処理したいファイルを GUI で選んで、何かするというのは、よく使うと思うので書いておく。

ファイルを選択するには、

GetFile(directory='', filename='', multiple=False, wildcard='All Files (*.*)|*.*', title="Select file(s)")

multiple=False だと、1つのファイルだけ選択でき、multiple=True だと複数ファイルを選択でき、リストが返される。

ディレクトリを選択したいときは、

GetDir(path="", title='Select a directory')

保存したいときは、

SetFile(directory='', filename='', overwrite=False, wildcard='All Files (*.*)|*.*', title="保存する"):

例えば、こうやって、ファイルを選択する。1つの場合と、複数の場合を試す。加えて、*.py だけ対象にするとかフィルタをかけられるのでやってみる。

# -*- coding: utf-8 -*-

import quickgui as q

filename = q.getfile(directory='/etc', multiple=False, wildcard='All Files (*.*)|*.*', title="ファイルを選択してください")
print(filename)
filename = q.getfile(directory='.', multiple=True, wildcard='Python sources (*.py)|*.py', title="ファイルを選択してください")
print(filename)

/etc を指定して、開いたところ。

カレントディレクトリを指定して開いたところ。


/etc/ntp.conf
[u'/home/kafka/work/quickgui/sample103.py']







楽天SocialNewsに投稿!

最終更新日  2015年03月23日 06時07分52秒
コメント(0) | コメントを書く

カテゴリ:Python
これまで quickgui を拡張してみたが、基本もついでなので書いておく。これまでに書いたものは、最近書いた quickgui のまとめと wxpython 入門など 参照。

quickgui で、標準出力をウィンドウ表示にしてみる。

# -*- coding: utf-8 -*-

import quickgui as q
import time

xprinter = q.XPrinter()
xprinter.on()

print "xprinter.on()"
print " 標準出力が gui 上に出力される。"
print "xprinter.off()"
print " 標準出力がターミナルに出力される"
xprinter.off()
print "これは、ターミナルに出力される。"
xprinter.on()
print "xprinter.on()で再び、ウィンドウ上に表示される。"

# 10秒後にウィンドウを閉じる
time.sleep(10)

なんだかカクカクとした感じで出力されるので、これも改造したくなっている。。。。







楽天SocialNewsに投稿!

最終更新日  2015年03月23日 05時52分41秒
コメント(0) | コメントを書く

2015年03月15日
カテゴリ:どうでもいいこと
最近のアクセス数はこんな感じ。




quickgui について書いた効果なのかな。今はアクセス解析がついてないので、どこからどういうアクセスがあるのか分からないが、それなりに関心を集めたってことだと思うので、もう少し書いてみようかと思う今日この頃。

全然関係ないけど、米軍から動画流出 山城議長逮捕時の基地内映像 の動画が、Youtube にあるけど、挑発しまくり。逮捕してもらいたくてたまらないという感じ。だいたい逮捕されても、仕事に支障ないように老人集めてるし。


なんだかなぁ。

米軍拘束事件 抗議活動への不当介入 日本共産党

とか見たあと、こういう事実を目の当たりにすると、なんなんだろうと思う。事実を知った上で、こういう質問してるんだろうから。煽って、逮捕させて、国会質問って、自作自演の範疇。目的のためなら手段を選ばず。法は、自らのためのみ存在するって感じ。

大阪市、政務調査費領収書公開で、共産党へのカネの流れが明らかにw なんだかなぁ。

だって、党が関わっていない取引(たとえばパソコン購入)とかは別として、資料購入は赤旗、民主商工新聞、生健新聞とか党関係の発行物ばかり。印刷は当然関西共同とかどう見ても相見積もりをとっていると思えないところばっかしとか、党事務所に議員事務所をおいているところは党に家賃を払っているとか、政務調査費を党に入れようと一生懸命に見える、いろいろ楽しい支出が明らかになります。

ちなみに、この記事の掲載されている 日本共産党・民青同盟悪魔の辞典+ キンピー問題笑える査問録音公開中 はおもしろい。

話題はさらに変わって、これもなんだかなぁ。



田母神閣下界隈の赤坂のコリアンクラブが大好きで当然な人々のお里 とか、田母神俊雄ことコリアンクラブ田母神の正体 の記事がある、匿名党 とかも見ておく。

岡田克也氏、メルケル首相の慰安婦発言「日本政府に、とは言ってない」 も分けわからない。メルケル「和解」発言 独政府報道官も「正しくない」

「Appleのエンジニア」、新しいMacBookについて(真相を?!)語る なんだかこういうのを見ている感じ。




嘘字幕の古いの調べたら、総統ものでは 2009/09/16 のがあった。


もっと古いものでは、キーボードクラッシャーの空耳和訳 2007/11/01 が見つかった。

空耳といえば、本家。


嘘も繰り返すと、そう聞こえてくる。オソロシヤ。







楽天SocialNewsに投稿!

最終更新日  2015年03月16日 04時06分49秒
コメント(0) | コメントを書く

2015年03月08日
カテゴリ:Python
最近書いた記事をちょっと振り返ってみる。

最近書いた quickgui 関連の記事



以前書いた wxpython 関連の記事


かなり前 (2010年に書いた記事) に wxPython 入門を書いたので、まとめておく。

当サイトでよく読まれている記事


ちなみに、当サイトで今よく読まれているページは、次のものらしい。RaspberryPi 関連の記事が上位にあるようだ。

  1. Raspberry Pi にシャットダウンボタンをつける
    閲覧数 1225 | 2014年12月22日

  2. Raspberry Pi に赤外線モーションセンサーをつないでみた
    閲覧数 905 | 2014年12月21日

  3. Raspberry Pi と Sony RC-S380/P、nfcpy で NFC カードの IDm を読み取る
    閲覧数 2450 | 2014年02月24日


Raspberry Pi 2 買おうかなぁw


【Raspberry Pi 2 ModelB】2015年2月1日発売最近機種!RaspberryPi2(ラズベリーパイ2)モデルB 英国製【Raspberry Pi 2 ModelB】2015年2月1日発売最近機種!RaspberryPi2(ラズベリーパイ2)モデルB 英国製 【売れ筋】【オススメ】






最終更新日  2015年03月09日 07時44分16秒
コメント(0) | コメントを書く

カテゴリ:Python
quickgui を改造してみる (6) - リスト表示を改良するで、quickgui に追加したコードは、次のようなもの。wxPython: Adding Checkboxes to ObjectListViewを参考にさせていただいた。

from ObjectListView import ObjectListView, ColumnDefn

class OLVCheckPanel(wx.Panel):
""""""
def __init__(self, parent, columns, data, func, func_arg):
"""Constructor"""
wx.Panel.__init__(self, parent=parent)

self.func = func
self.func_arg = func_arg
mainSizer = wx.BoxSizer(wx.VERTICAL)
btnSizer = wx.BoxSizer(wx.HORIZONTAL)

self.resultsOlv = ObjectListView(self, style=wx.LC_REPORT|wx.SUNKEN_BORDER)
self.data = data
self.setResults(columns, data)

checkBtn = wx.Button(self, label="Check")
checkBtn.Bind(wx.EVT_BUTTON, self.onCheck)
btnSizer.Add(checkBtn, 0, wx.ALL, 5)

uncheckBtn = wx.Button(self, label="Uncheck")
uncheckBtn.Bind(wx.EVT_BUTTON, self.onUncheck)
btnSizer.Add(uncheckBtn, 0, wx.ALL, 5)

nextBtn = wx.Button(self, label="Next")
nextBtn.Bind(wx.EVT_BUTTON, self.onNext)
btnSizer.Add(nextBtn, 0, wx.ALL, 5)

mainSizer.Add(self.resultsOlv, 1, wx.EXPAND|wx.ALL, 5)
mainSizer.Add(btnSizer, 0, wx.CENTER|wx.ALL, 5)
self.SetSizer(mainSizer)

def onCheck(self, event):
""""""
objects = self.resultsOlv.GetObjects()

for obj in objects:
self.resultsOlv.SetCheckState(obj, True)
self.resultsOlv.RefreshObjects(objects)

def onUncheck(self, event):
""""""
objects = self.resultsOlv.GetObjects()

for obj in objects:
self.resultsOlv.SetCheckState(obj, False)
self.resultsOlv.RefreshObjects(objects)

def onNext(self, event):
""""""
obj = self.resultsOlv.GetObjects()
status = []
for o in obj:
s = self.resultsOlv.GetCheckState(o)
status.append(s)

self.func(status, self.func_arg[0], self.func_arg[1])
self.Destroy()
wx.Exit()

def setResults(self, columns, data):
""""""
self.resultsOlv.SetColumns(columns)
self.resultsOlv.CreateCheckStateColumn()
self.resultsOlv.SetObjects(self.data)


class OLVCheckFrame(wx.Frame):

def __init__(self, title, columns, data, func, size=(500,200)):
"""Constructor"""
wx.Frame.__init__(self, parent=None, title=title, size=size)

func_arg = (columns, data)
make_objects = self.column_builder(columns)
column_definition = self.column_def(columns)

data = [make_objects(x) for x in data]

self.panel = OLVCheckPanel(self, column_definition, data, func, func_arg)

def column_def(self, name):
columns = []
for i, n in enumerate(name):
slot = "column_%d" % i
column = ColumnDefn(n, "left", -3, slot)
columns.append(column)
return columns


def column_builder(self, columns):

l = len(columns)
slots = []

for i in range(l):
column = "column_%d" % i
slots.append(column)

class Results(object):
__slots__ = slots

def __init__(self, data):
"""Constructor"""
for i in range(len(slots)):
self.__setattr__(self.__slots__[i], data[i])

return Results

def CheckList(title, columns, data, func, size):
app = wx.App(False)
frame = OLVCheckFrame(title, columns, data, func, size=size)
frame.Show()
app.MainLoop()
return True

checklist = CheckList





楽天SocialNewsに投稿!

最終更新日  2015年03月08日 16時12分56秒
コメント(0) | コメントを書く

カテゴリ:Python
quickgui を改造してみる (5) - リスト表示から選択するは、ちょっと見た目もさえないし、タイトルをクリックしたら並び替えてくれるとか、機能的にも、もう少し欲しい。ということで、wxPython: Adding Checkboxes to ObjectListView を参考にする。ObjectListView を使っているので pip install しておく。

# -*- coding: utf-8 -*-

import quickgui as q # 改造したもの

title = "デタラメデータ"
columns = ("名前", "出生地", "生年", "血液型", "好きな食べ物")

data = [("平 将門", "東京都", "1981", "A", "チョコレート"),
("平 清盛", "神奈川県", "1949", "B", "メロン"),
("宮本 武蔵", "埼玉県", "1949", "AB", "いちじく") ]

def func(check_list, columns, data):
print "チェックされたもの"
for c in columns:
print c,
print
count = 0
for checked in check_list:
if checked:
column_data = data[count]
for d in column_data:
print d,
print
count += 1

q.checklist(title, columns, data, func, size=(500,200))

これだけで、次のような表示になる。


Nextボタンを押すと、func が実行され、上の場合、標準出力に結果を出力するようにしている。

チェックされたもの
名前 出生地 生年 血液型 好きな食べ物
平 将門 東京都 1981 A チョコレート
宮本 武蔵 埼玉県 1949 AB いちじく
タイトル行をクリックすると、ソートしてくれるし、色もついて、複数行あるときに見やすくなった。ObjectListView - How I learned to stop worrying and love wx.ListCtrl をちゃんと読んで、ちゃんと使い方覚えようかな。

追加したコードは、次のエントリで。






楽天SocialNewsに投稿!

最終更新日  2015年03月08日 14時46分49秒
コメント(0) | コメントを書く

2015年03月01日
カテゴリ:Python
ここまで来たら、リストで表示されているものを選んで OK したら、選択されているものの結果を返すというのができないかとチャレンジしてみる。

quickgui に次のコードを追加。

import sys
from wx.lib.mixins.listctrl import ListCtrlAutoWidthMixin

class AutoWidthListCtrl(wx.ListCtrl, ListCtrlAutoWidthMixin):
def __init__(self, parent):
wx.ListCtrl.__init__(self, parent, -1, style=wx.LC_REPORT)
ListCtrlAutoWidthMixin.__init__(self)

class AutoList(wx.Frame):
def __init__(self, parent, id, title, columns, data, size=(400, 200)):
wx.Frame.__init__(self, parent, id, title, size=size)

hbox = wx.BoxSizer(wx.HORIZONTAL)

panel = wx.Panel(self, -1)

self.list = AutoWidthListCtrl(panel)
for i, name in enumerate(columns):
self.list.InsertColumn(i, name)
number_of_data = i

for i in data:
index = self.list.InsertStringItem(sys.maxint, i[0])
rest = len(i) - 1
for j in range(rest):
self.list.SetStringItem(index, j+1, i[j+1])

hbox.Add(self.list, 1, wx.EXPAND)
panel.SetSizer(hbox)

self.Centre()
self.Show(True)

def autolist(title, columns, data):
app = wx.App()
AutoList(None, -1, title, columns, data)
app.MainLoop()


そして、使うときは次のようにする。

# -*- coding:utf-8 -*-

import quickgui as q

columns =('名前','出生地','生年','血液型','好きな食べ物')
data = [('平 将門', '東京都', '1981', 'A','チョコレート'),
('平 清盛', '神奈川県', '1949','B','メロン'),
('宮本 武蔵', '埼玉県', '1949','AB','いちじく'),
]

q.autolist("デタラメデータ", columns, data, size=(200,100))

こんな感じになる。簡単にチェックボックス付きのリストが表示できるようになった。


なんか地味だし、もうちょっとよくしたいので、なんとかしてみる。





楽天SocialNewsに投稿!

最終更新日  2015年03月01日 20時40分03秒
コメント(0) | コメントを書く

2015年02月26日
カテゴリ:Python
ここまできたらもっとやってみるだ。何か検索結果を簡単に一覧表示したいときがある。じゃあ、やってみる。参考にしたのは、String formating in wx.ListBoxあたりだったかな。しばらく前に書いたものなので忘れてしまった。

タイトル、カラム名のリスト、データのリストを渡してやると、一覧表示してくれるようなものを作ってみた。まずは、quickgui に以下を追加しておく。

import sys
from wx.lib.mixins.listctrl import ListCtrlAutoWidthMixin

class AutoWidthListCtrl(wx.ListCtrl, ListCtrlAutoWidthMixin):
def __init__(self, parent):
wx.ListCtrl.__init__(self, parent, -1, style=wx.LC_REPORT)
ListCtrlAutoWidthMixin.__init__(self)

class AutoList(wx.Frame):
def __init__(self, parent, id, title, columns, data, size=(400, 200)):
wx.Frame.__init__(self, parent, id, title, size=size)

hbox = wx.BoxSizer(wx.HORIZONTAL)

panel = wx.Panel(self, -1)

self.list = AutoWidthListCtrl(panel)
for i, name in enumerate(columns):
self.list.InsertColumn(i, name)
number_of_data = i

for i in data:
index = self.list.InsertStringItem(sys.maxint, i[0])
rest = len(i) - 1
for j in range(rest):
self.list.SetStringItem(index, j+1, i[j+1])

hbox.Add(self.list, 1, wx.EXPAND)
panel.SetSizer(hbox)

self.Centre()
self.Show(True)

def autolist(title, columns, data):
app = wx.App()
AutoList(None, -1, title, columns, data)
app.MainLoop()


呼び出してみる。呼び出しは簡単。サイズもオプションで指定できるようにしてみた。

# -*- coding:utf-8 -*-

import quickgui as q

columns =('名前','出生地','生年','血液型','好きな食べ物')
data = [('平 将門', '東京都', '1981', 'A','チョコレート'),
('平 清盛', '神奈川県', '1949','B','メロン'),
('宮本 武蔵', '埼玉県', '1949','AB','いちじく'),
]

q.autolist("デタラメデータ", columns, data, size=(200,100))



なかなか便利かもしれない。





楽天SocialNewsに投稿!

最終更新日  2015年02月26日 05時53分02秒
コメント(0) | コメントを書く

2015年02月19日
カテゴリ:Python
quickgui を自分好みに改造したついでなので、プログレスバーも簡単に使えればいいかと思って追加してみた。Updating a wxPython progress bar after calling app.MainLoop() を参考にして、次のコードを quickgui に追加。

def guage(title, func, msg = "processing..."):
import threading

def start(func, *args): # helper method to run a function in another thread
thread = threading.Thread(target=func, args=args)
thread.setDaemon(True)
thread.start()

app = wx.PySimpleApp()
dialog = wx.ProgressDialog(title, msg)
start(func, dialog)
dialog.ShowModal()
app.MainLoop()

return True

使うときには、引数として渡してやる関数に更新のロジックを書けばいい。wx.CallAfter の行を入れればいいだけなので、毎回長いコードを書くよりはるかに楽かなと。

# -*- coding: utf-8 -*-

import wx
import quickgui # 改造中のもの
import time

def do_something(dialog):

max_size = 400 # 400回のループを回してみる
step = 100.0 / max_size
count = 0.0

for i in range(max_size):
count += step
wx.CallAfter(dialog.Update, count)
time.sleep(0.1) # 実際の処理をここに
wx.CallAfter(dialog.Destroy)

quickgui.guage("メッセージ処理", do_something, msg="処理中です...")







楽天SocialNewsに投稿!

最終更新日  2015年02月19日 06時14分26秒
コメント(0) | コメントを書く

このブログでよく読まれている記事

全1776件 (1776件中 1-10件目)

1 2 3 4 5 6 >

Powered By 楽天ブログは国内最大級の無料ブログサービスです。楽天・Infoseekと連動した豊富なコンテンツや簡単アフィリエイト機能、フォトアルバムも使えます。デザインも豊富・簡単カスタマイズが可能!

Copyright (c) 1997-2015 Rakuten, Inc. All Rights Reserved.