想知道是否有人可以提供帮助。 我正在使用Python,AppJar,SQL。 在我从appjar调用一个名为login.go()的函数后,它启动了一个GUI。 稍后在代码中我需要一个函数来运行但它从来没有,它也被调用但是为了它工作它需要在login.go()之后,如果我之前把它或之前调用它意味着GUI永远不会发生之后它永远不会运行。香港专业教育学院试图解决多年来没有任何线索,任何帮助都是大量赞赏。这是一些代码。
#////RUNNING CODE\\\\#
'''THE FIRST PART OF CODE TO RUN'''
login.go()
def GetNews (usr):
conn = sqlite3.connect("uHubDatabase3.db")
cursor = conn.cursor() #connects to database
CollectUserNews=("SELECT NewsOpt1 FROM UserTable WHERE Username = ?") #sets
the finding of the username from the database as a varaible
cursor.execute(CollectUserNews,[(usr)])
NewsRemoveSTR = str(cursor.fetchall())
print(NewsRemoveSTR)
removechars = "'(),[]" #Avoids the error of special characters caused by the database outputting strings (Text)
for char in removechars:
NewsRemoveSTR = NewsRemoveSTR.replace(char,'')
NewsLink1=("SELECT Link FROM NewsTable WHERE Name = ?")
cursor.execute(NewsLink1,[(NewsRemoveSTR)])
d = feedparser.parse(NewsLink1)
d['channel']['title']
print (d.feed.title)#Checks it was found durig testing
#Artcile 0 ----------------------------------------------------
home.addLabel("subtitle", (d['entries'][0]['title'] ),1,1)
home.setLabelBg("subtitle", "black")
home.setLabelFg("subtitle", "white")
home.addMessage("para", (d['entries'][0]['description'] ),2,1)
home.setMessageBg("para", "lightgrey")
home.setMessageFg("para", "black")
#Artcile 1 ----------------------------------------------------
home.addLabel("subtitle1", (d['entries'][1]['title'] ),1,0)
home.setLabelBg("subtitle1", "black")
home.setLabelFg("subtitle1", "white")
home.addMessage("para1", (d['entries'][1]['description'] ),2,0)
home.setMessageBg("para1", "lightgrey")
home.setMessageFg("para1", "black")
return (NewsRemoveSTR)
GetNews(usr)
答案 0 :(得分:0)
在GUI关闭之前不会执行login.go()
之后的代码 - 调用login.go()
启动GUI的事件循环,这是tktiner检查事件的地方。
我会在代码顶部定义该函数,然后在GetNews(usr)
之前的行上放置调用login.go()
的行
如果GetNews(usr)
函数调用需要很长时间才能完成(如果数据库有很多表,缺少索引等等),那么在GUI出现之前可能会有相当长的延迟
如果永远不会返回GetNews(usr)
函数调用,则GUI将永远不会显示。
您可以,将对GetNews(usr)
的调用放入线程,以便GUI可以启动,并且该函数在后台运行。
请点击此处了解详情:http://appjar.info/pythonThreads/
它看起来像:login.thread(GetNews, usr)
NB。从线程更新GUI是有风险的。将所有GUI更新放入线程安全调用中会更安全,例如login.queueFunction(home.updateLabel, "l1", "new label text")