불행히도 응용 프로그램의 주 스레드에서 실행되는 제한되지 않은 while 루프를 가질 수는 없습니다. 그러면 주 gtk event loop이 (가) 차단되어 더 이상 이벤트를 처리 할 수 없습니다. 당신이하고 싶은 것은 스레드를 생성하는 것입니다.
GtkButton
대신 ToggleButton
을 사용하셨습니까? is_clicked
메소드에 가장 가까운 것은 is_active
이며 토글 버튼에서 찾을 수 있습니다.
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 answer : 여기
은 (정기적 버튼을 원하는 경우
Button
와
clicked
와
triggered
및
ToggleButton
교체) 시작 토글 버튼의 상태에 따라 스레드를 제어의 예 도움이됩니다. 건배.
시작 스레딩을위한 함수를 기존 클래스에 넣을 수 있습니까? 일시 중지없이 시작 및 중지 기능 만 만드는 방법은 무엇입니까? – user1257255
스레드를 중지하려면 간단히'thread.stop = True'를 사용하십시오. 스레드가 종료되면 다시 시작할 수 없습니다 (새 스레드를 만들어야 함). – gvalkov
다른 클래스 및 메서드에서 스레드를 시작하고 싶습니다. 그러나 작동하지 않습니다 - http://pastebin.com/xmHqK6Qc. T.run() 메소드에 데이터를 보내거나 Start 클래스의 메소드를 작성하여이 클래스의 메소드로 스레딩을 시작할 수 있습니까? – user1257255