Ярлык в диалоговом окне не обновляется при каждом нажатии кнопки Главное окно (PyQt)

Я разработал графический интерфейс с использованием QtDesigner (на eric4). Я только что сделал Qlabel в качестве заполнителя, который предназначен для обновления с использованием последнего идентификатора, имеющего доступ к базе данных SQLite, которую я создаю. Я хочу, чтобы setlabel переходил к следующему слоту, доступному в первичном ключе ID, поэтому я сделал class и def в отдельном файле py:

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

Затем я изменил скомпилированную форму пользовательского интерфейса и добавил их вверху (где отдельный файл py для функции AccessMem - 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

Затем в событии Clicked AddMember:

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

NewMember - это имя класса в файле newmember.py в папке ui.

Просто отметим также, что в диалоговом окне 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 должен быть обновлен до последнего идентификатора строки, но он все еще не обновился.

Можно ли спросить, как это решить? Любая помощь приветствуется низкий поклон


person hyoumoku    schedule 01.03.2011    source источник


Ответы (1)


Хорошо, я нашел решение после того, как немного отдохнул и поспал.

Я только что внес некоторые изменения в скомпилированную форму пользовательского интерфейса, где эти

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

были сначала на самом верху, теперь я помещаю его в метод def retranslateUi, и теперь он работает.

person hyoumoku    schedule 02.03.2011