2017-08-01 23 views
5

Yakın zamanda gtk tasarım desenlerini inceledim ve in-app notifications'u buldum. Ne zaman kullanılacağı hakkında bir açıklama vardır, ancak gtk api'ye referans yoktur.gtk uygulama içi bildirimler API referece

Onu aradım ama sadece GNotification ve GApplication.send_notification buldu, ancak bu bildirimi masaüstü ortamına gönderir.

Bir uygulama içi bildirim yapmak için bir öğretici veya örnek kod bulma konusunda yardımcı olabilecek herhangi biri var mı?

+0

Bunu kullanmak istiyorum kendim :) Bu nedenle bağlantıya yönelik bir API referansı bildirmek için özgürlük aldı sayfanın sonunda. – theGtknerd

+0

Zaten bir posta göndermek bugün, belki çok uzun sürmez :) – microo8

+0

microo8 @theGtknerd cevabı kontrol edin. –

cevap

5

Uygulama bildirimi "widget", widget'lar, bir css sınıfı ve davranışların bir karışımıdır.

Uygulama bildirimlerini kullanmayı planladığınız pencerede bir Gtk.Overlay kullanmalı ve önceden tanımlı app-notification sınıfıyla bir Gtk.Frame kullanmalısınız. Gtk.Frame, "slayt" geçişini sağlamak için bir Gtk.Revealer içine sarılmalıdır. kullanan bazı piton kodu burada

enter image description here

Ve edilir: Glade'de

<?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> 

Sonuç: Burada

bir glade ui bir örnekle dosyası (app-notification.ui) 'dir önceki glade dosyasını ve bildirim için bazı dinamik davranışlar verir, böylece düğmelerini tıklatarak eylemde görebilmenizi sağlar. Glade dosyası aksi verilen ad yansıtacak şekilde kodunu değiştirmek, app-notification.ui adlı olmalıdır:

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

Merak etme, bu bilgiyi nereden buldunuz? – theGtknerd

+0

@theGtknerd aslında tam olarak nerede hatırlamıyorum gerçeği söylemek ama bazı sınıfları isimleri aramak için css dosyaları kavradı. A'dan B'ye, sonra da C'ye kadar kümülatif bir arama gibi bir şey var. İyi bir yaklaşım, istediğiniz bir şeyi kullanan bir uygulamayı hatırlamaktır. Daha sonra github veya gnome git'deki kaynaklara gidip nasıl olduğunu bulmaya çalışın. uyguladılar. Neyse ikiniz de haklısınız. Bunu nasıl başaracağınıza dair bir belge yok. belki de böyle bir şeyi Gnome/HowDoI'a eklemeliyiz –