Извините, вы действительно должны конвертировать в Python3. Если я не ошибаюсь, в конце этого года поддержка 2.x прекращается.
Чтобы «активировать» тумблер, используйте метод set_active
:
tbtn = Gtk.ToggleButton("I'm toggleable")
tbtn.set_active(True)
Об изменениях, он активирует сигнал toggled
для кнопки. Выполните tbtn.get_active()
вызов, чтобы узнать его состояние.
Кстати, если вы хотите убедиться, что toggled
запущен, вы можете сначала проверить его состояние (до .set_active
).
(Измените заглавные буквы Gtk на те, которые соответствуют тому, какой Python вы используете. Я использую интроспекцию и Gtk3)
EDIT:
Приведенный ниже код принимает ToggleButton и превращает его вобычная кнопка (более или менее), путем подкласса ее и удаления оригинальной обработки. Как таковой, он не испускает переключенный сигнал, но это не будет слишком сложно добавить.
Верхняя кнопка (btn1) - обычная кнопка, активирующая нижнюю.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# test_button_press.py
#
# Copyright 2019 John Coppens <john@jcoppens.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
#
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('GooCanvas', '2.0')
from gi.repository import Gtk, GooCanvas
class My_button(Gtk.ToggleButton):
def __init__(self, **kwargs):
super(My_button, self).__init__(**kwargs)
self.connect("button_press_event", self.on_btn2_press)
self.connect("button_release_event", self.on_btn2_released)
def on_btn2_press(self, btn, event):
self.pressed2_at = event.time
btn.set_active(True)
return True
def on_btn2_released(self, btn, event):
print("Release2 after", event.time - self.pressed2_at)
btn.set_active(False)
return True
class MainWindow(Gtk.Window):
def __init__(self):
super(MainWindow, self).__init__()
self.connect("destroy", lambda x: Gtk.main_quit())
self.btn1 = Gtk.Button("Button1")
self.btn1.connect("clicked", self.on_btn1_clicked)
self.btn2 = My_button(label = "Victim")
self.vbox = Gtk.VBox(spacing = 4)
self.vbox.pack_start(self.btn1, False, False, 0)
self.vbox.pack_start(self.btn2, False, False, 0)
self.add(self.vbox)
self.show_all()
def on_btn1_clicked(self, btn):
self.btn2.set_active(True)
def run(self):
Gtk.main()
def main(args):
mainwdw = MainWindow()
mainwdw.run()
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))