1266915 ランダム
 HOME | DIARY | PROFILE 【ログイン】

傀儡師の館.Python

PR

Recent Posts

Calendar

Keyword Search

▼キーワード検索

Category

Archives

Freepage List

Rakuten Profile


kugutsushiさん

怠惰な人

フォローする

Free Space

設定されていません。

 

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

1 2 3 4 5 6 >

March 1, 2015
楽天プロフィール XML
カテゴリ: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に投稿!

Last updated  March 1, 2015 08:40:03 PM
コメント(0) | コメントを書く

February 26, 2015
カテゴリ: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に投稿!

Last updated  February 26, 2015 05:53:02 AM
コメント(0) | コメントを書く

February 19, 2015
カテゴリ: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に投稿!

Last updated  February 19, 2015 06:14:26 AM
コメント(0) | コメントを書く

February 17, 2015
カテゴリ:Python
quickgui の Inputs に手を入れて、_Inputs2、Inputs2 というバリエーションを作ってみた。ヘルプボタンを削除したら、表示時のスペースが少なくなって、コンパクトになるかなと。これはソースが長いので省略。単純にいえば、helpボタン関連の行をコメントアウトして、instruction で渡された文字列は先頭に表示するという改造。、子供でもできる Python をこんな風にしてみた。

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

import quickgui # 改造バージョン

intro_message = "実行したいツールをダブルクリックしてください。"

choices = [
(''),
(u' ツールの選択',
(u"いかがわしいツール",
u"なぜかいかがわしいツール",
u"とってもいかがわしいツール",
u"もっといかがわしいツール",
u"さらにいかがわしいツール",
u"どうしようもなくいかがわしいツール"), 0),
(''), ]

choice = quickgui.inputs2(choices, title="ツール選択", instruction=intro_message
)
print choice
reply = choice[0]

if reply[0] == u"いかがわしいツール":
quickgui.confirm(u"%s を実行します。" % reply[0], ok=True)
# なにやらいかがわしいことをする。
else:
quickgui.alert(u"%s はまだ実装されていません。" % reply[0])

quickgui.message("終わり")


元々の表示


Inputs2 改良版









ここでふと、FlexGridSizer の使い方変えれば、元のままでもいいかなと思い始める。つまり、FlexGridSizer で2列用意して、ヘルプボタンと、キャンセルボタンの2つが、最初の列になるので、最初の列が長くなってしまう。だから、入力用の FlexGridSizer には入れないで、別に作ったところに入れてやればいいかと。それで、こうなった。これでいいかも。



と、まあ、少し wxPython をいじったことがあれば適当に手を加えて自分好みに改造できる。

せっかくだから、もう少し改造というか拡張を続けてみようかと思う。






楽天SocialNewsに投稿!

Last updated  February 17, 2015 09:08:36 PM
コメント(0) | コメントを書く

February 11, 2015
カテゴリ:Python
quickgui は便利なのだけれど、ちょっと好みに合わないところがあるので、手を入れてみることにした。最初に、シンプルな msgbox を作って、ソースに追加してみた。これで easygui みたいなメッセージボックスを表示できるようになった。

class _SimpleMessageDialog(wx.Dialog):
def __init__(self, message, title, ok_button):
wx.Dialog.__init__(self, None, -1, title,size=(400, 80))
self.CenterOnScreen(wx.BOTH)

button = wx.Button(self, label=ok_button)
stMsg = wx.StaticText(self, -1, message)

vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(stMsg, 1, wx.ALIGN_CENTER|wx.TOP, 10)
vbox.Add(button,1, wx.ALIGN_CENTER|wx.TOP, 10)
self.SetSizer(vbox)
self.Bind(wx.EVT_BUTTON, self.OnExit, id=button.GetId())

def OnExit(self, event):
self.Close()


def MessageBox(msg, title='Message', ok_button="OK"):
"""Messagebox(msg, title='Message', ok_button="OK")
Displays simple message box
"""

dlg = _SimpleMessageDialog(msg, title, ok_button)
result = dlg.ShowModal()
return result

msgbox = MessageBox







楽天SocialNewsに投稿!

Last updated  February 12, 2015 12:23:18 AM
コメント(0) | コメントを書く

February 9, 2015
カテゴリ:Python
Python のプログラムを作ったとき、コマンドラインで動くようなものを作ったけれど、オプションを GUI で指定したり、メッセージもちょこっと GUI で出したりとかしたいとき、easygui とか使うと便利。でも、Tk ベースなのでなんか見栄えが微妙。wxPython とか、pyQt とか、ごりっと使って、まともに GUI プログラミングをするのには億劫う。なんてときは、quickgui を使う。easygui は以前に 子供でもできる Python (2007年10月16日)でも紹介したが、quickgui は wxPython 版ということ。

