В 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;
}
У меня такой вопрос:
Как я могу получить текст для отображения внутри индикатора выполнения, как это было раньше?Самое близкое, что я получил к настоящему времени, - это оставить впадину небольшим, а прогресс - большим.Кажется, текст привязан к верхней части желоба.
Заранее спасибо.