Gtk.Switch.get_active()工作异常

Gtk.Switch.get_active()工作异常,gtk,pygtk,uiswitch,Gtk,Pygtk,Uiswitch,我对Gtk的开/关状态感到困惑。开关,我将向您解释原因 这是打开状态: 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) builde

我对Gtk的开/关状态感到困惑。开关,我将向您解释原因

这是打开状态

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(),则开关处于不同的状态

这就是为什么我告诉您不要在中使用
按钮按下事件。使用
notify::active
。当您处理按钮按下事件时,您的信号处理程序在交换机有机会处理该信号之前运行,因此它不知道它将要更改状态;它只会在
switching()
处理程序运行后更改,这就是为什么在
switching()
中得到错误的值的原因非常感谢,您回答了我的一些问题:)