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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # PyGTK 中的高級小部件 > 原文: [http://zetcode.com/gui/pygtk/advancedwidgets/](http://zetcode.com/gui/pygtk/advancedwidgets/) 在 PyGTK 編程教程的這一部分中,我們將介紹 PyGTK 中的一些更高級的小部件。 ## `IconView` `IconView`是一個小部件,在網格中顯示圖標列表。 `iconview.py` ```py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example demonstrates the IconView widget. # It shows the contents of the currently selected # directory on the disk. # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk import os COL_PATH = 0 COL_PIXBUF = 1 COL_IS_DIRECTORY = 2 class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_size_request(650, 400) self.set_position(gtk.WIN_POS_CENTER) self.connect("destroy", gtk.main_quit) self.set_title("IconView") self.current_directory = '/' vbox = gtk.VBox(False, 0); toolbar = gtk.Toolbar() vbox.pack_start(toolbar, False, False, 0) self.upButton = gtk.ToolButton(gtk.STOCK_GO_UP); self.upButton.set_is_important(True) self.upButton.set_sensitive(False) toolbar.insert(self.upButton, -1) homeButton = gtk.ToolButton(gtk.STOCK_HOME) homeButton.set_is_important(True) toolbar.insert(homeButton, -1) self.fileIcon = self.get_icon(gtk.STOCK_FILE) self.dirIcon = self.get_icon(gtk.STOCK_DIRECTORY) sw = gtk.ScrolledWindow() sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) vbox.pack_start(sw, True, True, 0) self.store = self.create_store() self.fill_store() iconView = gtk.IconView(self.store) iconView.set_selection_mode(gtk.SELECTION_MULTIPLE) self.upButton.connect("clicked", self.on_up_clicked) homeButton.connect("clicked", self.on_home_clicked) iconView.set_text_column(COL_PATH) iconView.set_pixbuf_column(COL_PIXBUF) iconView.connect("item-activated", self.on_item_activated) sw.add(iconView) iconView.grab_focus() self.add(vbox) self.show_all() def get_icon(self, name): theme = gtk.icon_theme_get_default() return theme.load_icon(name, 48, 0) def create_store(self): store = gtk.ListStore(str, gtk.gdk.Pixbuf, bool) store.set_sort_column_id(COL_PATH, gtk.SORT_ASCENDING) return store def fill_store(self): self.store.clear() if self.current_directory == None: return for fl in os.listdir(self.current_directory): if not fl[0] == '.': if os.path.isdir(os.path.join(self.current_directory, fl)): self.store.append([fl, self.dirIcon, True]) else: self.store.append([fl, self.fileIcon, False]) def on_home_clicked(self, widget): self.current_directory = os.path.realpath(os.path.expanduser('~')) self.fill_store() self.upButton.set_sensitive(True) def on_item_activated(self, widget, item): model = widget.get_model() path = model[item][COL_PATH] isDir = model[item][COL_IS_DIRECTORY] if not isDir: return self.current_directory = self.current_directory + os.path.sep + path self.fill_store() self.upButton.set_sensitive(True) def on_up_clicked(self, widget): self.current_directory = os.path.dirname(self.current_directory) self.fill_store() sensitive = True if self.current_directory == "/": sensitive = False self.upButton.set_sensitive(sensitive) PyApp() gtk.main() ``` 本示例顯示當前所選目錄的圖標。 它有一個工具欄和兩個按鈕。 向上按鈕和主頁按鈕。 我們使用它們來瀏覽文件系統。 ```py self.current_directory = '/' ``` `current_directory`是目錄,由`IconView`小部件顯示。 ```py def create_store(self): store = gtk.ListStore(str, gtk.gdk.Pixbuf, bool) store.set_sort_column_id(COL_PATH, gtk.SORT_ASCENDING) return store ``` `create_store()`方法創建一個`ListStore`。 它是`IconView`小部件中使用的數據模型。 它帶有三個參數。 目錄名,圖標的`pixbuf`圖像和`bool`變量,指示我們是目錄還是文件。 ```py if not fl[0] == '.': if os.path.isdir(os.path.join(self.current_directory, fl)): self.store.append([fl, self.dirIcon, True]) else: self.store.append([fl, self.fileIcon, False]) ``` 在`fill_store()`方法中,我們用數據填充列表存儲。 在這里,我們找出當前路徑中的所有目錄。 我們排除以`.`開頭的不可見目錄。 ```py def on_home_clicked(self, widget): self.current_directory = os.path.realpath(os.path.expanduser('~')) self.fill_store() self.upButton.set_sensitive(True) ``` 如果單擊主頁按鈕,則主頁目錄將成為當前目錄。 我們重新填充列表存儲。 并激活向上按鈕。 在`on_item_activated()`方法中,當我們從圖標視圖小部件中單擊一個圖標時,我們會對生成的事件做出反應。 ```py model = widget.get_model() path = model[item][COL_PATH] isDir = model[item][COL_IS_DIRECTORY] if not isDir: return ``` 我們得到激活項目的路徑。 然后我們確定它是目錄還是文件。 如果是文件,我們返回。 ```py self.current_directory = self.current_directory + os.path.sep + path self.fill_store() self.upButton.set_sensitive(True) ``` 如果是目錄,我們將根目錄替換為當前路徑,重新填充商店,然后使向上按鈕敏感。 ```py def on_up_clicked(self, widget): self.current_directory = os.path.dirname(self.current_directory) self.fill_store() sensitive = True if self.current_directory == "/": sensitive = False self.upButton.set_sensitive(sensitive) ``` 如果單擊向上按鈕,則將當前目錄替換為其父目錄。 重新填充列表存儲。 如果我們在文件系統的根`/`目錄下,則向上按鈕被激活。 ![IconView](https://img.kancloud.cn/2e/56/2e5687f749ae33ac0ba6da1c4e04f964_379x245.jpg) 圖:`IconView` ## `ListView` 在下面的示例中,我們使用`TreeView`小部件顯示列表視圖。 同樣`ListStore`用于存儲數據。 `listview.py` ```py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example shows a TreeView widget # in a list view mode # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk actresses = [('jessica alba', 'pomona', '1981'), ('sigourney weaver', 'new york', '1949'), ('angelina jolie', 'los angeles', '1975'), ('natalie portman', 'jerusalem', '1981'), ('rachel weiss', 'london', '1971'), ('scarlett johansson', 'new york', '1984' )] class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_size_request(350, 250) self.set_position(gtk.WIN_POS_CENTER) self.connect("destroy", gtk.main_quit) self.set_title("ListView") vbox = gtk.VBox(False, 8) sw = gtk.ScrolledWindow() sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) vbox.pack_start(sw, True, True, 0) store = self.create_model() treeView = gtk.TreeView(store) treeView.connect("row-activated", self.on_activated) treeView.set_rules_hint(True) sw.add(treeView) self.create_columns(treeView) self.statusbar = gtk.Statusbar() vbox.pack_start(self.statusbar, False, False, 0) self.add(vbox) self.show_all() def create_model(self): store = gtk.ListStore(str, str, str) for act in actresses: store.append([act[0], act[1], act[2]]) return store def create_columns(self, treeView): rendererText = gtk.CellRendererText() column = gtk.TreeViewColumn("Name", rendererText, text=0) column.set_sort_column_id(0) treeView.append_column(column) rendererText = gtk.CellRendererText() column = gtk.TreeViewColumn("Place", rendererText, text=1) column.set_sort_column_id(1) treeView.append_column(column) rendererText = gtk.CellRendererText() column = gtk.TreeViewColumn("Year", rendererText, text=2) column.set_sort_column_id(2) treeView.append_column(column) def on_activated(self, widget, row, col): model = widget.get_model() text = model[row][0] + ", " + model[row][1] + ", " + model[row][2] self.statusbar.push(0, text) PyApp() gtk.main() ``` 在我們的示例中,我們在`TreeView`小部件中顯示了六個女演員的列表。 每行分別顯示名稱,出生地和出生年份。 ```py def create_model(self): store = gtk.ListStore(str, str, str) for act in actresses: store.append([act[0], act[1], act[2]]) return store ``` 在`create_model()`方法中,我們創建列表存儲。 列表存儲具有三個參數。 女演員的名字,出生地和出生年份。 這是我們的`TreeView`小部件的數據模型。 ```py treeView = gtk.TreeView(store) treeView.connect("row-activated", self.on_activated) treeView.set_rules_hint(True) ``` 在這里,我們以列表存儲為參數創建`TreeView`小部件。 `set_rules_hint()`方法更改`TreeView`小部件中每第二行的背景顏色。 ```py rendererText = gtk.CellRendererText() column = gtk.TreeViewColumn("Name", rendererText, text=0) column.set_sort_column_id(0) treeView.append_column(column) ``` 在`create_columns()`方法中,我們向`TreeView`小部件中添加了三列。 上面的代碼創建了一個顯示女演員姓名的列。 `CellRendererText`從樹模型的第一列檢索其文本。 (文本`= 0`) ```py def on_activated(self, widget, row, col): model = widget.get_model() text = model[row][0] + ", " + model[row][1] + ", " + model[row][2] self.statusbar.push(0, text) ``` 如果雙擊某個項目,則會在狀態欄中顯示整行。 ![ListView](https://img.kancloud.cn/00/29/002960bc91c3764ce83aa76165d5e1da_358x278.jpg) 圖:`ListView` ## `TreeView` 在本章的最后一個示例中,我們使用`TreeView`小部件顯示分層的數據樹。 `tree.py` ```py #!/usr/bin/python # ZetCode PyGTK tutorial # # This example shows a TreeView widget # in a tree view mode # # author: jan bodnar # website: zetcode.com # last edited: February 2009 import gtk class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_size_request(400, 300) self.set_position(gtk.WIN_POS_CENTER) self.connect("destroy", gtk.main_quit) self.set_title("Tree") tree = gtk.TreeView() languages = gtk.TreeViewColumn() languages.set_title("Programming languages") cell = gtk.CellRendererText() languages.pack_start(cell, True) languages.add_attribute(cell, "text", 0) treestore = gtk.TreeStore(str) it = treestore.append(None, ["Scripting languages"]) treestore.append(it, ["Python"]) treestore.append(it, ["PHP"]) treestore.append(it, ["Perl"]) treestore.append(it, ["Ruby"]) it = treestore.append(None, ["Compiling languages"]) treestore.append(it, ["C#"]) treestore.append(it, ["C++"]) treestore.append(it, ["C"]) treestore.append(it, ["Java"]) tree.append_column(languages) tree.set_model(treestore) self.add(tree) self.show_all() PyApp() gtk.main() ``` 這次我們使用`TreeView`小部件顯示分層數據。 ```py tree = gtk.TreeView() ``` `TreeView`小部件已創建。 ```py languages = gtk.TreeViewColumn() languages.set_title("Programming languages") ``` 它有一列名為`"Programming languages"`。 ```py cell = gtk.CellRendererText() languages.pack_start(cell, True) languages.add_attribute(cell, "text", 0) ``` 我們在`TreeView`小部件中顯示文本數據。 ```py treestore = gtk.TreeStore(str) ``` 要存儲數據,我們使用`TreeStore`對象。 ```py it = treestore.append(None, ["Scripting languages"]) treestore.append(it, ["Python"]) treestore.append(it, ["PHP"]) ``` 我們將數據附加到樹上。 `TreeIter`對象用于訪問一行中的數據。 ```py tree.append_column(languages) ``` 一列被附加到樹上。 ```py tree.set_model(treestore) ``` 最后,我們為樹小部件設置數據模型。 ![Tree](https://img.kancloud.cn/ec/bc/ecbca76fd4092d627c1c09b23d8431e7_408x328.jpg) 圖:`Tree` 在 PyGTK 編程教程的這一章中,我們討論的是高級 PyGTK 小部件。
                  <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>

                              哎呀哎呀视频在线观看