quickgui のベースは wxPython なのだけど、インタラクティブな操作のところを簡単に書ける。

バックエンドに何を使っているかというところから見ると、次のようになる。

wxPython ベースの quickgui を使うことにした。pyQT 使える人なら easygui-qt とかの方がいいかもしれない。

使ってみた感想として、easygui と比べると、easygui の方がイージー。msgbox, ccbox, ynbox, choicebox とか、名前が安易でわかりやすい。quickgui だと、メッセージを出す場合には alert、confirm、message とわかりやすい名前で使い分けられる一方で、入力は Inputs への引数の渡し方で、radiobox になったり、combobox になったり、あるいは listbox、checkbox, textbox になる。名前をあれこれ覚えなくてもよい一方、引数の渡し方でタイプが決まるので、3つの要素がある radiobox とか表示できなかったりする(3つの要素のリストを渡すと自動的に comboboxになってしまう)。微妙な不自由さはあるものの、逆に一つのダイアログの中に複数のタイプの入力を並べることもできる。制限はあるが、簡単にできることだけ簡単にやるということなので、よしとしよう。

ちなみに messageでメッセージを表示すると、カウントダウンして、10秒(変更可能)で OK を押したのと同じになる。便利なときは便利だけど、カウントダウンが邪魔だなと思う時もある。confirm("メッセージ", ok=True) で easygui.msgbox と同じ感じになる。でも、アイコン邪魔とかいうときはどうするの? アイコンは勝手に表示されちゃう。便利は便利なんだけど、微妙。

あと、子供でもできる Pythonで作ったやつを同じ感じでやろうとしても、こうなっちゃう。微妙な配置。

easygui


quickgui


ちょっと quickgui に手を入れながら、もう少し便利に使えるようにあれチャレンジしてみることにした。





楽天SocialNewsに投稿!

Last updated  February 9, 2015 07:17:50 AM
コメント(0) | コメントを書く

January 4, 2015
カテゴリ:どうでもいいこと
Raspberry Pi 用に工作するのに、タミヤ 電動ハンディドリルを買ってみた。電源は、単3乾電池が2本。意外と使える。タミヤ 電動ハンディドリル購入!組み立ててみた のあたりも参照。

動画で見ると、こんな感じ。



1.5cm くらいの木に穴を開けようとしたら、途中で止まってしまった。あまり無理に強く押し付けてしまうと止まってしまうようだ。根気強く、軽く押し当てる程度で削れるのを待つ感じ。ドリルが止まってしまったときには、逆回転できるように改造したいと思った。世の中にはそういうことをしている方もいらっしゃった。が、まあ、そこまでしなくても気をつけて使えば使えないこともないし、面倒なのでやめておく。

とにかく、正月早々、子供のような気分になって、よけいなところに穴あけてしまった。ちなみに、1500円ぐらいで、手に入る。


 タミヤ クラフトツール 電動ハンディドリル 74041 /アイテムジャパン

それはさておき、今年は、さらに本格的にドローンが進化する年になるのだろうな。おもちゃ遊びをしているようにしか見えなかった時代から、実用に向けて、さらに進化。おもちゃの延長線のものが意外に大きな進化を遂げていく時代だなというか、実用品とおもちゃが同時に進化していく。



さすがにこのレベルのはすでに実用段階。ラジコンはあなどれない。


これはすごすぎ。

ここ数年、このレベルのが安く買えるようになってきた。欲しい。買ってどうするあてもないが、そのうち衝動買いしてしまいそうな。。。。

こういうのは、業務レベルだとこのあたりか。すごいな。



こっちの方向は、自分ではなかなかできないけど、見ていて楽しい。






Last updated  January 4, 2015 07:07:46 AM
コメント(0) | コメントを書く

December 30, 2014
カテゴリ:Raspberry Pi
Yahoo オークションで 10インチのタッチパネルディスプレイ 3台が送料込で1万6千円ほどで買えたので、Raspberry Pi につないでみた。ディスプレイの入力は VGA なので Raspberry Pi に VGA ディスプレイを接続のコンバータで接続した。タッチパネルの出力は RS-232C だが、これはコンバータをまだ持ってないので年が明けたら購入してつないでみる予定。うまくいくといいのだけど。

組み込み用の処分品なのか、新品なのに安く買えてラッキーだった。ただし、裏側はしっかりした金属筐体.
作りはちゃんとしていて、けっこう重い。まあ、持ち運ぶものじゃないのでいいけど。



ちょっとはまったのが、画面を縦に表示するところ。最初 "xrandr -o right" とかやって画面を回転させようとしたのだが、どうにもうまくいかない。いろいろ調べてみたのだが分からず。そもそも、最初から 90度回転させておけばいいじゃんと思い直し、/boot/config.txt に 「display_rotate=1」を加えて、最初から縦に表示することにした。

