<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 根窗口 > 原文: [https://zetcode.com/gfx/pycairo/root/](https://zetcode.com/gfx/pycairo/root/) 在 PyCairo 教程的這一部分中,我們將使用根窗口。 根窗口是我們通常具有圖標快捷方式的桌面窗口。 可以使用根窗口進行操作。 從程序員的角度來看,它只是一種特殊的窗口。 ## 透明窗口 我們的第一個示例將創建一個透明窗口。 我們將看到窗口對象下方的內容。 ```py #!/usr/bin/python ''' ZetCode PyCairo tutorial This code example shows how to create a transparent window. author: Jan Bodnar website: zetcode.com last edited: August 2012 ''' from gi.repository import Gtk import cairo class Example(Gtk.Window): def __init__(self): super(Example, self).__init__() self.tran_setup() self.init_ui() def init_ui(self): self.connect("draw", self.on_draw) self.set_title("Transparent window") self.resize(300, 250) self.set_position(Gtk.WindowPosition.CENTER) self.connect("delete-event", Gtk.main_quit) self.show_all() def tran_setup(self): self.set_app_paintable(True) screen = self.get_screen() visual = screen.get_rgba_visual() if visual != None and screen.is_composited(): self.set_visual(visual) def on_draw(self, wid, cr): cr.set_source_rgba(0.2, 0.2, 0.2, 0.4) cr.set_operator(cairo.OPERATOR_SOURCE) cr.paint() def main(): app = Example() Gtk.main() if __name__ == "__main__": main() ``` 為了創建透明窗口,我們獲得了屏幕對象的視覺效果并將其設置為我們的窗口。 在`on_draw()`方法中,我們繪制屏幕的可視對象。 這造成了部分透明的幻覺。 ```py self.set_app_paintable(True) ``` 我們必須設置要繪制的應用。 ```py screen = self.get_screen() ``` `get_screen()`方法返回屏幕對象。 ```py visual = screen.get_rgba_visual() ``` 從屏幕窗口中,我們可以看到它。 視覺內容包含低級顯示信息。 ```py if visual != None and screen.is_composited(): self.set_visual(visual) ``` 并非所有的顯示器都支持此操作。 因此,我們檢查屏幕是否支持合成并且返回的視覺效果不是`NULL`。 我們將屏幕的視覺效果設置為窗口的視覺效果。 ```py def on_draw(self, wid, cr): cr.set_source_rgba(0.2, 0.2, 0.2, 0.4) cr.set_operator(cairo.OPERATOR_SOURCE) cr.paint() ``` 我們使用部分透明的源來繪制屏幕窗口。 `cairo.OPERATOR_SOURCE`在我們繪制源代碼的地方創建了合成操作。 這是屏幕窗口。 為了獲得完全透明,我們將 alpha 值設置為 0 或使用`cairo.OPERATOR_CLEAR`運算符。 ![Transparent window](https://img.kancloud.cn/4c/c3/4cc35d7d24fe6addb8ca72f0fdfa4b6e_302x276.jpg) 圖:透明窗口 ## 截屏 根窗口對于截圖也是必不可少的。 ```py #!/usr/bin/python ''' ZetCode PyCairo tutorial This code example takes a screenshot. author: Jan Bodnar website: zetcode.com last edited: August 2012 ''' from gi.repository import Gdk import cairo def main(): root_win = Gdk.get_default_root_window() width = root_win.get_width() height = root_win.get_height() ims = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) pb = Gdk.pixbuf_get_from_window(root_win, 0, 0, width, height) cr = cairo.Context(ims) Gdk.cairo_set_source_pixbuf(cr, pb, 0, 0) cr.paint() ims.write_to_png("screenshot.png") if __name__ == "__main__": main() ``` 該示例捕獲整個屏幕的快照。 ```py root_win = Gdk.get_default_root_window() ``` 我們通過`Gdk.get_default_root_window()`方法調用獲得了根窗口。 ```py width = root_win.get_width() height = root_win.get_height() ``` 我們確定根窗口的寬度和高度。 ```py ims = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) ``` 空的圖像表面被創建。 它具有根窗口的大小。 ```py pb = Gdk.pixbuf_get_from_window(root_win, 0, 0, width, height) ``` 我們使用`Gdk.pixbuf_get_from_window()`方法調用從根窗口中獲得一個`pixbuf`。 `pixbuf`是描述內存中圖像的對象。 GTK 庫使用它。 ```py cr = cairo.Context(ims) Gdk.cairo_set_source_pixbuf(cr, pb, 0, 0) cr.paint() ``` 在上述代碼行中,我們在之前創建的圖像表面上創建了 Cairo 繪圖上下文。 我們將 pixbuf 放在繪圖上下文上并將其繪制在表面上。 ```py ims.write_to_png("screenshot.png") ``` 使用`write_to_png()`方法將圖像表面寫入 PNG 圖像。 ## 顯示信息 在第三個示例中,我們將在桌面窗口上顯示一條消息。 ```py #!/usr/bin/python ''' ZetCode PyCairo tutorial This code example shows a message on the desktop window. author: Jan Bodnar website: zetcode.com last edited: August 2012 ''' from gi.repository import Gtk, Gdk, Pango import cairo class Example(Gtk.Window): def __init__(self): super(Example, self).__init__() self.setup() self.init_ui() def setup(self): self.set_app_paintable(True) self.set_type_hint(Gdk.WindowTypeHint.DOCK) self.set_keep_below(True) screen = self.get_screen() visual = screen.get_rgba_visual() if visual != None and screen.is_composited(): self.set_visual(visual) def init_ui(self): self.connect("draw", self.on_draw) lbl = Gtk.Label() text = "ZetCode, tutorials for programmers." lbl.set_text(text) fd = Pango.FontDescription("Serif 20") lbl.modify_font(fd) lbl.modify_fg(Gtk.StateFlags.NORMAL,Gdk.color_parse("white")) self.add(lbl) self.resize(300, 250) self.set_position(Gtk.WindowPosition.CENTER) self.connect("delete-event", Gtk.main_quit) self.show_all() def on_draw(self, wid, cr): cr.set_operator(cairo.OPERATOR_CLEAR) cr.paint() cr.set_operator(cairo.OPERATOR_OVER) def main(): app = Example() Gtk.main() if __name__ == "__main__": import signal signal.signal(signal.SIGINT, signal.SIG_DFL) main() ``` 該代碼在根窗口上顯示消息標簽。 ```py self.set_app_paintable(True) ``` 我們將操縱應用窗口,因此我們使其可繪制。 ```py self.set_type_hint(Gdk.WindowTypeHint.DOCK) ``` 實現此窗口提示會刪除窗口邊框和裝飾。 ```py self.set_keep_below(True) ``` 我們始終將應用始終放在根窗口的底部。 ```py screen = self.get_screen() visual = screen.get_rgba_visual() if visual != None and screen.is_composited(): self.set_visual(visual) ``` 我們將屏幕的外觀設置為應用的外觀。 ```py lbl = Gtk.Label() text = "ZetCode, tutorials for programmers." lbl.set_text(text) ``` 我們在應用窗口上放置一個消息標簽。 ```py fd = Pango.FontDescription("Serif 20") lbl.modify_font(fd) lbl.modify_fg(Gtk.StateFlags.NORMAL,Gdk.color_parse("white")) ``` 在 Pango 模塊的幫助下,我們更改了文本的外觀。 ```py def on_draw(self, wid, cr): cr.set_operator(cairo.OPERATOR_CLEAR) cr.paint() cr.set_operator(cairo.OPERATOR_OVER) ``` 我們使用`cairo.OPERATOR_CLEAR`運算符清除窗口背景。 然后我們設置`cairo.OPERATOR_CLEAR`以繪制標簽窗口小部件。 ```py if __name__ == "__main__": import signal signal.signal(signal.SIGINT, signal.SIG_DFL) main() ``` 有一個較舊的[錯誤](https://bugzilla.gnome.org/show_bug.cgi?id=622084),該錯誤不允許我們使用 `Ctrl + C` 快捷方式終止從終端啟動的應用。 為此添加兩行是一種解決方法。 ![Message on the root window](https://img.kancloud.cn/9f/c8/9fc81ce2659970758e6bd8a2639f39c6_545x126.jpg) 圖:根窗口上的消息 在本章中,我們使用了 PyCairo 中的桌面窗口。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看