2014-05-16 50 views
0

我對我的Gtk.Switch的狀態ON/OFF感到困惑,我會向你解釋原因。Gtk.Switch.get_active()奇怪的工作

這是ON狀態

switch OFF state

if __name == '__main__': 

    logging_file = None 
    my_logger = logging.getLogger() 
    my_logger.setLevel(logging.INFO) 

    builder.get_object('switch1').connect('button-press-event', self.switching) 
    builder.get_object('switch1').set_active(False) 
    t = threading.Thread(target=self.printing, args=(self.__builder.get_object('switch1'),)) 
    t.setDaemon(True) 
    t.start() 


def printing(self, widget): 

    while True: 
     time.sleep(1) 
     print '%s is %s' % (widget.get_name(), str(widget.get_active())) 
     -------- it prints correctly True if the switch is set ON -------- 


def switching(self, widget): 

    if logging_file is None: 
     logging_file = 'log' + '_' + time.strftime("%d.%m.%Y_%X") 
     file_handler = logging.FileHandler(self.logging_file, 'w') 
     file_handler.setFormatter(self.__formatter) 
     my_logger.addHandler(file_handler) 

    my_logger.info('%s is %s' % (widget.get_name(), str(widget.get_active()))) 
    -------- it prints False if the switch is set ON***, i don't know why -------- 

看到代碼中的註釋,開關是在不同的狀態,如果我叫get_active()他自己的函數處理程序中或者如果我從外部函數調用get_active()。

回答

0

這就是爲什麼我告訴你不要在that other post中使用button-press-event。使用notify::active。當您處理button-press-event時,您的信號處理程序在之前的點處運行,交換機有機會處理該信號,因此它不知道它將要改變狀態;它只會在您的switching()處理程序運行後後更改,這就是您在switching()中得到錯誤值的原因。

+0

非常感謝你,你從一段時間回答我的問題:) – FrancescoN