Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对话框窗口中的标签不会更新主窗口(PyQt)中每次单击按钮的版本_Python_Sqlite_Pyqt_Qt Designer - Fatal编程技术网

Python 对话框窗口中的标签不会更新主窗口(PyQt)中每次单击按钮的版本

Python 对话框窗口中的标签不会更新主窗口(PyQt)中每次单击按钮的版本,python,sqlite,pyqt,qt-designer,Python,Sqlite,Pyqt,Qt Designer,我使用QtDesigner(在eric4)在GUI中进行了设计,我刚刚制作了一个Qlabel作为占位符,它将使用最新的ID进行更新,该ID可以访问我正在构建的SQLite数据库。我希望它设置标签以更改到ID主键中的下一个可用插槽,因此我在单独的py文件中创建了一个类和def: class AccessMem: def LastRowID(self): con = sqlite3.connect("Members.db") #access database cur = con.cu

我使用QtDesigner(在eric4)在GUI中进行了设计,我刚刚制作了一个Qlabel作为占位符,它将使用最新的ID进行更新,该ID可以访问我正在构建的SQLite数据库。我希望它设置标签以更改到ID主键中的下一个可用插槽,因此我在单独的py文件中创建了一个类和def:

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):

然后我将显示必须更改为以下内容的
def retranslateUi
部分更改为:

self.ID_Number.setText(IDLabel)
以便在对话框窗口即将打开时显示

问题在于,每当我运行程序并在主窗口中为该对话框窗口启动时,对话框窗口中的ID_编号显示不会更新。每当我关闭程序时,再次运行它,然后再次单击主窗口以启动对话框窗口,ID号显示将更新。

为了以防万一,我在主窗口中添加了部分对话框代码以启动对话框窗口:在顶部添加:

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()
输入_数据方法位于单独的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
的方法中,现在它可以工作了

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