Ruby Gtk3 Progress Bar текст - PullRequest
       28

Ruby Gtk3 Progress Bar текст

0 голосов
/ 02 октября 2018

В Ruby Gem для Gtk2 следующий код будет печатать текст внутри индикаторов выполнения (без CSS):

class FractionalCalendar
  def initialize
    @texts=[]
    @lasttexts=[]
    @win=Window.new
    @win.title="Fractional Calendar"
    @win.add(vb=VBox.new)
     vb.add(@hp=ProgressBar.new)
     vb.add(@dp=ProgressBar.new)
     vb.add(@wp=ProgressBar.new)
     vb.add(@mp=ProgressBar.new)
     vb.add(@yp=ProgressBar.new)
    @win.signal_connect("destroy"){quit}
    @win.move(0,576)
    @win.set_default_size(1024,192)
    @win.show_all
  end
  def update
    t=Time.now
    @texts=[sprintf("Hour %0.2f\%",t.hourfrac*100),
            sprintf("Day %0.3f\%",t.dayfrac*100),
            sprintf("Week %0.3f\%",t.weekfrac*100),
            sprintf("Month %0.4f\%",t.monthfrac*100),
            sprintf("Year %0.5f\%",t.yearfrac*100),
           ]
    if @texts!=@lasttexts
      @hp.fraction=t.hourfrac
      @hp.text=@texts[0]
      @dp.fraction=t.dayfrac
      @dp.text=@texts[1]
      @wp.fraction=t.weekfrac
      @wp.text=@texts[2]
      @mp.fraction=t.monthfrac
      @mp.text=@texts[3]
      @yp.fraction=t.yearfrac
      @yp.text=@texts[4]
      @lasttexts=@texts
    end
    true
  end
  def run
    update
    Gtk.timeout_add(72){update}
    Gtk.main
  end
  def quit; Gtk.main_quit; end
end

С тех пор я обновил код до Gtk3.Мне удалось справиться с большинством проблем, но теперь у меня возникают проблемы с отображением текста внутри индикатора выполнения.Вместо этого он отображается поверх каждого индикатора выполнения.

Текущий код:

class FractionalCalendar
  def initialize
    @texts=[]
    @lasttexts=[]
    @win=Gtk::Window.new
    @win.title="Fractional Calendar"
    @win.add(vb=Gtk::Box.new(:vertical, 10))
    vb.add(@hp=Gtk::ProgressBar.new)
    @hp.style_context.add_provider(css_provider, Gtk::StyleProvider::PRIORITY_USER)
    vb.add(@dp=Gtk::ProgressBar.new)
    @dp.style_context.add_provider(css_provider, Gtk::StyleProvider::PRIORITY_USER)
    vb.add(@wp=Gtk::ProgressBar.new)
    @wp.style_context.add_provider(css_provider, Gtk::StyleProvider::PRIORITY_USER)
    vb.add(@mp=Gtk::ProgressBar.new)
    @mp.style_context.add_provider(css_provider, Gtk::StyleProvider::PRIORITY_USER)
    vb.add(@yp=Gtk::ProgressBar.new)
    @yp.style_context.add_provider(css_provider, Gtk::StyleProvider::PRIORITY_USER)
    @win.signal_connect("destroy"){quit}
    @win.move(0,576)
    @win.set_default_size(1024,192)
    @win.show_all
  end
  def update
    t=Time.now
    @texts=[sprintf("Hour %0.2f\%",t.hourfrac*100),
          sprintf("Day %0.3f\%",t.dayfrac*100),
          sprintf("Week %0.3f\%",t.weekfrac*100),
          sprintf("Month %0.4f\%",t.monthfrac*100),
          sprintf("Year %0.5f\%",t.yearfrac*100),
          ]
    if @texts!=@lasttexts
      @hp.fraction=t.hourfrac
      @hp.show_text = true
      @hp.text=@texts[0]
      @dp.fraction=t.dayfrac
      @dp.show_text = true
      @dp.text=@texts[1]
      @wp.fraction=t.weekfrac
      @wp.show_text = true
      @wp.text=@texts[2]
      @mp.fraction=t.monthfrac
      @mp.show_text = true
      @mp.text=@texts[3]
      @yp.fraction=t.yearfrac
      @yp.show_text = true
      @yp.text=@texts[4]
      @lasttexts=@texts
    end
    true
  end
  def run
    update
    GLib::Timeout.add(72){update}
    Gtk.main
  end
  def quit; Gtk.main_quit; end

end

Код CSS:

progress, trough {
  min-height: 30px;
  font-size: 12px;
}
text {
  color: black;
}

У меня такой вопрос:

Как я могу получить текст для отображения внутри индикатора выполнения, как это было раньше?Самое близкое, что я получил к настоящему времени, - это оставить впадину небольшим, а прогресс - большим.Кажется, текст привязан к верхней части желоба.

Заранее спасибо.

...