web-dev-qa-db-ja.com

pygi関数を実行せずにボタンを切り替える方法

私はこのアプリケーションをすばやく使用して作成しています。

このボタンに接続されている機能を実行せずにボタンを切り替える方法を探しています。

def on_button_text_italic_toggled(self, widget):
    print "Italic"

def on_buttone_test_clicked(self, widget):
    self.button_text_italic.set_active(True)

したがって、button_text_italicを切り替えるには、これが必要ですが、「斜体」テキストは出力されません。

助けてくれてありがとう!

1
Majster-pl

手動でトグルするときではなく、トグル信号が発せられる時間のほとんどで関数を実行したい場合(たとえば、保存された設定をロードして適切な状態を表示するとき)、信号をブロックおよびブロック解除する必要があります。これを行うには、信号が関数に接続されたときに返されたhandle_idが必要です。信号を接続するときに変数を割り当てるだけです。次に例を示します。

#!/usr/bin/python
from gi.repository import Gtk

def on_toggle(widget,data=None):
    print "toggled, emitted signal"

def on_button1_clicked(widget, data=None):
    print "manually toggle, no signal"
    toggle.handler_block(handle_id)
    state=toggle.get_active()
    toggle.set_active(not state)
    toggle.handler_unblock(handle_id)


win=Gtk.Window()
win.connect('destroy', Gtk.main_quit)
box=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
button1=Gtk.Button('Toggle with no signal')
button1.connect('clicked', on_button1_clicked)
button1.show()
box.pack_start(button1,True,True,10)
toggle=Gtk.ToggleButton('Toggle')
handle_id=toggle.connect('toggled', on_toggle)
toggle.show()
box.pack_start(toggle,True,True,0)
box.show_all()
win.add(box)
win.show()
Gtk.main()
3
Ian B.

on_button_text_italic_toggledは、on_buttone_test_clickedが呼び出されたときに呼び出されるオブジェクトメソッドであるため、指定されたコードを実行するのが自然です。

print "Itallic"行をpass a Pythonキーワードに置き換える必要がありますが、これではon_button_text_italic_toggledが何もしないので、やりたくない場合がありますそれを呼び出します。

関数についてもっと学ぶことができます ここ そしてクラスとメソッドを定義する方法 ここ

0
Stef K