You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gtk3与Python中检测Gtk.Stack页面切换?

检测Gtk.StackSidebar的页面切换操作(Gtk3 + Python)

Gtk3完全支持检测这类操作,核心逻辑是:Gtk.StackSidebar只是Gtk.Stack的UI控制组件,页面切换的本质是修改了绑定Stack的visible-child属性,因此直接监听Stack的notify::visible-child信号即可,无需单独处理Sidebar的事件。

实现步骤与代码示例

  1. 创建Gtk.Stack和对应的Gtk.StackSidebar并完成绑定
  2. 为Stack绑定notify::visible-child信号,触发时获取当前激活页面信息
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class StackDemo(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="StackSidebar 切换检测")
        self.set_default_size(400, 300)

        # 主布局容器
        box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6)
        self.add(box)

        # 创建Stack与Sidebar并绑定
        self.stack = Gtk.Stack()
        self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT)

        sidebar = Gtk.StackSidebar()
        sidebar.set_stack(self.stack)
        box.pack_start(sidebar, False, False, 0)
        box.pack_start(self.stack, True, True, 0)

        # 添加测试页面
        page1 = Gtk.Box()
        page1.add(Gtk.Label(label="页面 1"))
        self.stack.add_titled(page1, "page1", "页面一")

        page2 = Gtk.Box()
        page2.add(Gtk.Label(label="页面 2"))
        self.stack.add_titled(page2, "page2", "页面二")

        page3 = Gtk.Box()
        page3.add(Gtk.Label(label="页面 3"))
        self.stack.add_titled(page3, "page3", "页面三")

        # 绑定页面切换信号
        self.stack.connect("notify::visible-child", self.on_stack_page_changed)

    def on_stack_page_changed(self, stack, param_spec):
        # 获取当前页面的ID和标题
        current_page_id = stack.get_visible_child_name()
        current_page_title = stack.get_page(stack.get_visible_child()).get_title()
        print(f"已切换到页面:{current_page_title}(ID: {current_page_id})")

win = StackDemo()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

关键说明

  • notify::visible-child信号会在Stack的可见子组件变更时触发,无论变更来自StackSidebar点击、代码调用还是其他操作
  • 可通过get_visible_child_name()获取页面ID,get_page()配合get_title()获取页面显示标题
  • 这是Gtk3官方推荐的实现方式,因为StackSidebar本身不提供独立的切换信号,所有操作都会同步到绑定的Stack上

内容的提问来源于stack exchange,提问作者ShadowOfHassen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:29:59