Question

here is my python GUI code for a Tutors help desk, it allow to add and...

here is my python GUI code for a Tutors help desk, it allow to add and remove students from a queue. I would like to be able to calculate the average wait time of the students between being added to the queue and being removed( receiving help) this average time should be display at the top right and being updated along the adding and removing of students, the clock is already present for the EST time in the GUI:
import sys
import time
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QHBoxLayout,
QVBoxLayout, QLineEdit, QLabel, QListWidget, QLCDNumber)
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("CS2316 Help Desk Queue")

self.initUI()
self.timer = QTimer()
self.timer.timeout.connect(self.showlcd)
self.timer.start(1000)
self.showlcd()

def initUI(self):
self.lcd = QLCDNumber(self)
self.setGeometry(30, 30, 600, 600)


palette = self.lcd.palette()
palette.setColor(palette.Dark, QColor("black"))
self.lcd.setPalette(palette)
self.lcd.setSegmentStyle(QLCDNumber.Flat)



vbox = QVBoxLayout()

hbox1 = QHBoxLayout()
label = QLabel()
label.setText("TAs on Duty:")
hbox1.addWidget(label)
Ta_entry = QLineEdit()
hbox1.addWidget(Ta_entry)

hbox2 = QHBoxLayout()
label2 = QLabel()
label2.setText("Enter Your Name:")
hbox2.addWidget(label2)
self.students_entry = QLineEdit()

self.students_entry.textChanged.connect(self.s_lineEdit)

hbox2.addWidget(self.students_entry)

self.b1 = QPushButton("Add")
self.b1.clicked.connect(self.on_b1_clicked)
self.b1.setEnabled(False)
self.b1.setStyleSheet('QPushButton {background-color: light grey; color: green;}')
self.b2 = QPushButton("Remove")
self.b2.clicked.connect(self.on_b2_clicked)
self.b2.setEnabled(False)
self.b2.setStyleSheet('QPushButton {background-color: light grey; color: red;}')

self.student_list = QListWidget()
self.student_list.itemSelectionChanged.connect(self.s_select)

vbox.addWidget(self.lcd)
vbox.addLayout(hbox1)
vbox.addWidget(self.student_list)
vbox.addLayout(hbox2)
vbox.addWidget(self.b1)
vbox.addWidget(self.b2)
self.setLayout(vbox)



def on_b1_clicked(self):
self.student_list.addItem(self.students_entry.text())
self.b1.setEnabled(False)
self.students_entry.clear()

def on_b2_clicked(self):
listItems = self.student_list.selectedItems()
for item in listItems:
self.student_list.takeItem(self.student_list.row(item))
def s_lineEdit(self):
if len(self.students_entry.text()) > 0 :
self.b1.setEnabled(True)
else:
self.b1.setEnabled(False)
def s_select(self):
if self.student_list.selectedItems():
self.b2.setEnabled(True)
else:
self.b2.setEnabled(False)

def showlcd(self):
time = QTime.currentTime()
text = time.toString('hh:mm')
self.lcd.display(text)




if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())

#display average wait time in the queue
0 0
Add a comment Improve this question Transcribed image text
Answer #1

Added a couple of methods to your code for getting time when added and returning when added. Converted all the time to seconds and used datetime to get it back to hours minutes and seconds. Initially shows 00:00. Based on the time taken it will change. Hope you understand and like this solution.

 import sys import time from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QHBoxLayout,       QVBoxLayout, QLineEdit, QLabel, QListWidget, QLCDNumber) from PyQt5.QtCore import * from PyQt5.QtGui import * import datetime class MainWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle("CS2316 Help Desk Queue") self.initUI() self.timer = QTimer() self.timer.timeout.connect(self.showlcd) self.timer.start(1000) self.showlcd() self.dict = {} self.avgTime() def initUI(self): self.lcd = QLCDNumber(self) self.setGeometry(30, 30, 600, 600) self.avg_time = QLCDNumber(self) palette = self.lcd.palette() palette.setColor(palette.Dark, QColor("black")) self.lcd.setPalette(palette) self.lcd.setSegmentStyle(QLCDNumber.Flat) hbox = QHBoxLayout() vbox = QVBoxLayout() hbox1 = QHBoxLayout() label = QLabel() label.setText("TAs on Duty:") hbox1.addWidget(label) Ta_entry = QLineEdit() hbox1.addWidget(Ta_entry) hbox2 = QHBoxLayout() label2 = QLabel() label2.setText("Enter Your Name:") hbox2.addWidget(label2) self.students_entry = QLineEdit() self.students_entry.textChanged.connect(self.s_lineEdit) hbox2.addWidget(self.students_entry) self.b1 = QPushButton("Add") self.b1.clicked.connect(self.on_b1_clicked) self.b1.setEnabled(False) self.b1.setStyleSheet('QPushButton {background-color: light grey; color: green;}') self.b2 = QPushButton("Remove") self.b2.clicked.connect(self.on_b2_clicked) self.b2.setEnabled(False) self.b2.setStyleSheet('QPushButton {background-color: light grey; color: red;}') self.student_list = QListWidget() self.student_list.itemSelectionChanged.connect(self.s_select) vbox.addLayout(hbox) hbox.addWidget(self.lcd) hbox.addWidget(self.avg_time) vbox.addLayout(hbox1) vbox.addWidget(self.student_list) vbox.addLayout(hbox2) vbox.addWidget(self.b1) vbox.addWidget(self.b2) self.setLayout(vbox) def on_b1_clicked(self): text = self.students_entry.text() self.addTime(text) self.student_list.addItem(text) self.b1.setEnabled(False) self.students_entry.clear() def on_b2_clicked(self): listItems = self.student_list.selectedItems() for item in listItems: self.student_list.takeItem(self.student_list.row(item)) self.removeTime(item) def s_lineEdit(self): if len(self.students_entry.text()) > 0 : self.b1.setEnabled(True) else: self.b1.setEnabled(False) def s_select(self): if self.student_list.selectedItems(): self.b2.setEnabled(True) else: self.b2.setEnabled(False) def returnTime(self): time = QTime.currentTime() return time def showlcd(self): time = self.returnTime() text = time.toString('hh:mm') self.lcd.display(text) def addTime(self,text): self.dict[text +" "+ self.returnTime().toString('hh:mm:ss')] = None print(self.dict) def removeTime(self,item): for i in self.dict.keys(): if i.split(" ")[0] == item.text(): self.dict[i] = self.returnTime().toString("hh:mm:ss") print(self.dict) self.avgTime() def avgTime(self): time_list = [] avg_time = "0:00:00" for key,val in self.dict.items(): if val is not None: add_time = list(map(int, key.split(" ")[1].split(":"))) remove_time = list(map(int, val.split(":"))) print(add_time, remove_time) time_list.append((remove_time[0]-add_time[0]) * 3600 + (remove_time[1]-add_time[1]) * 60 + (remove_time[2]-add_time[2])) if len(time_list) != 0: avg_time = str(datetime.timedelta(seconds=sum(time_list)/len(time_list))) # print(avg_time) # return avg_time self.avg_time.display(avg_time) if __name__ == '__main__': app = QApplication(sys.argv) main = MainWindow() main.show() sys.exit(app.exec_()) 
Add a comment
Know the answer?
Add Answer to:
here is my python GUI code for a Tutors help desk, it allow to add and...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT