1 from PyQt4.QtCore import *
2 from PyQt4.QtGui import *
4 class EditPerson(QDialog):
5 def __init__(self, parent=None, db=None):
6 QDialog.__init__(self,parent)
8 self.setWindowTitle("Edit records")
9 self.toplayout = QHBoxLayout() # Master layout
11 self.leftpanel = QVBoxLayout() # Contains user search and select
12 self.search_label = QLabel("F&ilter:")
13 self.search_bar = QLineEdit()
14 self.search_label.setBuddy(self.search_bar)
15 self.searchpair = QHBoxLayout()
16 self.searchpair.addWidget(self.search_label)
17 self.searchpair.addWidget(self.search_bar)
18 self.persontable = QLabel("<center>Table of people goes here</center>")
19 self.leftpanel.addLayout(self.searchpair)
20 self.leftpanel.addWidget(self.persontable)
22 self.rightpanel = QVBoxLayout() # Contains fields and buttons
26 self.rightpanel.addLayout(self.formlayout)
27 self.rightpanel.addLayout(self.buttonlayout)
29 self.toplayout.addLayout(self.leftpanel)
30 self.toplayout.addSpacing(10)
31 self.toplayout.addLayout(self.rightpanel)
33 self.setLayout(self.toplayout)
41 self.netid_lab = QLabel("NetID:")
42 self.year_lab = QLabel("Year:")
43 self.month_lab = QLabel("Month:")
44 self.day_lab = QLabel("Day:")
45 self.firstname_lab = QLabel("Preferred name:")
46 self.surname_lab = QLabel("Last name:")
47 self.email_lab = QLabel("Email:")
48 self.phone_lab = QLabel("Phone:")
49 self.major_lab = QLabel("Major:")
50 self.hometown_lab = QLabel("Hometown:")
51 self.room_lab = QLabel("Room number:")
52 self.bday_lab = QLabel("Birthday:")
53 self.dorm_lab = QLabel("Dorm:")
54 self.photo = QLabel("Photo goes here")
55 self.photo.setScaledContents(True)
56 self.currentimage = QImage()
57 self.displayimage = QImage()
58 self.displaypixmap = QPixmap()
59 self.photo.setAlignment(Qt.AlignCenter)
60 self.pb_changephoto = QPushButton("Select &photo")
61 self.pb_changephoto.setEnabled(True)
63 self.surname = QLineEdit()
64 self.firstname = QLineEdit()
65 self.phone = QLineEdit()
66 self.email = QLineEdit()
67 self.major = QLineEdit()
68 self.netid = QLineEdit()
70 self.year = QComboBox()
71 self.month = QComboBox()
72 self.day = QComboBox()
74 self.dorm = QComboBox()
75 self.room = QLineEdit()
76 # Fill the comboboxes with values, set valid field types
77 years = QStringList(["1987","1988","1989","1990","1991","1992","1993","1994"])
78 months = QStringList(["January","February","March","April","May","June","July","August","September","October","November","December"])
79 days = QStringList(["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"])
80 dorms = QStringList(["Clements","Lechner","McFadden"])
81 self.year.addItems(years)
82 self.month.addItems(months)
83 self.day.addItems(days)
84 self.dorm.addItems(dorms)
85 self.phone.setInputMask("(999)-999-9999")
86 self.major.setMaxLength(4)
87 self.room.setMaxLength(3)
88 # Create and fill the UI
89 self.formlayout = QGridLayout()
90 self.bday_layout = QHBoxLayout()
91 self.bday_layout.addWidget(self.year)
92 self.bday_layout.addWidget(self.month)
93 self.bday_layout.addWidget(self.day)
94 self.formlayout.addWidget(self.netid_lab, 0, 0)
95 self.formlayout.addWidget(self.netid, 0, 1)
96 self.formlayout.addWidget(self.firstname_lab, 1, 0)
97 self.formlayout.addWidget(self.firstname, 1, 1)
98 self.formlayout.addWidget(self.surname_lab, 2, 0)
99 self.formlayout.addWidget(self.surname, 2, 1)
100 self.formlayout.addWidget(self.email_lab, 3, 0)
101 self.formlayout.addWidget(self.email, 3, 1)
102 self.formlayout.addWidget(self.phone_lab, 4, 0)
103 self.formlayout.addWidget(self.phone, 4, 1)
104 self.formlayout.addWidget(self.bday_lab,5,0)
105 self.formlayout.addLayout(self.bday_layout,5,1)
106 self.formlayout.addWidget(self.major_lab, 6, 0)
107 self.formlayout.addWidget(self.major, 6, 1)
108 self.formlayout.addWidget(self.dorm_lab, 7, 0)
109 self.formlayout.addWidget(self.dorm, 7, 1)
110 self.formlayout.addWidget(self.room_lab, 8, 0)
111 self.formlayout.addWidget(self.room, 8, 1)
112 self.formlayout.addWidget(self.photo,9,0,1,2)
113 self.formlayout.addWidget(self.pb_changephoto,10,0,1,2)
114 self.buttonlayout = QHBoxLayout()
115 self.pb_cancel = QPushButton("&Cancel")
116 self.pb_save = QPushButton("&Save")
117 self.pb_saveclose = QPushButton("Save && Clos&e")
118 self.pb_reset = QPushButton("&Reset")
119 self.pb_save.setEnabled(False)
120 self.pb_saveclose.setEnabled(False)
121 self.pb_reset.setEnabled(False)
122 self.buttonlayout.addWidget(self.pb_reset)
123 self.buttonlayout.addWidget(self.pb_cancel)
124 self.buttonlayout.addWidget(self.pb_save)
125 self.buttonlayout.addWidget(self.pb_saveclose)
126 def setupActions(self):
127 # Update filtered table
128 QObject.connect(self.search_bar, SIGNAL("textChanged(QString)"), self.updateTable )
129 # Map buttons to actions
130 QObject.connect(self.pb_reset, SIGNAL("clicked()"), self.resetPressed )
131 QObject.connect(self.pb_cancel, SIGNAL("clicked()"), self.closePressed )
132 QObject.connect(self.pb_saveclose, SIGNAL("clicked()"), self.saveClosePressed )
133 QObject.connect(self.pb_save, SIGNAL("clicked()"), self.savePressed )
134 QObject.connect(self.pb_changephoto, SIGNAL("clicked()"), self.changePhoto )
135 # Changes to the record enable buttons
136 QObject.connect(self.netid, SIGNAL("textChanged(QString)"), self.formChanged )
137 QObject.connect(self.firstname, SIGNAL("textChanged(QString)"), self.formChanged )
138 QObject.connect(self.surname, SIGNAL("textChanged(QString)"), self.formChanged )
139 QObject.connect(self.email, SIGNAL("textChanged(QString)"), self.formChanged )
140 QObject.connect(self.phone, SIGNAL("textChanged(QString)"), self.formChanged )
141 QObject.connect(self.major, SIGNAL("textChanged(QString)"), self.formChanged )
142 QObject.connect(self.room, SIGNAL("textChanged(QString)"), self.formChanged )
143 QObject.connect(self.year, SIGNAL("currentIndexChanged(int)"), self.formChanged )
144 QObject.connect(self.month, SIGNAL("currentIndexChanged(int)"), self.formChanged )
145 QObject.connect(self.day, SIGNAL("currentIndexChanged(int)"), self.formChanged )
146 QObject.connect(self.dorm, SIGNAL("currentIndexChanged(int)"), self.formChanged )
148 def formChanged(self):
149 # Do this only if a record has been selected
150 self.pb_reset.setEnabled(True)
151 self.pb_save.setEnabled(True)
152 self.pb_saveclose.setEnabled(True)
153 def updateTable(self):
155 def resetPressed(self):
157 self.pb_reset.setEnabled(False)
158 self.pb_save.setEnabled(False)
159 self.pb_saveclose.setEnabled(False)
160 print "Resetting form"
161 def closePressed(self):
164 def savePressed(self):
166 self.pb_reset.setEnabled(False)
167 self.pb_save.setEnabled(False)
168 self.pb_saveclose.setEnabled(False)
169 def saveClosePressed(self):
172 def changePhoto(self):
173 fileName = QFileDialog.getOpenFileName(self, "Select Photo", ".", "Images (*.jpg *.png)" )
174 if not fileName.isEmpty():
175 print "opening", fileName
176 self.currentimage = QImage()
177 self.currentimage.load(fileName)
178 self.displayimage = self.currentimage.scaled(self.photo.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
179 self.displaypixmap = QPixmap.fromImage(self.displayimage)
180 self.photo.setPixmap(self.displaypixmap)
182 def fillForm(self, args):
185 def recordSelected(self):
186 print "New record selected"
188 self.pb_changephoto.setEnabled(True)
191 if __name__ == "__main__":
192 a = QApplication([""])