当前位置: 首页 > 文档资料 > PyGTK 教程 >

04 PyGTK 中的工具栏

优质
小牛编辑
128浏览
2023-12-01

在PyGTK教程的这部分,我们将和工具栏一起工作。

在应用程序中,我们可以使用菜单组合命令。而工具栏提供了一个更快捷的方式,来访问使用频率很高的惯用的命令。

Simple toolbar

下面我们创建了一个简单的工具栏

Code:Toolbar.py

#!/usr/bin/python

# ZetCode PyGTK tutorial 
#
# This example shows a toolbar
# widget
#
# 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_title("Toolbar")
        self.set_size_request(250, 200)
        self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(6400, 6400, 6440))
        self.set_position(gtk.WIN_POS_CENTER)

        toolbar = gtk.Toolbar()
        toolbar.set_style(gtk.TOOLBAR_ICONS)

        newtb = gtk.ToolButton(gtk.STOCK_NEW)
        opentb = gtk.ToolButton(gtk.STOCK_OPEN)
        savetb = gtk.ToolButton(gtk.STOCK_SAVE)
        sep = gtk.SeparatorToolItem()
        quittb = gtk.ToolButton(gtk.STOCK_QUIT)

        toolbar.insert(newtb, 0)
        toolbar.insert(opentb, 1)
        toolbar.insert(savetb, 2)
        toolbar.insert(sep, 3)
        toolbar.insert(quittb, 4)
        
        quittb.connect("clicked", gtk.main_quit)

        vbox = gtk.VBox(False, 2)
        vbox.pack_start(toolbar, False, False, 0)

        self.add(vbox)

        self.connect("destroy", gtk.main_quit)
        self.show_all()
        
        
PyApp()
gtk.main()

这个例子展示了一个工具栏,其中包括四个工具按钮。

toolbar = gtk.Toolbar()

一个Toolbar部件被创建。

toolbar.set_style(gtk.TOOLBAR_ICONS)

在工具栏上,我们让它仅仅展示图标,而没有文本。

newtb = gtk.ToolButton(gtk.STOCK_NEW)

一个工具按钮被创建,它包含一个来自stock(gtk内部储备)的图片。

sep = gtk.SeparatorToolItem()

这是一个分隔符,它能将工具栏上的按钮分成逻辑组。

toolbar.insert(newtb, 0)
toolbar.insert(opentb, 1)
...

工具栏按钮被插入到工具栏部件中了。

Figure:Toolbar

Toolbars

在第二个列子中,我们将展示两个工具栏。许多应用程序有超过一个的工具栏。我们将展示在PyGTK我们怎样做到这样。

CodeToolbars.py

#!/usr/bin/python

# ZetCode PyGTK tutorial 
#
# This example shows two toolbars
# in the application window
#
# 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_title("Toolbars")
        self.set_size_request(350, 300)
        self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(6400, 6400, 6440))
        self.set_position(gtk.WIN_POS_CENTER)

        upper = gtk.Toolbar()
        upper.set_style(gtk.TOOLBAR_ICONS)

        newtb = gtk.ToolButton(gtk.STOCK_NEW)
        opentb = gtk.ToolButton(gtk.STOCK_OPEN)
        savetb = gtk.ToolButton(gtk.STOCK_SAVE)

        upper.insert(newtb, 0)
        upper.insert(opentb, 1)
        upper.insert(savetb, 2)

        lower = gtk.Toolbar()
        lower.set_style(gtk.TOOLBAR_ICONS)

        quittb = gtk.ToolButton(gtk.STOCK_QUIT)
        quittb.connect("clicked", gtk.main_quit)
        lower.insert(quittb, 0)
         
        vbox = gtk.VBox(False, 0)
        vbox.pack_start(upper, False, False, 0)
        vbox.pack_start(lower, False, False, 0)

        self.add(vbox)

        self.connect("destroy", gtk.main_quit)
        self.show_all()
        
       
PyApp()
gtk.main()

我们的程序展示了两个工具栏。

upper = gtk.Toolbar()
...
lower = gtk.Toolbar()

我们创建了两个工具栏部件。

upper.insert(newtb, 0)
...
lower.insert(quittb, 0)

它们中的每一个都有自己的工具按钮。

vbox = gtk.VBox(False, 0)
vbox.pack_start(upper, False, False, 0)
vbox.pack_start(lower, False, False, 0)

工具栏被放置进垂直的箱子里,一个接着另一个。

Figure:Toolbars

Undo redo

下面的列子将论证,我们怎样使在工具栏上的按钮变成不活动的状态。在GUI编程中,这是个常规的实践。例如保存按钮。如果我们将文档的所有变化保存到了硬盘,那么保存按钮在大多数的编辑器中会被设置为不活动状态。这种方式是应用程序提示用户,所有的更改都已经被保存了。

Code:ubdoredo.py

#!/usr/bin/python

# ZetCode PyGTK tutorial 
#
# This example shows how to 
# activate/deactivate a ToolButton
#
# 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_title("Toolbar")
        self.set_size_request(250, 200)
        self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(6400, 6400, 6440))
        self.set_position(gtk.WIN_POS_CENTER)
        
        self.count = 2

        toolbar = gtk.Toolbar()
        toolbar.set_style(gtk.TOOLBAR_ICONS)

        self.undo = gtk.ToolButton(gtk.STOCK_UNDO)
        self.redo = gtk.ToolButton(gtk.STOCK_REDO)
        sep = gtk.SeparatorToolItem()
        quit = gtk.ToolButton(gtk.STOCK_QUIT)

        toolbar.insert(self.undo, 0)
        toolbar.insert(self.redo, 1)
        toolbar.insert(sep, 2)
        toolbar.insert(quit, 3)
        
        self.undo.connect("clicked", self.on_undo)
        self.redo.connect("clicked", self.on_redo)
        quit.connect("clicked", gtk.main_quit)

        vbox = gtk.VBox(False, 2)
        vbox.pack_start(toolbar, False, False, 0)

        self.add(vbox)

        self.connect("destroy", gtk.main_quit)
        self.show_all()
        
    def on_undo(self, widget):
        self.count = self.count - 1

        if self.count <= 0:
            self.undo.set_sensitive(False)
            self.redo.set_sensitive(True)

    def on_redo(self, widget):
        self.count = self.count + 1

        if self.count >= 5: 
            self.redo.set_sensitive(False)
            self.undo.set_sensitive(True)
       
PyApp()
gtk.main()

我们从PyGTKstock图片资源中创建了撤销和重做按钮。对每个按钮进行几次点击之后,它们变成不活动状态。按钮呈现为灰色。

self.count = 2

self.count变量决定,哪个按钮是活动的或者不活动的。

self.undo = gtk.ToolButton(gtk.STOCK_UNDO)
self.redo = gtk.ToolButton(gtk.STOCK_REDO)

我们有两个工具按钮,撤销和重做工具按钮。图片来自stock资源。

self.undo.connect("clicked", self.on_undo)
self.redo.connect("clicked", self.on_redo)

我们为两个工具按钮的clicked(点击)信号都连接了一个方法。

if self.count <= 0:
    self.undo.set_sensitive(False)
    self.redo.set_sensitive(True)

为了激活一个部件,我们使用了set_sensitive()方法。

Figure:Undo redo

在PyGTK编程库教程的这章中,我们提到了工具栏。