我有一個腳本,我寫出了對gkt和cmd的helloworld的修改。正在使用python線程與gtk,和CMD好嗎?
#!/usr/bin/python
import cmd
from gi.repository import Gtk
import threading
class GtkInterface(object):
def __init__(self):
win = Gtk.Window()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
self.window = win;
def create_button(self):
self.button = Gtk.Button(label="Click Here")
self.button.connect("clicked", self.on_button_clicked)
self.window.add(self.button)
self.window.show_all()
def on_button_clicked(self, widget):
print 'something happened'
return
class HelloWorld(cmd.Cmd):
#Simple command processor example.
prompt='>'
def __init__(self, gtk_object):
cmd.Cmd.__init__(self)
# or cmd.Cmd.__init__(self)
self.gtk_object = gtk_object
def do_greet(self, line):
print "hello"
def do_setbutton(self, line):
self.gtk_object.create_button()
def do_exit(self, line):
return True
gtk_o = GtkInterface()
hello = HelloWorld(gtk_o)
def worker(num):
"""thread worker function"""
#print 'Worker: %s' % num
hello.cmdloop()
return
def worker2(num):
Gtk.main()
threads = []
t = threading.Thread(target=worker, args=(1,))
threads.append(t)
t2 = threading.Thread(target=worker2, args=(2,))
threads.append(t2)
if __name__ == '__main__':
#HelloWorld().cmdloop()
#Gtk.main()
t.start()
t2.start()
This works。我想知道的是這可以嗎?是否有問題需要注意?這是我第一次嘗試這個,所以對我來說有很多未知數。我明白,cmd和gtk都是阻塞的。到目前爲止,Gtk.main和cmd循環完美無缺。我只是謹小慎微。
我第一次使用線程。當cmd獲得設置按鈕的命令時,該按鈕被設置。當按鈕被點擊'發生了什麼'打印。命令行繼續,好像沒有什麼不尋常的事情發生。我真的很驚訝它是如何無縫運作的。但我仍然有點擔心。
這只是爲了保持執行順序嗎?就像某個線程正在運行,但其他一些所需的數據尚未從另一個線程產生? –
我試着將Gtk主循環移動到主線程,並且它工作得更好。出現了另一個解決的問題。切換接受的答案。 –