我正在编写一个需要用户登录的 UI。登录本身最多可能需要 10 秒。登录后,对下载和填充 TreeView 的函数进行了长时间调用。我尝试使用glib.timeout_add()
as 在调用登录名和函数时不锁定 UI,populatelist()
但 gtk.main() 仍将其锁定。
def connect(self, widget, data):
self.debug("Logging in")
glib.timeout_add(500, self.login)
self.debug("Logged in")
def login(self):
self.debug("Starting self.gm.doLogin")
logged_in = self.gm.doLogin(self.email, self.password)
self.debug("Finsished self.gm.doLogin")
if self.gm.logged_in:
if self.connect_button.get_label() == "Connecting":
self.debug("Getting SongWin")
glib.timeout_add(500, self.populateSongWin)
self.debug("Getting playLists")
glib.timeout_add(500, self.populatePlaylists)
self.action = "Getting songs"
self.status_label.set_label("Status: %s; Songs: %s; Playlists: %s" %\
(self.gm.logged_in,
len(self.gm.library),
len(self.gm.playlists)))
self.connect_button.set_label("Disconnect")
self.connect_button.set_sensitive(True)
self.action = "None"
return False
我知道这以某种方式起作用,因为我可以看到:
DEBUG: Logging in
DEBUG: Logged in
DEBUG: Starting self.gm.doLogin
谁能告诉我我做错了什么?本质上,应用程序需要按以下顺序运行:
- self.gm.doLogin()
- self.populateSongWin()
- self.populatePlaylists()
这三个都很耗时,需要按顺序运行,并且不会阻塞 UI。