讓我們從如何選擇按鍵開始:我們需要連接到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)
但我無法找到這個屬性。
優秀的解決方案! +1 – ptomato 2011-03-09 10:42:57
哇,你的回答非常徹底!非常感謝您給予您的時間,但我需要一些時間來消化您的提示! – heltonbiker 2011-03-09 13:12:07
@heltonbiker - 不用擔心:)讓我知道如果您在實現時遇到問題 – detly 2011-03-10 01:35:59