まだ、タッチパネルがうまく動くかわからないが、なかなかよい感じ。あとは、どういうケースに入れるか。ちなみに、なぜ縦置きにしようと思っているかといえば、ひとつは、向かって右側の緑色のランプがついているところが、本当は下側で、ここに VGA ケーブル、RS232Cケーブルをつけるので、それだとよっぽどのケースにしないと不安定になりそうだから。逆さにするか、縦置きにするか、まだ迷ってる。ここに表示するアプリ次第かな。





楽天SocialNewsに投稿!

Last updated  December 31, 2014 04:59:06 AM
コメント(0) | コメントを書く

December 26, 2014
カテゴリ:Raspberry Pi
Raspbian は、最初から教育用にいろいろできるようインストールされるので、必要なものだけインストールしたい。ということで、minibian (Minimal Raspbian Image for Raspberry Pi) をインストールしてみることにした。512Mb SDカードに入ってしまう。boot にかかる時間は 21 秒。

情報はhttp://minibianpi.wordpress.com/から。ダウンロードは、sourceforge: MINImal raspBIAN image for Raspberry Pi。ベースは Raspbian と同じなので、安心して使うことができそう。他に最小限のインストールということでは、ネットからインストールするraspbian-ua-netinstもある。無人インストールで、インストールするものを指定できるし、こっちもいいかもしれない。

とりあえず、minibian のイメージをダウンロードして解凍、Win32 Disk Imager で SDカードに書き込み。起動してみる。確かに起動が速い。root/raspberry でログインして眺めてみる。ほんとうに最低限のものだけインストールされている感じ。raspi-config や rpi-update さえ入っていないので、apt-get install で両方インストールして、raspi-config で初期設定をあれこれして(このあたりは通常の Raspbian と同じ)、あれこれインストールしてみると、2GB超えてしまった。キオスク端末にしたいので、X環境を入れたいから、ある程度大きくなっちゃうのね。python2.7-dev とかもインストールしてるし。まあ、4GB の SDカードでも運用できそうな感じなので満足。raspbian ベースにインストールしていくと、余裕で 4GBは超えてしまうから。GUI不要なら 2GBのSDカードで十分いけそう。

その他、参照。





楽天SocialNewsに投稿!

Last updated  December 26, 2014 08:55:27 PM
コメント(0) | コメントを書く

December 22, 2014
カテゴリ:Raspberry Pi
Raspberry Pi をいじるとき、通常、無線LAN経由で ssh 接続してあれこれしているのだが、時折、接続を受け付けなくなるときがある。Raspberry Pi にはリセットスイッチも電源スイッチもない。USBケーブルをつなげば、即ONになる。

USBの電源を抜けば落とせるが、ちゃんとシャットダウンしたいから、あまりやりたくはない。ということで、ボタンを押せばシャットダウンするようにしてみた。Google で 「RaspberryPi シャットダウン ボタン」で検索すると、

  1. Raspberry Pi にシャットダウンボタンをつける
  2. GPIOを使ったシャットダウンスイッチ (2014/05/03)
  3. Raspberry Piにshutdownスイッチ追加
  4. Raspberry piに特定のUSB機器を差し込むと電源を落とすデーモンをPythonで作る


肝になるところは、割り込みを使った、

GPIO.wait_for_edge(23, GPIO.FALLING)

引用元の記事も読んでおくと役立つ。

あと、raspberry-gpio-python も。

2,3番目のは、5秒間ボタンを押したときだけシャットダウンするもので、LEDも点滅させる。2番目のはLuaJIT を使ってプログラムが書かれているのに興味をひかれた。4番目のは、人が出入りする場所においてあるときに間違ってボタン押されてシャットダウンされないのがいいかもしれないと思った。でも、USBさせるようにしておくのもあれだから、パソリつないで Raspberry Pi と Sony RC-S380/P、nfcpy で NFC カードの IDm を読み取るで、特定のカードをかざしたらシャットダウンもありだなとか思った。でも、シンプルにボタンでいいや。

何はともあれ、残念なところは、シャットダウンしても電源OFFにはならないのだよね。電源オフまでするとなると、もうちょっとコストがかかるパーツを買う必要がある(自作できないこともないだろうけど)。この手のものPi Supply Switch – On/Off Power Switch for Raspberry Pi





どうせ、ここまできたらリモコンでオフしたいよねってなったら、RemotePi Board 2015みたいなものもある。


用途によっては、やっぱり、こういう電源ON/OFFまでできるようにしておいた方がいいだろうけど、微妙だな。やめとこ。





楽天SocialNewsに投稿!

Last updated  December 22, 2014 06:16:06 AM
コメント(0) | コメントを書く

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

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

1 2 3 4 5 6 >

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

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