Python GTK 3 GUI 编程 -- 008 进度条 和旋转控件

进度条

什么是进度条

进度条

上面的就是进度条
下面是两个按钮, 控制他的进度, 增加 10% 和 降低 10%

创建

self.progress_bar = Gtk.ProgressBar()

上面示例的实现

import gi
gi.require_version("Gtk", "3.0")

from gi.repository import Gtk


class MyWindow(Gtk.Window):
    def __init__(self):
        super(MyWindow, self).__init__(title="Stack And Stack Switch")

        self.main_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.add(self.main_box)

        self.sub_box = Gtk.Box()
        self.progress = Gtk.ProgressBar(fraction=0.6)
        self.btn_inc = Gtk.Button(label="Inc 10%")
        self.btn_dec = Gtk.Button(label="Dec 10%")

        self.main_box.pack_start(self.progress, True, False, 0)
        self.main_box.pack_start(self.sub_box, True, False, 0)
        self.sub_box.pack_start(self.btn_inc, True, True, 0)
        self.sub_box.pack_start(self.btn_dec, True, True, 0)

        self.btn_inc.connect("clicked", self.on_click)
        self.btn_dec.connect("clicked", self.on_click)

    def on_click(self, widget):
        label = widget.get_label()
        if label == "Inc 10%":
            self.progress.set_fraction(self.progress.get_fraction() + 0.1)
        else:
            self.progress.set_fraction(self.progress.get_fraction() - 0.1)


win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

常用属性

  • text 在进度条上显示的文字
  • ellipsize 省略, 当进度条长度不足以显示文字时省略, 接受Pango.EllipsizeMode(前面讲标签时说过)
  • fraction 进度 0 - 1 float
  • show_text 是否展示文字 bool
  • pause_step

常用方法

  • pause() 暂停进度条

配合pause_step使用
每次调用 pause() 进度条向前移动 pause_step个长度

  • 其他都是设置属性的方法

旋转控件 (spinner)

什么是Spinner

Spinner 1
Spinner 2

上面的是spinner, 下面用了一个toggle button 来控制是否旋转

创建

self.spinner = Gtk.Spinner()

上面示例的实现

import gi
gi.require_version("Gtk", "3.0")

from gi.repository import Gtk


class MyWindow(Gtk.Window):
    def __init__(self):
        super(MyWindow, self).__init__(title="Stack And Stack Switch")

        self.spinner = Gtk.Spinner()
        self.toggle = Gtk.ToggleButton(label="Toggle Spin")
        self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.box.pack_start(self.spinner, True, True, 0)
        self.box.pack_start(self.toggle, True, False, 0)
        self.add(self.box)

        self.toggle.connect("toggled", self.on_toggle)

    def on_toggle(self, widget):
        active = widget.get_active()
        if active:
            self.spinner.start()
        else:
            self.spinner.stop()


win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

属性

  • 只有一个
  • active 是否旋转 bool

方法

  • 只有两个
  • start() 开始
  • stop() 停止

这里通常会用到定时器, 以后讲

欢迎留言, 下篇文章讲数据展示 Treeview

你可能感兴趣的:(Python GTK 3 GUI 编程 -- 008 进度条 和旋转控件)