import sys,pickle,time from PyQt4 import QtGui, QtCore f = open("contacts.txt","rb") try: contacts = pickle.loads(f.read()) print("1") except: print("2") contacts = {} finally: f.close() class New(QtGui.QDialog): def __init__(self,parent=None): global nvar,cvar,wvar,ovar QtGui.QDialog.__init__(self,parent) self.initUI() nvar = False cvar = False wvar = False ovar = False def initUI(self): self.name = QtGui.QPushButton("Name",self) self.name.clicked.connect(self.Name) self.fname = QtGui.QLabel("First name",self) self.fnameline = QtGui.QLineEdit(self) self.lname = QtGui.QLabel("Last name",self) self.lnameline = QtGui.QLineEdit(self) self.contact = QtGui.QPushButton("Contact",self) self.contact.clicked.connect(self.Contact) self.num1 = QtGui.QLabel("Telephone number 1",self) self.numline1 = QtGui.QLineEdit(self) self.numtype1 = QtGui.QComboBox(self) self.numtype1.addItem("Mobile") self.numtype1.addItem("Work") self.numtype1.addItem("Home") self.numtype1.addItem("Fax") self.num2 = QtGui.QLabel("Telephone number 2",self) self.numline2 = QtGui.QLineEdit(self) self.numtype2 = QtGui.QComboBox(self) self.numtype2.addItem("Mobile") self.numtype2.addItem("Work") self.numtype2.addItem("Home") self.numtype2.addItem("Fax") self.email = QtGui.QLabel("Email",self) self.emailline = QtGui.QLineEdit(self) self.work = QtGui.QPushButton("Work",self) self.work.clicked.connect(self.Work) self.title = QtGui.QLabel("Title",self) self.titleline = QtGui.QLineEdit(self) self.company = QtGui.QLabel("Company",self) self.companyline = QtGui.QLineEdit(self) self.position = QtGui.QLabel("Position",self) self.positionline = QtGui.QLineEdit(self) self.compsite = QtGui.QLabel("Company Website",self) self.compsiteline = QtGui.QLineEdit(self) self.other = QtGui.QPushButton("Other",self) self.other.clicked.connect(self.Other) self.address = QtGui.QLabel("Address",self) self.addressline = QtGui.QLineEdit(self) self.website = QtGui.QLabel("Website",self) self.websiteline = QtGui.QLineEdit(self) self.birthday = QtGui.QLabel("Birthday",self) self.birthdayline = QtGui.QDateEdit(self) self.notes = QtGui.QLabel("Notes",self) self.notesline = QtGui.QTextEdit(self) self.save = QtGui.QPushButton("Save",self) self.save.clicked.connect(self.Save) self.cancel = QtGui.QPushButton("Cancel",self) self.cancel.clicked.connect(lambda: self.hide()) sub = [self.fname,self.fnameline,self.lname,self.lnameline, self.num1,self.numline1,self.numtype1,self.num2, self.numline2,self.numtype2,self.email,self.emailline, self.title,self.titleline,self.company, self.companyline,self.position,self.positionline,self.compsite, self.compsiteline,self.address,self.addressline,self.website, self.websiteline,self.birthday,self.birthdayline,self.notes, self.notesline] main = [self.name,self.contact,self.work,self.other] widgets = [self.name,self.fname,self.fnameline,self.lname,self.lnameline, self.contact,self.num1,self.numline1,self.numtype1,self.num2, self.numline2,self.numtype2,self.email,self.emailline, self.work,self.title,self.titleline,self.company, self.companyline,self.position,self.positionline,self.compsite, self.compsiteline,self.other,self.address,self.addressline,self.website, self.websiteline,self.birthday,self.birthdayline,self.notes, self.notesline] for i in sub: i.hide() grid = QtGui.QGridLayout(self) pos = 0 for i in widgets: grid.addWidget(i,pos,0,1,2) pos +=1 grid.addWidget(self.save,pos,0,1,1) grid.addWidget(self.cancel,pos,1,1,1) self.setLayout(grid) self.setGeometry(300,200,175,100) self.setWindowTitle("Add contact") self.setStyleSheet("font-size:13px") def Name(self): global nvar if nvar == False: self.fname.show() self.fnameline.show() self.lname.show() self.lnameline.show() nvar = True else: self.fname.hide() self.fnameline.hide() self.lname.hide() self.lnameline.hide() nvar = False self.resize(175,100) def Contact(self): global cvar if cvar == False: self.num1.show() self.numline1.show() self.numtype1.show() self.num2.show() self.numline2.show() self.numtype2.show() self.email.show() self.emailline.show() cvar = True else: self.num1.hide() self.numline1.hide() self.numtype1.hide() self.num2.hide() self.numline2.hide() self.numtype2.hide() self.email.hide() self.emailline.hide() cvar = False self.resize(175,100) def Work(self): global wvar if wvar == False: self.title.show() self.titleline.show() self.company.show() self.companyline.show() self.position.show() self.positionline.show() self.compsite.show() self.compsiteline.show() wvar = True else: self.title.hide() self.titleline.hide() self.company.hide() self.companyline.hide() self.position.hide() self.positionline.hide() self.compsite.hide() self.compsiteline.hide() wvar = False self.resize(175,100) def Other(self): global ovar if ovar == False: self.address.show() self.addressline.show() self.website.show() self.websiteline.show() self.birthday.show() self.birthdayline.show() self.notes.show() self.notesline.show() ovar = True else: self.address.hide() self.addressline.hide() self.website.hide() self.websiteline.hide() self.birthday.hide() self.birthdayline.hide() self.notes.hide() self.notesline.hide() ovar = False self.resize(175,100) def Save(self): global contacts,button name = self.fnameline.text() + " " + self.lnameline.text() fname = self.fnameline.text() lname = self.lnameline.text() num1 = self.numline1.text() numtype1 = self.numtype1.currentIndex() num2 = self.numline2.text() numtype2 = self.numtype2.currentIndex() email = self.emailline.text() title = self.titleline.text() company = self.companyline.text() position = self.positionline.text() compsite = self.compsiteline.text() address = self.addressline.text() birthday = self.birthdayline.date() notes = self.notesline.toPlainText() if button == "+": contacts[name] = {"First name":fname, "Last name":lname, "Telephone number 1":num1, "Type 1":numtype1, "Telephone number 2":num2, "Type 2":numtype2, "Email":email, "Title":title, "Company":company, "Position":position, "Company Website":compsite, "Address":address, "Birthday":birthday, "Notes":notes } else: del contacts[button] contacts[name] = {"First name":fname, "Last name":lname, "Telephone number 1":num1, "Type 1":numtype1, "Telephone number 2":num2, "Type 2":numtype2, "Email":email, "Title":title, "Company":company, "Position":position, "Company Website":compsite, "Address":address, "Birthday":birthday, "Notes":notes } f = open("contacts.txt","wb") pickle.dump(contacts,f) f.close() self.close() class Main(QtGui.QMainWindow): def __init__(self,parent=None): QtGui.QMainWindow.__init__(self,parent) self.initUI() def initUI(self): global contacts centralwidget = QtGui.QWidget() self.timer = QtCore.QTimer(self) self.timer.start(10) self.timer.timeout.connect(self.Hover) self.add = QtGui.QPushButton("+",self) self.add.setStyleSheet("font-size:40px;background-color:#333333;border: 2px solid #222222") self.add.setFixedSize(100,100) self.add.clicked.connect(self.Add) self.grid = QtGui.QGridLayout() self.grid.addWidget(self.add,0,0) centralwidget.setLayout(self.grid) if contacts: self.addTile() self.setCentralWidget(centralwidget) #---------Window settings -------------------------------- self.setGeometry(300,300,500,100) self.setWindowTitle("PyTact") def clickContact(self): global contacts, button sender = self.sender() ind = self.sender().text().index("\n") button = self.sender().text()[:ind] + self.sender().text()[ind+1:] contact_id = contacts[button] self.timer.start(150) sender.setStyleSheet("font-size:15px;background-color:#666666;border: 2px solid #555555") new = New(self) fname = contact_id["First name"] new.fnameline.setText(fname) lname = contact_id["Last name"] new.lnameline.setText(lname) num1 = contact_id["Telephone number 1"] new.numline1.setText(num1) numtype1 = contact_id["Type 1"] new.numtype1.setCurrentIndex(numtype1) num2 = contact_id["Telephone number 2"] new.numline2.setText(num2) numtype2 = contact_id["Type 2"] new.numtype2.setCurrentIndex(numtype2) email = contact_id["Email"] new.emailline.setText(email) title = contact_id["Title"] new.titleline.setText(title) company = contact_id["Company"] new.companyline.setText(company) position = contact_id["Position"] new.positionline.setText(position) compsite = contact_id["Company Website"] new.compsiteline.setText(compsite) address = contact_id["Address"] new.addressline.setText(address) birthday = contact_id["Birthday"] new.birthdayline.setDate(birthday) notes = contact_id["Notes"] new.notesline.setText(notes) new.show() new.save.clicked.connect(self.addTile) def ContextMenu(self): global sender sender = self.sender() self.menu = QtGui.QMenu(self) remove = QtGui.QAction("Remove",self) remove.triggered.connect(self.Remove) self.menu.addAction(remove) self.menu.show() def Remove(self): global sender global contacts del contacts[sender.text()] sender.setParent(None) def addTile(self): global contacts for i in reversed(range(self.grid.count())): self.grid.itemAt(i).widget().setParent(None) self.grid.addWidget(self.add,0,0) h = 1 v = 0 for i in contacts.keys(): ind = i.rindex(" ") t = i[:ind]+ "\n" + i[ind:] b = QtGui.QPushButton(t,self) b.setStyleSheet("color:#0191C8;font-size:15px;background-color:#333333;border: 2px solid #222222") b.setFixedSize(100,100) b.clicked.connect(self.clickContact) b.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) b.customContextMenuRequested.connect(self.ContextMenu) self.grid.addWidget(b,v,h) h += 1 if h > 3 and h % 4 == 0: v += 1 h = 0 def Add(self): global button self.timer.start(150) self.add.setStyleSheet("color:#0191C8;font-size:40px;background-color:#666666;border: 2px solid #555555") button = self.sender().text() new = New(self) new.show() new.save.clicked.connect(self.addTile) def Hover(self): self.timer.start(10) for i in reversed(range(self.grid.count())): if i > 0: if self.grid.itemAt(i).widget().underMouse() == True: self.grid.itemAt(i).widget().setStyleSheet("color:#0191C8;font-size:15px;background-color:#444444;border: 2px solid #333333") else: self.grid.itemAt(i).widget().setStyleSheet("color:#0191C8;font-size:15px;background-color:#333333;border: 2px solid #222222") else: if self.add.underMouse() == True: self.add.setStyleSheet("color:#0191C8;font-size:40px;background-color:#444444;border: 2px solid #333333") else: self.add.setStyleSheet("color:#0191C8;font-size:40px;background-color:#333333;border: 2px solid #222222") def main(): app = QtGui.QApplication(sys.argv) main= Main() main.show() sys.exit(app.exec_()) if __name__ == "__main__": main()
Thursday, September 5, 2013
Fully functional PyQt address book
Hi, just wanted to post the code for a program I did a little while ago. It's an address book that let's you store some data about a person. The buttons are in tile-style and a button get's added dynamically when you create a new contact. Have fun.
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment