Я разработал графический интерфейс с использованием 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 должен быть обновлен до последнего идентификатора строки, но он все еще не обновился.
Можно ли спросить, как это решить? Любая помощь приветствуется низкий поклон