From 4017cb1dec40d43d31f3800f2d173d823a04a7a1 Mon Sep 17 00:00:00 2001 From: En Yi Date: Mon, 9 Jul 2018 13:41:39 +0800 Subject: [PATCH] Add timer --- .gitignore | 1 + .../sudoku_gameplay.cpython-35.pyc | Bin 4363 -> 4653 bytes .../__pycache__/board.cpython-35.pyc | Bin 7620 -> 4065 bytes graphic_components/board.py | 21 ++++++-- graphic_components/menu_graphics.py | 45 ++++++++++++++++++ graphic_components/sudoku_graphics.py | 3 -- main.py | 12 ++++- 7 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 graphic_components/menu_graphics.py diff --git a/.gitignore b/.gitignore index acf12e7..da89402 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ venv/ demos/ .idea/ +*.pyc diff --git a/gameplay/__pycache__/sudoku_gameplay.cpython-35.pyc b/gameplay/__pycache__/sudoku_gameplay.cpython-35.pyc index d7997b70e3d62fc7fe71324cabb2d9a880d0a52a..64973b35a9b30c6ecc30d42de9928ba7c722b9d2 100644 GIT binary patch delta 328 zcmeBHTC2h(#>>m)=4Kx~NpK=pKcm~kS-y-@CcdbXP7z^fVPJ^jVMq~WND%|Gc^Oi~ z8GHfJ&}<5Ny%WPkt=4Z_YqT+9L_QW$`$82ySwCO>4CQWi~5%}XsxEJ=+oO3X{i z&y7#YPb^BQ0x4z!5)4dLN|WF7i|HfF5^1)BU~)!ka&~-KVoqjCd~SYOYH=NsxpKj! zDf!u@!Ii}&skwR>O8qqXCJPA!vDpB%6xmKr5Kxp712TD-czAg@c-VQEd02p$jYp4% epND1gbOBv%JCI5f5WxmiE>mKgxx-Rg}_9ve#VfAvwRtACcda+4%QUe+{n0$kJ(R?XR?}L(B!Xz j!rVn{3=9nXKwK;|d4Ztl>3pz71voQexg0d9| diff --git a/graphic_components/__pycache__/board.cpython-35.pyc b/graphic_components/__pycache__/board.cpython-35.pyc index 530f552d628865453a4d35ac75a5183621c23541..54515b710f66cdc128ad4f2d85be94624c4401ab 100644 GIT binary patch literal 4065 zcmb7H*>dC75p8VTNm0}`BPq7Vv0Y(RGV+q-$r;ZUX(-$PDk(G@k8u#|yyHB6nTyM7<&;R`SZ~xLJ`Ws#Q zm?%HQldWn*K7JZSM6pJ;MzKz|PO(9@L9t1;NwGz?MH=_hDXLIhCA&&-jqDo5b+YRe zH^^>K+$6h6af|F0#ci_N6nDt(P`pI;QZe43s7vuO*~=97$nH_RLiP&9t7NZIyhipK z#p`6RQ@la;2E}*CzC-a{vhPy7N%m$ji%HQI#oJ{6sHj`2{tnsilD6+x$gk3CY_>{4 zjV^JJ9oqM6Pu2hRzzB)REQufMW+`cc;$@tn-2W~!6*bG< zFn04WO=NXAo4h(aNO9ObsSk6Ukaw|%H&3yLkq06j2O^&?Mz+S&7x`Q*8(cdKPZBr6 zsKf9g*z0R@DVzA|*~B@SnFp$N93%^c$EKct%vmA(3Wb0ekpLbL35@=U=onR$4f-R% zYLIV|Z?OXbQ*@a59!-|27EVXC!eb9{{MzI6<>S;9{=l2B#BU3afhT(dkrQ1Kooe*T zpi7OkS11uVI=#XV1uP2vys!Er84KRr*RCDg<^@ZE?2KqnP`Ao`{> zvmiPa_t0Ow$Ac_CIWuv97XkBAVyNB1+LiT%GN*^u&^=nBuennVc!~vchK>w!Q!89-n7k5Q7XqjZw^VRFK8%cjZLjigF++E@3DVVK~~)xXC{eFHA3mR`-@HbP60_DT(J?rq7`@_tSR0{Rs0k}R-zy| z0f1`0aL<`w`j$GBtd3`VYi0Q~3So_!mI|tZt7}1?V?kjSat9W zZp4S*{HUWc5aAQ{fr@a%+NBOJXaiXME*h^{+)$gd8MfZYZg^?JBnqy)xuaSJ+Ixlu z_R!n`3zW=T`&Evm#Ek>QQp0iL)SpCLZaL12i5nFy3WVb4yp>s?F2_UfzECWCh<`qzD88Z zYBGrh7urXYJWrD+QRtlozN`Wb3E$1#Y?Pim=!Fpu_q5k%O-?bw$<*bT$sRZiBUGo^ zfWBD-H8X`Gwqn~eA1kLTNAIAWSs`PRAZ=a0r>*Jh+C{H)LrF!7yl=<;?=hC`u6&X` zQ02lI%0Gw$HZ~#xo`Lx}tP3w-griZiJs*MQ;!eY>m=Mj%@W$YqJp}brtYm}z`MiNI ze$7=y2We(EKnvf7S$Gr$2sw@zslAlibb;{#+|SVR8J?^KL7L)VZAtHH7n_Sy-!#6b z*bn{rZQxx?wBopYVm=RmiWO%ElG<;I3(+i&wIYIX zpVQ=$DEb24^a58w4ib+Q`Wyk7I#bF^JHxA z?C%i&Ht=(Uu>~{3%8sS5V{zhCm|xi*^(tps?296qdW#7fvkdDkW%D*=K?<0zNO&5h zcT3fRLrPWadauqL=8TCVg+j{5QNbCLF;Kx;V57Sr8nFZmsD#IEJWEA*fxilz8%HV| zx0e9_FWr}6Jc(5jWOo;eXGLCBFEeGk^Gz5B;%S%xa??QA?VRh5UnuO(Th&i))IXI~ z*Z29afeO0AvFkCD)v@60ufhL8KLd7dkru7%J-&1GHI2V3>f6;XdL=YUG6KKd2H)Fn zGfw`W^C}#>EnRSZ(EqV)9!!V%FYXWX{YfaeO)$_@x+yF!G05f8ycevB)FBg9ZsG(% z)LAfd3cf4_^NGN}V-lR|DR;@%eDsr41ft9OWfnaaD=b!7aKb9qS!}RibEu?2_I{XE yB11y!6Bb)6hAg&Oa3reJEuyz5amdQrXGLD{fYYdqxA+t7p|NMM#n(Sv-})C8gl#JT literal 7620 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 b`ETGkW7>Gdx+VdC84xmSO`n_YPN)9^MXvpP diff --git a/graphic_components/board.py b/graphic_components/board.py index 7407c45..c4fb82b 100644 --- a/graphic_components/board.py +++ b/graphic_components/board.py @@ -1,12 +1,12 @@ from PyQt5.QtGui import QPainter, QBrush, QPen, QColor, QFont from PyQt5.QtWidgets import (QGraphicsScene, QGraphicsWidget, QGraphicsItem, QGraphicsLineItem, QGraphicsRectItem, QGraphicsObject, - QGraphicsItemGroup, QGraphicsPathItem) + QGraphicsItemGroup, QGraphicsPathItem, QGraphicsLinearLayout) from PyQt5.QtCore import (QAbstractAnimation, QObject, QPointF, Qt, QRectF, QLineF, QPropertyAnimation, pyqtProperty, pyqtSignal, QSizeF) from graphic_components import sudoku_graphics as sdk_grap - +from graphic_components import menu_graphics as menu_grap class BoxBoard(QGraphicsWidget): @@ -40,9 +40,10 @@ class BoxBoard(QGraphicsWidget): for line in self.line_order: if line.length() > 1: painter.drawLine(line) + #painter.drawRect(self.geometry()) def sizeHint(self, which, constraint=None): - return QSizeF(self.width+10, self.height+10) + return QSizeF(self.width, self.height) class GameBoard(BoxBoard): @@ -76,3 +77,17 @@ class MenuBoard(BoxBoard): # TODO: Create the components for the menu: A timer and a difficulty selector def __init__(self, width, height, parent=None): super().__init__(width, height, parent) + + self.layout = QGraphicsLinearLayout(Qt.Horizontal) + self.layout.setMaximumWidth(width) + self.layout.setMaximumHeight(height) + + self.timer_display = menu_grap.TimerDisplayer(parent=self) + self.timer_display2 = menu_grap.TimerDisplayer(parent=self) + self.timer_display3 = menu_grap.TimerDisplayer(parent=self) + self.layout.addItem(self.timer_display) + self.layout.addItem(self.timer_display2) + self.layout.addItem(self.timer_display3) + self.layout.setSpacing(0) + + self.setLayout(self.layout) diff --git a/graphic_components/menu_graphics.py b/graphic_components/menu_graphics.py new file mode 100644 index 0000000..70fdc76 --- /dev/null +++ b/graphic_components/menu_graphics.py @@ -0,0 +1,45 @@ +from PyQt5.QtGui import QPainter, QBrush, QPen, QColor, QFont +from PyQt5.QtWidgets import (QGraphicsScene, QGraphicsWidget, QGraphicsItem, + QGraphicsLineItem, QGraphicsRectItem, QGraphicsObject, + QGraphicsItemGroup, QGraphicsLayoutItem) +from PyQt5.QtCore import (QAbstractAnimation, QObject, QPointF, Qt, QRectF, QLineF, + QPropertyAnimation, pyqtProperty, pyqtSignal, QSizeF) + + +class TimerDisplayer(QGraphicsWidget): + + def __init__(self, parent=None): + super().__init__(parent) + + self.width = 100 + self.height = 50 + + self.box_pen = QPen() + self.box_pen.setColor(Qt.white) + self.pen_width = 3 + self.box_pen.setWidth(self.pen_width) + + + self.timer_box = QRectF(0, 0, self.width, self.height) + #self.setGeometry(self.timer_box) + #print(self.geometry().width()) + + def paint(self, painter, style, widget=None): + box = self.geometry() + #print(self.size().width()) + painter.setPen(self.box_pen) + painter.drawRect(box) + painter.drawText(box, Qt.AlignCenter, "00:00") + + def boundingRect(self): + return QRectF(QPointF(0, 0), self.geometry().size()) + + def sizeHint(self, which, constraint=None): + return QSizeF(self.width, self.height) + #print(self.geometry().size().width(), self.geometry().size().height()) + #return self.geometry().size() + + def setGeometry(self, rect): + self.prepareGeometryChange() + QGraphicsLayoutItem.setGeometry(self, rect) + self.setPos(rect.topLeft()) diff --git a/graphic_components/sudoku_graphics.py b/graphic_components/sudoku_graphics.py index 6c0e1b3..af340b1 100644 --- a/graphic_components/sudoku_graphics.py +++ b/graphic_components/sudoku_graphics.py @@ -177,6 +177,3 @@ class NumberRing(QGraphicsItem): def connect_button_signals(self, func): for btn in self.cell_buttons: btn.buttonClicked.connect(func) - - #def mousePressEvent(self, event): - # print('Yes') \ No newline at end of file diff --git a/main.py b/main.py index 7b7547f..800362a 100644 --- a/main.py +++ b/main.py @@ -21,7 +21,7 @@ class SudokuWindow(QGraphicsView): self.setScene(self.scene) self.setSceneRect(self.scene.sceneRect()) self.gameboard = board.GameBoard(400, 400) - self.menuboard = board.BoxBoard(400, 50) + self.menuboard = board.MenuBoard(400, 80) self.layout = QGraphicsLinearLayout(Qt.Vertical) self.layout.addItem(self.gameboard) @@ -39,6 +39,16 @@ class SudokuWindow(QGraphicsView): self.show() + print('menuboard') + menubox = self.menuboard.geometry() + print(menubox.left(), menubox.top()) + print(menubox.width(), menubox.height()) + + print('menuboard') + gamebox = self.gameboard.geometry() + print(gamebox.left(), gamebox.top()) + print(gamebox.width(), gamebox.height()) + if __name__ == "__main__": app = 0 app = QApplication(sys.argv)