EasyGuiを用いたPythonスクリプトの簡易GUI化Python MANIAX(2/3 ページ)

» 2009年01月09日 02時30分 公開
[ Dmitri Popov,SourceForge.JP Magazine]
SourceForge.JP Magazine

 次に手をつけるのは、検出されたレコードを表示するスクリプト部である。例えば既存レコードの全表示は、後記のコードブロックにて処理している。


elif command=="a":
  cursor.execute ("SELECT * FROM notes ORDER BY id ASC")
  rows = cursor.fetchall ()
  for row in rows:
      print "\n   %s %s [%s]" % (row[0], row[1], row[2])
  print "\n   Number of records: %d" % cursor.rowcount

 ここでは、こうしたレコード一覧に対する改良として、textbox関数を用いたテキストボックス形式での表示をさせてみよう。ただしここのコードブロックに関しては、検出されたレコード群を1つの文字列にまとめるための変更を追加しておかなくてはならない。そうした処理の実装に当たっては、result_list = []ステートメントにより空のリストを作成しておき、該当するレコードを.appendメソッドによりこのリストへ追加していけばいい。こうして取得した文字列は、後記のようにパラメータの1つとしてtextbox関数に渡すことになる。


elif command=="Show all records":
  cursor.execute ("SELECT * FROM notes ORDER BY id ASC")
  rows = cursor.fetchall ()
  result_list = []
  for row in rows:
      record_str = "\n%s %s [%s]" % (row[0], row[1], row[2])
      result_list.append (record_str)
  textbox ("Found records:", "Pygmynote", result_list)

 スクリプトの実行途中でユーザーの指定値に応じた制御を施すといった場合は、EasyGuiのboolbox関数が便利である。例えばPygmynoteのスクリプトではレコードの1つをアップデートする際に、ユーザーに対して当該レコードのノートとタグのどちらをアップデートするかの確認が行われるようになっており、該当するレコード中のフィールドが実際にアップデートされるのは、こうした確認を経た後の処理とされている。後記のコードブロックは、このような処理をするオリジナルのスクリプト部である。


elif command=="u":
  input_id=raw_input("Record id: ")
  input_type=raw_input("Update note (n) or tags (t): ")
  if input_type=="n":
      input_update=raw_input("Note: ")
      sqlstr=escapechar(input_update)
      cursor.execute ("UPDATE notes SET note='" + sqlstr + "' WHERE id='" + input_id + "'""")
  else:
      input_update=raw_input("Tags: ")
      sqlstr=escapechar(input_update)
      cursor.execute ("UPDATE notes SET tags='" + sqlstr + "' WHERE id='" + input_id + "'""")
  print "\nRecord has been updated."

 boolbox関数を実行すると2つのボタンを配置したメッセージボックスが表示され、このうちユーザーが1番目のボタンをクリックすると関数の戻り値として1が返され、それ以外の場合は0が返されるという仕様になっている。これが実際にどのような操作となるかは、後記のような簡単なサンプルコードを試験的に実行してみればいいだろう。


if boolbox("What do monkeys like most?", "Pygmynote", ["Bread", "Bananas"]):
  msgbox ("Well, not really.")
else:
  msgbox ("Yep, that's what they like most.")

 ここでの使用例としては、boolbox関数を介して“Note”と“Tags”のボタンを表示させ、ユーザーの選択に応じた処理をスクリプトに実行させるようにしてみた。


elif command=="Update record":
  input_id=enterbox(msg='Record ID: ', title='Pygmynote', default='', strip=True)
  if boolbox("What do you want to update?", "Pygmynote", ["Note", "Tags"]):
    input_update=enterbox(msg='Enter note: ', title='Pygmynote', default='', strip=True)
    sqlstr=escapechar(input_update)
    cursor.execute ("UPDATE notes SET note='" + sqlstr + "' WHERE id='" + input_id + "'""")
  else:
    input_update=enterbox(msg='Enter tags: ', title='Pygmynote', default='', strip=True)
    sqlstr=escapechar(input_update)
    cursor.execute ("UPDATE notes SET tags='" + sqlstr + "' WHERE id='" + input_id + "'""")
  msgbox ("Record has been updated.", "Pygmynote", ok_button="Close")

Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