让我们从如何获取按键开始:我们需要连接到key-press-event 信号。但是我们当然需要一些东西来将它连接到。
这个东西应该跟踪窗口状态,所以使用一个连接到window-state-event 信号并跟踪窗口是否全屏的类是有意义的。
所以我们需要一个对象:
- 跟踪特定窗口的全屏/非全屏状态,并且
- 检测按键事件并确定如何处理它
我们如何实际切换全屏状态?简单,使用window.fullscreen() / window.unfullscreen() 函数。
所以我们有类似的东西:
class FullscreenToggler(object):
def __init__(self, window, keysym=gtk.keysyms.F11):
self.window = window
self.keysym = keysym
self.window_is_fullscreen = False
self.window.connect_object('window-state-event',
FullscreenToggler.on_window_state_change,
self)
def on_window_state_change(self, event):
self.window_is_fullscreen = bool(
gtk.gdk.WINDOW_STATE_FULLSCREEN & event.new_window_state)
def toggle(self, event):
if event.keyval == self.keysym:
if self.window_is_fullscreen:
self.window.unfullscreen()
else:
self.window.fullscreen()
这需要一个窗口和可选的键符常量(默认为 F11)。像这样使用它:
toggler = FullscreenToggler(window)
window.connect_object('key-press-event', FullscreenToggler.toggle, toggler)
注意使用connect_object 而不是connect,这样我们就不用添加一个未使用的参数了。
旁注:如果有一种简单的方法可以检查窗口是否为全屏,我们可以避免这种基于类的方法并使用一个函数,它会执行以下操作:
def fullscreen_toggler(window, event, keysym=gtk.keysyms.F11):
if event.keyval == keysym:
fullscreen = bool(
gtk.gdk.WINDOW_STATE_FULLSCREEN &
window.get_property('window-state'))
if fullscreen:
window.unfullscreen()
else:
window.fullscreen()
...然后...
window.connect('key-press-event', fullscreen_toggler)
但是我找不到这个属性。