对话窗口中的标签不会更新每个版本的点击按钮主窗口(PyQt)

问题描述:

我在GUI中使用QtDesigner(在eric4)设计我刚做了一个Qlabel作为占位符,用于更新最新的ID可以访问我正在构建的SQLite数据库。我希望它setlabel改变到在ID主键可用的下一个时隙,所以我由在单独的py文件中的类和DEF:对话窗口中的标签不会更新每个版本的点击按钮主窗口(PyQt)

class AccessMem: 
def LastRowID(self): 
    con = sqlite3.connect("Members.db") #access database 
    cur = con.cursor() #cursor object for database 

    #created if first time to make a table 
    try: 
     cur.execute('create table Members (ID integer primary key autoincrement not null, Nick string not null, NameFirst string, NameMiddle string, NameLast string, BirthMonth string, BirthDay string, BirthYear string, ContactNum string, EMail string, MailAdd string, MemberSince string)') 
    except: 
     pass 

    #only to get the value of NextID to display 
    TempNick = "ThisIsADummyNickToBeDeleted"   
    cur.execute("insert into Members (Nick) values (?)", (TempNick,)) 
    NextID = cur.lastrowid 
    cur.execute("delete from Members where ID = ?", (NextID,)) 

    return NextID 
    cur.close() 
    con.close() 

我然后修改的编译UI形式和加入这些在顶部(其中AccessMem功能的单独的PY文件memberinfo.py):

from memberinfo import * 

IDL = AccessMem() 
IDLabel = `IDL.LastRowID()` 

然后,我已经改变了def retranslateUi部分,其中显示必须改成这样:

self.ID_Number.setText(IDLabel) 

,以便它在对话窗口打开时显示。

问题是,无论何时运行程序并在主窗口中启动该对话框窗口,ID_Number的显示都不会在对话框窗口中更新。每当我关闭程序时,再次运行它,然后再次在主窗口上单击以启动对话框窗口,将ID_Number显示更新。

以防万一,这里是在主窗口中,我加入到启动对话窗口的对话框代码的部分:在上面我说:

from ui.newmember import NewMember 

然后在使用addMember点击事件:

def on_AddMember_clicked(self): 
    """ 
    Slot documentation goes here. 
    """ 
    # Open New Member window 
    self.NM = NewMember() 
    self.NM.show() 

NewMember是ui文件夹中newmember.py中类的名称。

请注意,在NewMember对话窗口中,它基本上为sqlite数据库添加了一组新的数据。以下是该事件的对话编码的部分如果单击保存按钮:

def on_button_Save_released(self): 
    """ 
    Slot documentation goes here. 
    """ 
    Nik = unicode(self.LineEdit_Nickname.text()) 
    NFirst = unicode(self.LineEdit_NameFirst.text()) 
    NMid = unicode(self.LineEdit_NameMiddle.text()) 
    NLast = unicode(self.LineEdit_NameLast.text()) 
    BMon = unicode(self.ComboBox_BirthMonth.currentText()) 
    BDay = unicode(self.ComboBox_BirthDay.currentText()) 
    BYear = unicode(self.ComboBox_BirthYear.currentText()) 
    CNum = unicode(self.LineEdit_ContactNum.text()) 
    EM = unicode(self.LineEdit_EMail.text()) 
    MAd = unicode(self.LineEdit_MailAdd.text()) 

    self.NMem = NewMem() 
    self.NMem.input_data(Nik, NFirst, NMid, NLast, BMon, BDay, BYear, CNum, EM, MAd) 
    self.close() 

的input_data方法是在一个单独的PY文件是这样的:

class NewMem: 
def input_data(self, Nik, NFirst, NMid, NLast, BMon, BDay, BYear, CNum, EM, MAd): 

    con = sqlite3.connect("Members.db") #access database 
    cur = con.cursor() #cursor object for database 

    def adapt_datetime(ts): 
     return time.mktime(ts.timetuple()) 

    #Get current time and date 
    sqlite3.register_adapter(datetime.datetime, adapt_datetime) 
    now = datetime.datetime.now() 

    #created if first time to make a table 
    try: 
     cur.execute('create table Members (ID integer primary key autoincrement not null, Nick string not null, NameFirst string, NameMiddle string, NameLast string, BirthMonth string, BirthDay string, BirthYear string, ContactNum string, EMail string, MailAdd string, MemberSince string)') 
    except: 
     pass 

    cur.execute("insert into Members (Nick,NameFirst,NameMiddle,NameLast,BirthMonth,BirthDay,BirthYear,ContactNum,EMail,MailAdd,MemberSince) values (?,?,?,?,?,?,?,?,?,?,?)",(Nik, NFirst, NMid, NLast, BMon, BDay, BYear, CNum, EM, MAd, now)) 

    con.commit() 
    cur.close() 
    con.close() 

所以当NewMember对话窗口的单击“保存”按钮,关闭窗口,sqlite插入新的数据集。然后在主窗口中的按钮启动NewMember窗口,IDLabel必须更新为最新的行ID,但它仍然没有自行更新。

有没有可能问如何解决这个问题?任何帮助,非常感谢深深的蝴蝶结

好吧,我最终在休息和睡觉后找到解决方案。

我只是做在编译的UI形式,其中这些

IDL = AccessMem() 
IDLabel = `IDL.LastRowID()` 

首先在最上面的一些改变,我把它现在的def retranslateUi里面的方法,它现在的作品。