gtk应用内通知API参考

mic*_*oo8 5 gtk notifications toast pygobject gtk3

我最近研究了gtk设计模式,并找到了应用内通知.有关何时使用它的说明,但没有引用gtk api.

我已经搜索过了,但只找到了GNotificationGApplication.send_notification,但这会将通知发送到桌面环境.

任何人都可以帮助找到用于进行应用内通知的教程或示例代码吗?

Jos*_*nte 7

应用程序通知"小部件"是小部件,css类和行为的混合.

您应该在计划使用应用程序通知的窗口中使用Gtk.Overlay,然后使用带有预定义app-notification类的Gtk.Frame .Gtk.Frame应该包含在Gtk.Revealer中,以允许显示"幻灯片"转换.

这是一个glade ui文件(app-notification.ui),带有一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
  <requires lib="gtk+" version="3.20"/>
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <property name="default_width">440</property>
    <property name="default_height">250</property>
    <child>
      <object class="GtkOverlay" id="overlay1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <object class="GtkBox" id="box1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="orientation">vertical</property>
            <child>
              <object class="GtkLabel" id="label1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">APP-NOTIFICATION EXAMPLE</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button1">
                <property name="label" translatable="yes">show app-notification</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">1</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="index">-1</property>
          </packing>
        </child>
        <child type="overlay">
          <object class="GtkOverlay" id="overlay2">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="valign">start</property>
            <child>
              <object class="GtkRevealer" id="revealer2">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="halign">center</property>
                <child>
                  <object class="GtkFrame" id="frame2">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="label_xalign">0</property>
                    <property name="shadow_type">none</property>
                    <child>
                      <object class="GtkBox" id="box2">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="spacing">20</property>
                        <child>
                          <object class="GtkLabel" id="label2">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="label" translatable="yes">This is an app-notification. Click the button to dismiss</property>
                          </object>
                          <packing>
                            <property name="expand">False</property>
                            <property name="fill">True</property>
                            <property name="position">0</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkButton" id="button2">
                            <property name="visible">True</property>
                            <property name="can_focus">True</property>
                            <property name="receives_default">True</property>
                            <property name="relief">none</property>
                            <child>
                              <object class="GtkImage" id="image2">
                                <property name="visible">True</property>
                                <property name="can_focus">False</property>
                                <property name="icon_name">window-close-symbolic</property>
                              </object>
                            </child>
                            <style>
                              <class name="image-button"/>
                            </style>
                          </object>
                          <packing>
                            <property name="expand">False</property>
                            <property name="fill">True</property>
                            <property name="position">1</property>
                          </packing>
                        </child>
                      </object>
                    </child>
                    <child type="label_item">
                      <placeholder/>
                    </child>
                    <style>
                      <class name="app-notification"/>
                    </style>
                  </object>
                </child>
              </object>
              <packing>
                <property name="pass_through">True</property>
                <property name="index">-1</property>
              </packing>
            </child>
          </object>
        </child>
      </object>
    </child>
  </object>
</interface>
Run Code Online (Sandbox Code Playgroud)

格莱德的结果:

在此输入图像描述

这里有一些python代码,它使用上一个glade文件,并为通知提供一些动态行为,以便您可以通过单击按钮查看它.glade文件应命名为app-notification.ui,否则更改代码以反映给定名称:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

def onButtonShow(self):
    revealer.set_reveal_child(True)

def onButtonClose(self):
    revealer.set_reveal_child(False)

builder = Gtk.Builder()
builder.add_from_file("app-notification.ui")

window = builder.get_object("window1")

buttonShow = builder.get_object("button1")
buttonClose = builder.get_object ("button2")
revealer = builder.get_object("revealer2") 

buttonShow.connect ("clicked", onButtonShow)
buttonClose.connect ("clicked", onButtonClose)
window.connect ("destroy", Gtk.main_quit)
window.show_all()

Gtk.main()
Run Code Online (Sandbox Code Playgroud)