Мое намерение состояло в том, чтобы использовать основной цикл pyGTK для создания функции, которая блокируется, пока она ждет ввода пользователя. Проблема я столкнулся лучше всего объясняется в коде:Блокировка основного контура PyGTK
#! /usr/bin/python
import gtk
def test():
retval = True
def cb(widget):
retval = False
gtk.main_quit()
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
button = gtk.Button("Test")
button.connect("clicked", cb)
button.show()
window.add(button)
window.show()
gtk.main()
return retval
if __name__ == "__main__":
print test() # prints True when the button is clicked
кажется, что точный порядок инструкций (величина изменения retval
, затем выхода основного цикла) не соблюдается здесь.
Есть ли способ обойти это, или это просто плохой дизайн с моей стороны?
hmm .. Что делать, если я использую 2.6? – int3
Действительно, исправил это, спасибо! PEP, к которому вы привязаны, также предоставляет другое решение (используя класс «Namespace»). Я должен решить, что менее уродливо: P – int3