让我们先从如何捕获按键事件开始:我们需要连接到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)
但是我找不到相关的属性。