Проектирах в GUI с помощта на QtDesigner (в eric4). Току-що направих Qlabel като контейнер, който е предназначен да се актуализира с най-новия идентификатор, който има достъп до SQLite база данни, която изграждам. Искам setlabel да се промени на следващия наличен слот в първичния ключ на ID, така че направих клас и 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()
След това модифицирах компилирания UI формуляр и добавих тези в горната част (където отделният 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
След това при щракнато събитие AddMember:
def on_AddMember_clicked(self):
"""
Slot documentation goes here.
"""
# Open New Member window
self.NM = NewMember()
self.NM.show()
NewMember е името на класа в папката 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 на ред, но той все още не се актуализира.
Би ли било възможно да попитам как да реша това? Всяка помощ е много ценена дълбоко се покланям