Exemplo n.º 1
0
class Example(QWidget):
    def paintEvent(self, e):
        self.qp.begin(self)
        self.draw()
        self.qp.end()

    def __init__(self):
        super().__init__()

        self.elements = []
        """
        self.elements: QGraphicsObject[]
        """

        self.scene = QGraphicsScene()
        self.graphicsView = QGraphicsView(self.scene)

        hbox = QHBoxLayout()
        hbox.addWidget(self.graphicsView)
        # hbox.addWidget(self.wid)
        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)
        self.setLayout(vbox)

        self.setGeometry(300, 300, 500, 500)
        self.setWindowTitle('My first app')

        font = QFont('Ubuntu', 20, QFont.Normal)
        self.scene.setFont(font)

        self.qp = QPainter(self.graphicsView)

        self.lcd = QLCDNumber(self.graphicsView)

        self.slider = QSlider(self.graphicsView)
        self.slider.setOrientation(Qt.Horizontal)
        self.slider.setGeometry(0,
                                self.graphicsView.height() - 30,
                                self.graphicsView.width(), 30)
        self.slider.valueChanged.connect(self.changer)

        self.elements.append(self.scene.addText('@!#'))

        self.show()

    def changer(self, e: int):
        self.lcd.display(e)
        # self.wid.testDraw(e)
        # self.graphicsView.
        font = QFont('Ubuntu', e * 2 + 16, QFont.Bold)
        self.elements[0].setFont(font)  # dynamic change

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Q:
            exit(0)
            # print(event.key())

    def draw(self):

        self.graphicsView.setGeometry(0, 0, self.width(), self.height())

        self.lcd.move(self.graphicsView.width() - self.lcd.width() - 4, 3)

        # self.qp.qp.drawLine(0, 0, 100, 200)
        # self.qp.drawText(80, 80, "@!#")
        # self.qp.qp.drawArc(50, 50, 20, 20, 100, 4000)
        # self.qp.qp.drawPie(50, 50, 20, 20, 100, 4000)
        # self.qp.qp.drawRect(1,2, self.graphicsView.width() - 4, self.graphicsView.height() - 3)
        self.slider.setGeometry(0,
                                self.graphicsView.height() - 30,
                                self.graphicsView.width(), 30)
Exemplo n.º 2
0
class Klotski(QMainWindow):
    def __init__(self,
                 maps: Dict[int, KLMap],
                 firstBoard: Optional[int] = None) -> None:
        QMainWindow.__init__(self)
        self.klmap = None  # type: Optional[KLMap]
        self.moves = 0
        self.move_list = []  # type: List[ Tuple[str, Tuple[int, int]]]
        self.move_index = -1
        self.mini_maps_dict = {}  # type: Dict[int, QPixmap]
        self.levels_by_id = maps

        self.init_misc_gui()

        self.board.load_tiles()
        self.board.sig_move.connect(self.move_tile)

        self.generate_mini_maps()

        self.board_chooser = KLBoardChooser(
            KlMinimapProvider(self.levels_by_id, self.mini_maps_dict), self)
        self.board_chooser.hide()

        # needs self.board
        self.init_menu()

        self.setWindowTitle("Klotski")
        self.title_label.setText("Klotski")
        if firstBoard:
            self.new_level(self.levels_by_id[int(firstBoard)])
            self.move_enabled = True
        else:
            self.new_level(self.levels_by_id[ID_SPLASH_SCREEN])
            self.move_enabled = False

    def init_misc_gui(self) -> None:
        w = QWidget(self)
        self.setCentralWidget(w)
        ly = QVBoxLayout()
        w.setLayout(ly)
        ly.setSpacing(10)

        self.title_label = QLabel("Klotski", w)
        ft = self.title_label.font()
        ft.setPointSize(20)
        self.title_label.setFont(ft)
        self.title_label.setAlignment(Qt.AlignCenter)
        self.title_label.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed))
        ly.addWidget(self.title_label)

        hb = QHBoxLayout()
        self.board = KLBoard(w)
        hb.addWidget(self.board)
        hb.setStretchFactor(self.board, 100)
        ly.addLayout(hb)

        # horizontal bottom hbox [ QLabel | QLcdNumber ]
        hb = QHBoxLayout()
        # hb.setSpacing( 5 )
        # hb.setMargin( 5 )
        ml = QLabel("Moves : ", w)
        ml.setFont(ft)
        ml.setAlignment(Qt.AlignRight)
        hb.addWidget(ml)

        self.move_lcd_nb = QLCDNumber(4, w)
        self.move_lcd_nb.adjustSize()
        self.move_lcd_nb.setFixedSize(self.move_lcd_nb.width(), 30)
        hb.addWidget(self.move_lcd_nb)
        # hb.setFixedHeight( hb.height() )
        ly.addLayout(hb)

        self.adjustSize()

    def generate_mini_maps(self) -> None:
        self.mini_maps_dict = {}
        for i in self.levels_by_id.keys():
            self.mini_maps_dict[i] = self.board.generate_mini_map(
                self.levels_by_id[i])

    def new_level(self, m: KLMap) -> None:
        '''Display a new map into the main window'''
        if m.name != NAME_SPLASH_SCREEN:
            # display the name of the board
            self.setWindowTitle("Klotski - " + m.name)
            self.title_label.setText(m.name)
        else:
            # display the splash screen
            self.setWindowTitle("Klotski")
            self.title_label.setText('')

        self.klmap = m
        w = max(m.w * TILE_SIZE + 10 + 40,
                self.title_label.sizeHint().width() + 20)
        h = (m.h * TILE_SIZE + 10 + 80 + self.title_label.sizeHint().height() +
             max(self.move_lcd_nb.sizeHint().height(),
                 self.title_label.sizeHint().height()))

        center = self.frameGeometry().center()
        self.resize(w, h)

        r = self.frameGeometry()
        r.moveCenter(center)

        desktop = QApplication.desktop()
        if r.x() + w > desktop.width() or r.x(
        ) < 0 or r.y() + h > desktop.height() or r.y() < 0:

            r.moveCenter(desktop.rect().center())

        if r.x() < 0:
            r.setX(0)
        if r.y() < 0:
            r.setY(0)
        if r.x() + w > desktop.width():
            r.setX(0)
            w = desktop.width() - 20 - r.x()
        if r.y() + h > desktop.height():
            r.setY(0)
            h = desktop.height() - 20 - r.y()

        self.move(r.topLeft())
        self.resize(w, h)

        self.reset()

    def choose_board(self) -> None:
        self.board_chooser.exec()
        board_id = self.board_chooser.result()

        if board_id in self.levels_by_id:
            self.new_level(self.levels_by_id[board_id])

    def init_menu(self) -> None:
        file_menu = QMenu('Game', self)
        file_menu.addAction("Boards", self.choose_board, Qt.CTRL + Qt.Key_B)
        file_menu.addAction("Quit", self.close,
                            Qt.CTRL + Qt.Key_X)  # type: ignore
        file_menu.addAction("About Klotski", self.about)

        move_menu = QMenu('Moves', self)
        move_menu.addAction("Reset", self.reset)
        move_menu.addAction("Undo", self.undo, Qt.CTRL + Qt.Key_U)
        move_menu.addAction("Redo", self.redo, Qt.CTRL + Qt.Key_R)

        main_menu = self.menuBar()
        main_menu.addMenu(file_menu)
        main_menu.addMenu(move_menu)

    def set_move_nb(self, m: int) -> None:
        self.move_lcd_nb.display(m)
        self.moves = m

    def move_tile(self, move_info: Tuple[str, Tuple[int, int]]) -> None:
        pid, delta = move_info
        if not self.move_enabled:
            return

        assert self.klmap
        self.klmap.move_piece(pid, delta)
        self.board.move_piece(pid, delta)

        if self.move_index < 0:
            self.move_list = [(pid, (0, 0))]
            self.move_index = 0
            self.set_move_nb(self.moves + 1)

        last_move_pid, last_move = self.move_list[self.move_index]

        if pid != last_move_pid:
            self.move_index = self.move_index + 1
            self.move_list[self.move_index:] = [(pid, delta)]
            self.set_move_nb(self.moves + 1)
        else:
            self.move_list[self.move_index:] = [
                (pid, (last_move[0] + delta[0], last_move[1] + delta[1]))
            ]

        if self.klmap.is_game_won():
            QMessageBox.information(
                self, "Congratulation",
                "Congratulations!!!\nYou completed this level in %d moves" %
                self.moves)
            self.move_enabled = False
            self.klmap.reset()

    def reset(self) -> None:
        assert self.klmap
        self.klmap.reset()
        self.board.set_map(self.klmap)
        self.set_move_nb(0)
        self.move_enabled = True
        self.move_list = []
        self.move_index = -1

    def undo(self) -> None:
        if self.move_index < 0:
            return
        if not self.move_enabled:
            return

        pid = self.move_list[self.move_index][0]
        d = reverse_move(self.move_list[self.move_index][1])
        assert self.klmap
        assert self.board
        self.klmap.move_piece(pid, d)
        self.board.move_piece(pid, d)
        self.set_move_nb(self.moves - 1)

        self.move_index = self.move_index - 1

    def redo(self) -> None:
        if self.move_index + 1 >= len(self.move_list):
            return
        if not self.move_enabled:
            return

        self.move_index = self.move_index + 1
        pid, d = self.move_list[self.move_index]
        assert self.klmap
        assert self.board
        self.klmap.move_piece(pid, d)
        self.board.move_piece(pid, d)
        self.set_move_nb(self.moves + 1)

    def about(self) -> None:
        QMessageBox.about(self, 'About Klotski', MSG_ABOUT)

    def print_state(self) -> None:
        print(self.klmap)
        print("Move list : ", self.move_list)
        print("move list index : ", self.move_index)
