Supondo que você esteja falando sobre um botão comum (como se fosse um botão de alternância), você pode ver todos os métodos que tem aqui . Ao lê-lo, parece que não há uma função para o que você está procurando, provavelmente porque essas coisas são projetadas para serem acionadas por eventos.
Em qualquer caso, eu estou querendo saber, você não pode apenas pegar os eventos para definir um booleano e dar uma olhada nisso para ver se ele está pressionado. Caso contrário, talvez você possa explicar a razão pela qual é importante para você contornar os eventos.
EDITAR
Depois de perceber que eu te interpretei mal o post original e que você estava falando sobre as teclas do teclado e não sobre os botões, eu sugeri a seguinte sugestão.
Quando o programa é executado, ele fará uma janela gtk e a ocultará, para possibilitar a escuta de eventos do teclado. Em seguida, ele escutará os eventos liberados da chave de qualquer uma das teclas que estão no atalho que iniciou o programa (nesse caso, ctrl-alt-u). Se qualquer uma dessas chaves for liberada, dentro do tempo limite de inicialização, ela será encerrada no final do tempo limite, caso contrário, mostrará o programa.
Se você quiser atrasar o início real do código do programa para economizar recursos, é claro que você pode usar uma janela fictícia e não carregar a janela real ou qualquer uma das classes subjacentes antes na função start_or_not
.
import pygtk
pygtk.require('2.0')
import gtk
class DelayedStart:
def __init__(self):
self.w = gtk.Window()
self.w.connect('destroy', gtk.main_quit)
# Connect key released events to a function
self.w.connect('key_release_event', self.on_key_press_event)
self.w.show_all()
# Hide the window, we actually need a gtk window to listen for
# keyboard events, so we just hide it
self.w.set_decorated(False)
self.w.set_opacity(0)
self.show_on_timeout = True
# Ask gtk to call the this function in 2 seconds
gtk.timeout_add(1000*2, self.start_or_not)
gtk.main()
def on_key_press_event(self, widget, event):
""" Check if any of the key in the shortcut ctrl-alt-u is released """
# ctrl = 65507, alt = 65513, u = 117
keys = [65507, 65513, 117]
if event.keyval in keys:
self.show_on_timeout = False
def start_or_not(self):
""" Check if the program should be started or not """
if self.show_on_timeout:
self.w.set_decorated(True)
self.w.set_opacity(1)
else:
gtk.main_quit()
# Returning false will destroy the timer, we only want to run this once
return False
if __name__ == "__main__":
DELAYED_START = DelayedStart()