全5件 (5件中 1-5件目)
1
![]()
ここまできたらもっとやってみるだ。何か検索結果を簡単に一覧表示したいときがある。じゃあ、やってみる。参考にしたのは、String formating in wx.ListBoxあたりだったかな。しばらく前に書いたものなので忘れてしまった。タイトル、カラム名のリスト、データのリストを渡してやると、一覧表示してくれるようなものを作ってみた。まずは、quickgui に以下を追加しておく。import sysfrom wx.lib.mixins.listctrl import ListCtrlAutoWidthMixinclass 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 qcolumns =('名前','出生地','生年','血液型','好きな食べ物')data = [('平 将門', '東京都', '1981', 'A','チョコレート'), ('平 清盛', '神奈川県', '1949','B','メロン'), ('宮本 武蔵', '埼玉県', '1949','AB','いちじく'),]q.autolist("デタラメデータ", columns, data, size=(200,100))なかなか便利かもしれない。
2015.02.26
コメント(0)
![]()
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 wximport quickgui # 改造中のものimport timedef 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="処理中です...")
2015.02.19
コメント(0)
![]()
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 choicereply = 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 をいじったことがあれば適当に手を加えて自分好みに改造できる。せっかくだから、もう少し改造というか拡張を続けてみようかと思う。
2015.02.17
コメント(0)
![]()
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 resultmsgbox = MessageBox
2015.02.11
コメント(0)

Python のプログラムを作ったとき、コマンドラインで動くようなものを作ったけれど、オプションを GUI で指定したり、メッセージもちょこっと GUI で出したりとかしたいとき、easygui とか使うと便利。でも、Tk ベースなのでなんか見栄えが微妙。wxPython とか、pyQt とか、ごりっと使って、まともに GUI プログラミングをするのには億劫う。なんてときは、quickgui を使う。easygui は以前に 子供でもできる Python (2007年10月16日)でも紹介したが、quickgui は wxPython 版ということ。quickgui のベースは wxPython なのだけど、インタラクティブな操作のところを簡単に書ける。バックエンドに何を使っているかというところから見ると、次のようになる。easygui: Tkinterquickgui: wxPythoneasygui-qt, (doc) PyQtwxPython ベースの 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で作ったやつを同じ感じでやろうとしても、こうなっちゃう。微妙な配置。easyguiquickguiちょっと quickgui に手を入れながら、もう少し便利に使えるようにあれチャレンジしてみることにした。
2015.02.09
コメント(0)
全5件 (5件中 1-5件目)
1

![]()
