SQL和调用函数

时间:2018-01-23 19:48:29

标签: python function sqlite

想知道是否有人可以提供帮助。 我正在使用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)

1 个答案:

答案 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")