在PyGTK中用F11切换全屏的简单方法

2024-05-13 05:00:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我不是一个专业的程序员,但经常使用PyGTK和Cairo进行数据可视化测试和原型设计。

我有一个从web上获取的PyGTK标准模板,它完成了GTK需要完成的“标准任务”:

import pygtk
pygtk.require('2.0')
import gtk

"""
lots of stuff
"""

if __name__ == "__main__":
    mainWindow = gtk.Window()
    mainWindow.set_title(some_title)
    mainWindow.connect("delete-event", gtk.main_quit)
    #mainWindow.set_position(gtk.WIN_POS_CENTER)
    #mainWindow.fullscreen()
    mainWindow.show_all()
    gtk.main()

我经常看到大多数应用程序使用F11来切换全屏,所以我想知道是否有一种简单的方法可以将此功能添加到我的脚本中。我想这可能意味着将事件信号连接到gtk函数或方法或类似的东西,但我的n00bness阻止我知道如何做到这一点。

任何帮助都将不胜感激,谢谢。(链接优先,以便我自己做作业;o)


Tags: 数据方法importgtk标准专业titlemain
1条回答
网友
1楼 · 发布于 2024-05-13 05:00:04

让我们从如何拿起键盘开始:我们需要连接到^{}信号。当然,我们需要一些东西把它和eem联系起来。

这个东西应该跟踪窗口状态,因此使用一个连接到^{}信号并跟踪窗口是否全屏的类是有意义的。

所以我们需要一个物体:

  1. 跟踪特定窗口的全屏/非全屏状态,以及
  2. 检测按键事件并找出处理方法

但是我们如何切换全屏状态呢?很简单,使用^{}/^{}函数。

所以我们有这样的东西:

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()

这需要一个窗口和可选的keysym常量(默认为F11)。像这样使用:

toggler = FullscreenToggler(window)
window.connect_object('key-press-event', FullscreenToggler.toggle, toggler)

注意使用^{}而不是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)

但我找不到房子。

相关问题 更多 >