Python SQL和调用函数

Python SQL和调用函数,python,function,sqlite,Python,Function,Sqlite,想知道是否有人能帮忙。 我在一起使用Python、AppJar和SQL。 在我从appjar调用一个名为login.go的函数之后,它启动了一个GUI。 在后面的代码中,我需要一个函数来运行,但它从来没有运行过,它也会被调用,但要让它工作,它需要在登录后进行。如果我将它放在前面或在它之前调用它,这意味着GUI永远不会发生,在它之后也不会运行。我试图解决了很久,没有线索,任何帮助都是非常感谢的。这是一些代码 #////RUNNING CODE\\\\# '''THE FIRST PART OF

想知道是否有人能帮忙。 我在一起使用Python、AppJar和SQL。 在我从appjar调用一个名为login.go的函数之后,它启动了一个GUI。 在后面的代码中,我需要一个函数来运行,但它从来没有运行过,它也会被调用,但要让它工作,它需要在登录后进行。如果我将它放在前面或在它之前调用它,这意味着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)
在GUI关闭之前,login.go之后不会执行任何代码-调用login.go会启动GUI的事件循环,这是tktiner检查事件的地方

我将在代码顶部定义函数,然后在login.go之前将调用GetNewsusr的行放在该行上

如果GetNewsusr函数调用需要很长时间才能完成,如果DB有很多表,缺少索引,等等,那么在GUI显示之前可能会有相当长的延迟

如果GetNewsusr函数调用从未返回,那么GUI将永远不会显示

您可以将对GetNewsusr的调用放入一个线程中,这样GUI就可以启动,并且函数可以在后台运行

有关更多信息,请查看此处:

它看起来像:login.threadGetNews,usr


注意。从线程更新GUI是有风险的。您可以更安全地将所有GUI更新放入线程安全调用中,例如login.queueFunctionhome.updateLabel、l1、new label text

,并且通常不清楚您期望的内容和得到的内容。@Murphy很抱歉响应太晚,我的问题是,如果函数在login.go之后运行,则该函数永远不会运行,这是一个函数,但如果函数在login.go之前运行,则该函数永远不会运行。很奇怪。当函数运行时,它会收集一个web url来制作一个RSS提要,并将其添加到吉他中。谢谢,我将在早上对此进行研究,但这应该会有很大帮助。