Exemplo n.º 3
0
class Miner(QMainWindow):
    def __init__(self):
        super().__init__()
        self.__iconHappy = QIcon("happy.png")
        self.__iconSad = QIcon("sad.png")
        self.__iconWon = QIcon("won.png")
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Сапёр')
        menuBar = self.menuBar()
        subMenu = menuBar.addMenu('Сложность')
        actionLight = subMenu.addAction('Легкий')
        actionLight.triggered.connect(self.changeToLightLevel)
        actionLight.setCheckable(True)
        actionMiddle = subMenu.addAction('Средний')
        actionMiddle.triggered.connect(self.changeToMiddleLevel)
        actionMiddle.setCheckable(True)
        actionHard = subMenu.addAction('Сложный')
        actionHard.triggered.connect(self.changeToHardLevel)
        actionHard.setCheckable(True)
        levelGroup = QActionGroup(self)
        levelGroup.addAction(actionLight)
        levelGroup.addAction(actionMiddle)
        levelGroup.addAction(actionHard)
        actionLight.setChecked(True)
        self.panelHeight = 50
        self.panelMargin = 10
        self.btnState = QPushButton(self)
        self.btnState.clicked.connect(self.restart)
        self.btnState.resize(self.panelHeight, self.panelHeight)
        self.btnState.setIconSize(
            QSize(self.panelHeight - 8, self.panelHeight - 8))
        self.btnState.setIcon(self.__iconHappy)
        self.lblBombs = QLCDNumber(self)
        self.lblBombs.resize(70, self.panelHeight)
        self.lblTimer = QLCDNumber(self)
        self.lblTimer.resize(70, self.panelHeight)
        self.minerField = MinerField(self)
        self.minerField.onGameOver = self.onGameOver
        self.minerField.onBombMarkedChanged = self.onBombMarkedChanged
        self.minerField.move(
            0, self.panelHeight + self.panelMargin * 2 + menuBar.height())
        self.move(100, 100)
        self.__setWidgetsGeometry()
        self.onBombMarkedChanged()
        self.gameTimeInSec = 0
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.changeGameTime)
        self.timer.start(1000)
        self.changeGameTime()
        self.show()

    def __setWidgetsGeometry(self):
        self.setFixedSize(
            self.minerField.geometry().width(),
            self.minerField.geometry().height() + self.minerField.y())
        panelTop = self.panelMargin + self.menuBar().height()
        self.btnState.move(self.width() // 2 - self.btnState.width() // 2,
                           panelTop)
        self.lblBombs.move(
            self.btnState.x() - self.panelMargin - self.lblBombs.width(),
            panelTop)
        self.lblTimer.move(
            self.btnState.x() + self.btnState.width() + self.panelMargin,
            panelTop)

    def onGameOver(self):
        if self.minerField.gameState() == GameState.WIN:
            self.btnState.setIcon(self.__iconWon)
        else:
            self.btnState.setIcon(self.__iconSad)

    def onBombMarkedChanged(self):
        leftBombs = self.minerField.bombs() - self.minerField.markedBombCount()
        if leftBombs < 0:
            leftBombs = 0
        self.lblBombs.display(leftBombs)

    def changeGameTime(self):
        if self.minerField.gameState(
        ) != GameState.RUNNING and self.gameTimeInSec > 0:
            return
        self.lblTimer.display(self.gameTimeInSec)
        self.gameTimeInSec += 1

    def restart(self, rows=None, cols=None, bombs=None):
        self.minerField.restart(rows, cols, bombs)
        self.gameTimeInSec = 0
        self.onBombMarkedChanged()
        self.changeGameTime()
        self.__setWidgetsGeometry()
        self.btnState.setIcon(self.__iconHappy)

    def changeToLevel(self, rows, cols, bombs):
        self.restart(rows, cols, bombs)

    def changeToLightLevel(self):
        self.changeToLevel(9, 9, 10)

    def changeToMiddleLevel(self):
        self.changeToLevel(13, 16, 30)

    def changeToHardLevel(self):
        self.changeToLevel(12, 22, 52)
class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.cnt = 0
        self.txt = 'aa'
        self.labList = []
        self.labTop=130
        datetime = QDateTime.currentDateTime()
        self.lcd = QLCDNumber(self)
        self.sld = QSlider(Qt.Horizontal, self)
        self.sld.setRange(1, 10)
        self.sld.setSingleStep(1)
        self.sld.setTickPosition(QSlider.TicksBelow)

        self.rbtn1 = QRadioButton('Lotto 6 aus 49', self)

        self.rbtn2 = QRadioButton(self)
        self.rbtn2.setText('Euro Jackpot')
        self.rbtn2.setChecked(True)

        self.btn1 = QPushButton('RUN', self)

        self.lbl1 = QLabel("How many?", self)
        self.lbl1.move(10, 10)
        self.lcd.move(10, self.lbl1.height())
        self.sld.move(10, self.lbl1.height() + self.lcd.height())
        self.lbl2 = QLabel('|', self)
        self.lbl3 = QLabel('|', self)
        self.lbl2.move(self.lcd.width(), self.lbl1.height())
        self.lbl3.move(self.sld.width(), self.lbl1.height() + self.lcd.height())
        self.lbl4 = QLabel("Which Lottery?",self)
        self.lbl4.move(115,10)
        self.rbtn1.move(115, self.lbl4.height())
        self.rbtn2.move(115, self.lbl4.height() + self.rbtn1.height())
        self.btn1.move(10, self.lbl1.height() + self.lcd.height() + self.sld.height())
        self.rbtn1.toggle()
        self.rbtn2.toggle()

        self.sld.valueChanged.connect(self.lcd.display)
        self.btn1.clicked.connect(self.buttonClicked)
        self.setGeometry(2000, 300, 300, 300)
        self.setWindowIcon(QIcon('logo\web.png'))
        self.setWindowTitle('Let win!!!')
        self.center()
        self.show()


    def buttonClicked(self):
        self.cnt = int(self.sld.value())
        self.lab = QLabel(str(self.cnt)+"are picked",self)
        self.lab.move(10, self.labTop)
        self.lab.show()


        if self.rbtn1.isChecked():
            self.txt = self.rbtn1.text()
            self.lab1 = QLabel(self.txt+ "ㄱㄱ", self)
            self.lab1.move(10, self.labTop+20)
            self.lab1.show()
            for i in range(0,self.cnt):
                lotto = random.sample(range(1, 49), 6)
                lotto.sort()
                bonus_number = random.sample(range(0, 9), 1)
                bonus_number.sort()
                self.labList.append(QLabel(str(lotto) + '    Losnummer: '+ str(bonus_number), self))
                self.labList[i].move(10, self.labTop+50 + (i*20))
                self.labList[i].show()
        else:
            self.txt = self.rbtn2.text()
            self.lab1 = QLabel(self.txt+ "ㄱㄱ", self)
            self.lab1.move(10, self.labTop+20)
            self.lab1.show()
            for i in range(0,self.cnt):
                Euro_jackpot = random.sample(range(1, 50), 5)
                Euro_jackpot.sort()
                lucky_number = random.sample(range(1, 10), 2)
                lucky_number.sort()
                self.labList.append(QLabel(str(Euro_jackpot) + '    Lucky number: ' + str(lucky_number), self))
                self.labList[i].move(10, self.labTop+50 + (i*20))
                self.labList[i].show()





    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())