2017-04-16 67 views
1

我知道「切換或非切換」事件不存在,但我需要使用這樣的事件。當按鈕被「切換」和「不動搖」時,是否有任務要做?我不想使用「點擊」事件,因爲切換按鈕可以在不點擊 感謝PyGtk3,ToggleButton,「切換或非切換」事件

例如

def foo(obj): 
    if obj.get_active(): 
     print("toggled") 
    else: 
     print("untoggled") 

mybtn = gtk.ToggleButton() 
mybtn.connect("toggled-or-untoggled", foo) 
+0

你的問題應該提到你正在使用的GTK版本。 –

回答

1

這是一個簡短的GTK2 +/PyGTK演示;如果有必要,應該很容易適應GTK3。

GUI包含一個ToggleButton和一個普通的Button。 ToggleButton的回調僅僅在用戶點擊按鈕或者調用其set_active方法的其他代碼時觸發按鈕的狀態。普通按鈕在單擊時會打印一條消息,同時也會切換ToggleButton。

#!/usr/bin/env python2 

from __future__ import print_function 
import pygtk 
pygtk.require('2.0') 
import gtk 

class Test(object): 
    def __init__(self): 
     win = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     win.connect("destroy", lambda w: gtk.main_quit()) 

     box = gtk.HBox() 
     box.show() 
     win.add(box) 

     self.togglebutton = button = gtk.ToggleButton('toggle') 
     button.connect("toggled", self.togglebutton_cb) 
     box.pack_start(button, expand=True, fill=False) 
     button.show() 

     button = gtk.Button('plain') 
     button.connect("clicked", self.button_cb) 
     box.pack_start(button, expand=True, fill=True) 
     button.show() 

     win.show() 
     gtk.main() 

    def button_cb(self, widget): 
     s = "%s button pressed" % widget.get_label() 
     print(s) 
     print('Toggling...') 
     tb = self.togglebutton 
     state = tb.get_active() 
     tb.set_active(not state) 

    def togglebutton_cb(self, widget): 
     state = widget.get_active() 
     s = "%s button toggled to %s" % (widget.get_label(), ("off", "on")[state]) 
     print(s) 

Test() 

典型輸出

toggle button toggled to on 
toggle button toggled to off 
plain button pressed 
Toggling... 
toggle button toggled to on 
plain button pressed 
Toggling... 
toggle button toggled to off 
plain button pressed 
Toggling... 
toggle button toggled to on 
toggle button toggled to off 
+0

非常感謝您的幫助。 – PyGtk3

2

根據the docs進行切換或untoggled -

當按鈕的狀態發生改變,「切換」信號爲 。

所以,理想情況下,mybtn.connect("toggled", foo)應該工作。

+0

我已經知道這一點。我不是故意的 – PyGtk3

+1

噢好吧,然後請詳細說明確切的要求。 –

+0

「切換」事件僅在小部件切換時運行,但在小部件未被切斷時不運行。我想在窗口小部件切換並且不動時運行 – PyGtk3