Если я использую .set_text() и .set_fraction() методы от уровня модуля, все успешно.PyGObject: Невозможно управлять прогрессбар
Но если я это сделаю из функции или отправив объект другому модулю, ничего не произойдет.
Я использую Glade. Я написал программу в течение 5 минут. Glade:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<interface>
<requires lib="gtk+" version="3.10"/>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
<object class="GtkProgressBar" id="progressbar1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="fraction">0.0</property>
<property name="pulse_step">0.10</property>
<property name="show_text">True</property>
</object>
</child>
</object>
<object class="GtkWindow" id="window2">
<property name="can_focus">False</property>
<child>
<object class="GtkButton" id="button1">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
</child>
</object>
</interface>
Очень страшный сценарий Python:
from gi.repository import Gtk
import time
def go(*args):
progress.set_text("Progress...")
for did in range(100):
progress.set_fraction(did/100)
time.sleep(0.1)
builder = Gtk.Builder()
builder.add_from_file("test.glade")
win = builder.get_object("window1")
win2 = builder.get_object("window2")
win.connect("destroy", Gtk.main_quit)
progress = win.get_child()
button = win2.get_child()
button.connect("clicked", go)
win.show_all()
win2.show_all()
Gtk.main()
UPD1: Мои шаги:
- Я нажатием кнопки
- proggressbar пребывания в старой позиции
- Когда цикл завершен, обновленная панель прогресса тес
UPD2:video
Ваша основная проблема заключается в том, что вы не увеличиваете 'did' в своем цикле, также что вы выполняете целочисленное деление, которое всегда будет оцениваться до нуля, а' did <100'. Измените на '(did/100.0)', чтобы заставить float. Это все равно не будет обновлять progbar до конца, хотя вам нужно использовать 'idle_add', возможно, для этого. – SiHa
@SiHa, я использую Python3 –
Хорошо, что будет увеличиваться, не сообщая об этом? – SiHa