Python & PyGTK: остановка при нажатии кнопки

Я работаю над программированием некоторого приложения, и я хотел бы создать цикл while, когда нажимается кнопка, и если он снова щелкнет, чтобы остановить его. Это код для кнопки:

self.btnThisOne = gtk.Button("This one") self.btnThisOne.connect("clicked", self.startLoop) 

Код для startLoop def будет:

  • Как изменить цвет кнопки с помощью tkinter
  • Python tkinter создает кнопки для аргументов командной строки для прохождения цикла
  • Как сделать кнопки в python / pygame?
  • Переопределение кнопки кнопки Tkinter «X» (кнопка, закрывающая окно)
  • PyQt4 - Перетаскивание
  • Изображение на кнопке
  •  def startLoop(self): while self.btnThisOne?(is_clicked)?: #do something 

    Как это сделать?

  • Как получить информацию о сетке от нажатой кнопки в tkinter?
  • Переопределение кнопки кнопки Tkinter «X» (кнопка, закрывающая окно)
  • Как изменить текст метки Tkinter при нажатии кнопки
  • Как я могу создать несколько кнопок отправки django?
  • Как создать кнопку на холсте tkinter?
  • Изображение на кнопке
  • One Solution collect form web for “Python & PyGTK: остановка при нажатии кнопки”

    К сожалению, вы не можете просто использовать неограниченный цикл while в основном потоке вашего приложения. Это блокирует основной цикл событий gtk, и вы не сможете обрабатывать больше событий. То, что вы, вероятно, хотите сделать, это создать поток.

    GtkButton ли вы использование ToggleButton вместо GtkButton ? Самое близкое к методу is_active и вы найдете это в кнопках переключения.

    Ниже приведен пример запуска и управления потоком в зависимости от состояния кнопки переключения (заменить кнопку с Button ToggleButton на Button если вы хотите использовать обычную кнопку):

     import gtk, gobject, threading, time gobject.threads_init() window = gtk.Window() button = gtk.ToggleButton('Start Thread') class T(threading.Thread): pause = threading.Event() stop = False def start(self, *args): super(T, self).start() def run(self): while not self.stop: self.pause.wait() gobject.idle_add(self.rungui) time.sleep(0.1) def rungui(self): pass # all gui interaction should happen here thread = T() def toggle_thread(*args): if not thread.is_alive(): thread.start() thread.pause.set() button.set_label('Pause Thread') return if thread.pause.is_set(): thread.pause.clear() button.set_label('Resume Thread') else: thread.pause.set() button.set_label('Pause Thread') button.connect('toggled', toggle_thread, None) window.add(button) button.show() window.show() gtk.main() 

    Ответ на PyGTK FAQ может оказаться полезным. Приветствия.

    Python - лучший язык программирования в мире.