You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
3.3 KiB

11 years ago
from PySide import QtGui, QtCore
from gamestate import QuestionAnswer
11 years ago
#class QuestionWindow(QtGui.QWidget):
class QuestionWindow(QtGui.QDialog):
def __init__(self, players, section, qnumber, question, parent=None):
11 years ago
super(QuestionWindow, self).__init__(parent)
self.players = players
11 years ago
self.section = section
self.qnumber = qnumber
11 years ago
self.question = question
self.results = []
self._setupGui()
self.setWindowTitle("Seopardy")
def get_results(self):
return self.results
def _mkQuestionLabel(self, text):
question = QtGui.QLabel(text, alignment=QtCore.Qt.AlignCenter)
question.setWordWrap(True)
question.setStyleSheet("QLabel { font-size: 40px; }")
return question
def _setupGui(self):
self.layout = QtGui.QVBoxLayout()
seclabel = QtGui.QLabel(self.section)
seclabel.setStyleSheet("QLabel { font-size: 30px; }")
self.layout.addWidget(seclabel, alignment=QtCore.Qt.AlignCenter)
self.layout.addStretch()
qlabel = None
if self.question["Type"] == "Text":
qlabel = self._mkQuestionLabel(self.question["Question"])
print(self.question["Question"])
11 years ago
elif self.question["Type"] == "Music":
qlabel = self._mkQuestionLabel("Listen...")
11 years ago
elif self.question["Type"] == "Image":
qlabel = QtGui.QLabel()
pixmap = QtGui.QPixmap()
pixmap.loadFromData(open(self.question["Question"]).read())
qlabel.setPixmap(pixmap)
else:
raise ValueError("%s is an unknown type for section %s question name %s" % (self.question["Type"], self.section, self.question["Name"]))
self.layout.addWidget(qlabel)
11 years ago
self.layout.addStretch()
self.setLayout(self.layout)
def keyPressEvent(self, e):
print("question", e, e.key())
if e.key() == QtCore.Qt.Key_Escape:
self.close()
elif e.key() >= ord('1') and e.key() <= ord(str(len(self.players))):
player = self.players[e.key() - ord('1')]
qawin = QuestionAnswerWindow(player, self)
res = qawin.exec_()
if res == QuestionAnswerWindow.CORRECT:
print("Done!")
q = QuestionAnswer(self.section, self.qnumber, player, len(self.results)+1, True)
self.results.append(q)
self.accept()
elif res == QuestionAnswerWindow.WRONG:
q = QuestionAnswer(self.section, self.qnumber, player, len(self.results)+1, False)
self.results.append(q)
class QuestionAnswerWindow(QtGui.QDialog):
CORRECT = 1
WRONG = 2
OOPS = 3
def __init__(self, player, parent=None):
super(QuestionAnswerWindow, self).__init__(parent)
self.player = player
self._setupGui()
# move window to bottom right of screen
g = QtGui.QApplication.desktop().screenGeometry()
self.show()
cPos = self.rect()
self.move(g.width() - cPos.width(), g.height() - cPos.height())
def _setupGui(self):
self.layout = QtGui.QVBoxLayout()
self.plabel = QtGui.QLabel(self.player.name)
self.plabel.setStyleSheet("QLabel { font-size: 60px; }")
self.layout.addWidget(self.plabel, alignment=QtCore.Qt.AlignCenter)
btnbox = QtGui.QHBoxLayout()
right = QtGui.QPushButton("Correct")
right.clicked.connect(lambda: self.done(self.CORRECT))
btnbox.addWidget(right)
wrong = QtGui.QPushButton("Wrong")
wrong.clicked.connect(lambda: self.done(self.WRONG))
btnbox.addWidget(wrong)
btnbox.addStretch()
oops = QtGui.QPushButton("Oops")
oops.clicked.connect(lambda: self.done(self.OOPS))
btnbox.addWidget(oops)
self.layout.addLayout(btnbox)
self.setLayout(self.layout)