2012年9月25日火曜日

pythonで、お知らせを表示する。(pynotify)


pythonで、pynotifyを使って、お知らせを表示する。



import pynotify
pynotify.init("My App")
n = pynotify.Notification("Title", "Message", "/path/to/my/icon.png")
n.show()


表示する時間などを設定できるようなので、次回調べることにする。

2012年9月23日日曜日

pygtk で Dialog Box を表示する。

pygtk の勉強を再開しました。日本語の説明が少ないので、のんびりと進行中。

ダイアログをモーダレス表示したくて色々調べていたら、モーダル表示 gtk.Dialog があるとわかったので早速試してみました。

日本語の説明はこちら


def dialog(self,im,txt):
        dlg = gtk.Dialog("タイトル", self.window, 0, (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))

        dlg_image = gtk.Image()
        dlg_image.set_from_pixbuf(im)
        dlg_label = gtk.Label(txt)
        dlg_label.set_width_chars(30)
        dlg_label.set_line_wrap(15)

        dlg.vbox.pack_start(dlg_image)
        dlg.vbox.pack_start(dlg_label)
        dlg.show_all()
        dlg.run()
        dlg.destroy()


これなら、手軽にダイアログ表示ができて便利、vboxのみ利用可能のようです。

ダイアログをモーダレス表示する場合は、普通にウィンドウを表示するだけでいいようです。次回、試してみます。

2012年9月22日土曜日

pythonで左クリックを連打してみる。

pythonでGUI操作をする xautomation を使って、左クリックを連打するGUIを作成しました。意外にも、使いやすかったので重宝してます。

マウスカーソルの位置を記憶したら、連打ボタンかダウンボタン(左を押し続ける)を押すだけ。 みるみるゲームが進むのは爽快です。指が痛くならずに済みます。



import os
import time
import sys
try:
  import pygtk
  pygtk.require("2.0")
except:
  pass
try:
  import gtk
  import gtk.glade
except:
  sys.exit(1)

def xte_click(x,y,interval):
    # xautomation を左ボタンを連打
    os.system("xte 'mousemove %d %d'"%(x,y))
    x1, y1 = x,y
    while True:
        cmd = "xte 'mouseclick 1'"
        os.system(cmd)
        time.sleep(interval)
        a, x2, y2, b = gtk.gdk.display_get_default().get_pointer()
        if x1!=x2 and y1!=y2:
            break
        else:
            x1,y1 = x2,y2

def xte_down(x,y):
    # xautomation を左ボタンを押しつづける
    os.system("xte 'mousemove %d %d'"%(x,y))
    x1, y1 = x,y
    cmd = "xte 'mousedown 1'"
    os.system(cmd)
    while True:
        a, x2, y2, b = gtk.gdk.display_get_default().get_pointer()
        if x1!=x2 and y1!=y2:
            cmd = "xte 'mouseup 1'"
            os.system(cmd)
            break
        else:
            x1,y1 = x2,y2


class pygtk_builder:
    def __init__(self):

        #print os.path.dirname(__file__)
        #while True:
        #    pass

        self.builder = gtk.Builder()
        # mainwindow.gladeファイルから画面を作成
        #self.builder.add_from_file("mainwindow.glade")
        buff = """




True
True
True
X:
0
50
TrueTrue

1
True
Y:
2
50
TrueTrue

3
True
間隔:
4
50
TrueTrue

5
0
True

位置記憶
TrueTrue
True

0
連打開始
TrueTrue
True
1
マウスダウン
TrueTrueTrue

2
1
"""

        self.builder.add_from_string(buff)


        #windows1というオブジェクトを取得
        self.window = self.builder.get_object("window1")

        # gladeファイルで定義されているシグナルを自動で接続
        self.builder.connect_signals(self)
        signal_dic = { "gtk_main_quit" : gtk.main_quit }
        self.builder.connect_signals(signal_dic)

        # オブジェクトの初期化
        self.entry_x = self.builder.get_object("entry_x")
        self.entry_y = self.builder.get_object("entry_y")
        self.entry_interval = self.builder.get_object("entry_interval")

        self.entry_x.set_text("0")
        self.entry_y.set_text("0")
        self.entry_interval.set_text("0.2")

        self.window.set_focus(self.builder.get_object("button_save"))
        self.window.set_title("左クリック連打")

        #windows1が破棄される時、gtk_endを呼び出す
        self.window.connect("delete-event", self.gtk_end)
        self.window.show()

    def on_button_save_clicked(self,widget):
        # 現在のマウスカーソルの位置を記憶する
        a, x, y, b = gtk.gdk.display_get_default().get_pointer()
        self.entry_x.set_text(str(x))
        self.entry_y.set_text(str(y))

        # 位置を記録したら、フォーカスを移動
        self.window.set_focus(self.builder.get_object("button_start"))

    def on_button_start_clicked(self,widget):
        # マウス左クリックを連打する。
        x = int(self.entry_x.get_text())
        y = int(self.entry_y.get_text())
        interval = float(self.entry_interval.get_text())

        xte_click(x,y,interval)

    def on_button_down_clicked(self,widget):
        # マウス左を押しつづける。
        x = int(self.entry_x.get_text())
        y = int(self.entry_y.get_text())

        xte_down(x,y)

    def gtk_end(self, windows, event):
        #明示的に終了しないと、Python自体が終了しないっぽい
        sys.exit(0)

    def main(self):
        # GTK+のメインループを呼ぶ
        gtk.main()

if __name__ == "__main__":
    app = pygtk_builder()
    app.main()

2年ぶりに更新

 最後の記事が21年3月でしたので、27ヶ月ぶり。 2020年頃から始まったコロナ禍から在宅ワークがなくなり、通常運転に慣れてきた頃。 そろそろ新しい趣味を探していこうと思っています。 さて何するかな。。。