Esempio n. 1
0
class Gui(QWidget):
    def __init__(self):
        super().__init__()
        self.foldername = None
        self.server = None
        self.initUI()

    def initUI(self):
        grid = QGridLayout()
        self.setLayout(grid)
        self.addr_frame = QFrame()
        addr_layout = QGridLayout()
        self.addr_frame.setLayout(addr_layout)

        lbl_host = QLabel('Host:', self)
        lbl_port = QLabel('Port:', self)
        lbl_msg = QLabel('Msg:', self)
        lbl_spin = QLabel('Group number:', self)
        self.lbl_msg_wr = QLabel('', self)
        self.lbl_err = QLabel('', self)
        self.edit_host = QLineEdit()
        self.edit_port = QLineEdit('9090')
        self.btn_run = QPushButton('Run server', self)
        self.btn_stop = QPushButton('Stop server', self)
        self.btn_dir = QPushButton('Open folder', self)
        self.btn_ext = QPushButton('Quit', self)
        self.spin = QSpinBox()
        self.spin.setRange(0, 99)

        addr_layout.addWidget(lbl_host, 0, 0)
        addr_layout.addWidget(self.edit_host, 0, 1)
        addr_layout.addWidget(lbl_port, 0, 2)
        addr_layout.addWidget(self.edit_port, 0, 3)
        addr_layout.addWidget(self.lbl_err, 1, 0, 1, 4)

        grid.addWidget(self.addr_frame, 0, 0, 2, 4)
        grid.addWidget(lbl_spin, 2, 1, 1, 2)
        grid.addWidget(self.spin, 2, 3)
        grid.addWidget(lbl_msg, 3, 0)
        grid.addWidget(self.lbl_msg_wr, 3, 1, 1, 3)
        grid.addWidget(self.btn_run, 4, 0, 1, 4)
        grid.addWidget(self.btn_stop, 5, 0, 1, 4)
        grid.addWidget(self.btn_dir, 6, 3)
        grid.addWidget(self.btn_ext, 6, 0)

        self.btn_ext.clicked.connect(QCoreApplication.instance().quit)
        self.btn_run.clicked.connect(self.start)
        self.btn_dir.clicked.connect(self.get_filename)
        self.btn_stop.clicked.connect(self.stop)
        self.btn_stop.setDisabled(True)
        self.spin.valueChanged.connect(self.set_group)

        self.thread = QThread()
        self.thread.started.connect(lambda: self.disable_btn(True))
        self.thread.finished.connect(lambda: self.disable_btn(False))

        self.setWindowTitle('TCP Server')
        self.center()
        self.show()

    def get_filename(self):
        self.foldername = QFileDialog.getExistingDirectory(
            self, "Set folder", ".")

    @pyqtSlot(str)
    def show_msg(self, string):
        self.lbl_msg_wr.setText(string)

    def set_group(self, value):
        if self.server:
            self.server.group_number = str(value).rjust(2, '0')

    def disable_btn(self, value):
        self.btn_run.setDisabled(value)
        self.btn_stop.setEnabled(value)
        self.btn_dir.setDisabled(value)
        self.btn_ext.setDisabled(value)
        self.addr_frame.setDisabled(value)

    def start(self):
        file_patch = self.foldername + '/log.csv' if self.foldername else 'log.csv'
        self.server = Server(str(self.spin.value()).rjust(2, '0'), file_patch)
        self.server.show_string.connect(self.show_msg)
        port = self.edit_port.text()
        if port:
            self.server.create(int(port))
            self.server.loop = True
            self.server.moveToThread(self.thread)
            self.thread.started.connect(self.server.run)
            self.thread.setTerminationEnabled()
            self.thread.start()

        else:
            self.lbl_err.setText('Error!')

    def stop(self):
        if self.server:
            self.server.loop = False
            self.thread.terminate()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())
Esempio n. 2
0
class Gui(QWidget):
    def __init__(self):
        super().__init__()
        self.client = Client()
        self.client.connected_done.connect(lambda: self.disable_btn(True))
        self.client.connected_close.connect(lambda: self.disable_btn(False))
        self.initUI()

    def initUI(self):
        grid = QGridLayout()
        self.setLayout(grid)
        self.addr_frame = QFrame()
        addr_layout = QGridLayout()
        self.addr_frame.setLayout(addr_layout)

        lbl_host = QLabel('Host:', self)
        lbl_port = QLabel('Port:', self)
        lbl_msg = QLabel('Msg:', self)
        self.lbl_err = QLabel('', self)
        self.lbl_err_msg = QLabel('', self)
        self.edit_host = QLineEdit('localhost')
        self.edit_port = QLineEdit('9090')
        self.edit_msg = QLineEdit()
        self.btn_conn = QPushButton('Connect', self)
        self.btn_dconn = QPushButton('Disconnect', self)
        self.btn_dconn.setDisabled(True)
        self.btn_send = QPushButton('Send', self)
        self.btn_send.setDisabled(True)
        self.btn_ext = QPushButton('Quit', self)

        addr_layout.addWidget(lbl_host, 0, 0)
        addr_layout.addWidget(self.edit_host, 0, 1)
        addr_layout.addWidget(lbl_port, 0, 2)
        addr_layout.addWidget(self.edit_port, 0, 3)
        addr_layout.addWidget(self.lbl_err, 1, 0, 1, 4)

        grid.addWidget(self.addr_frame, 0, 0, 1, 4)
        grid.addWidget(self.lbl_err, 1, 0, 1, 4)
        grid.addWidget(self.btn_conn, 2, 0, 1, 4)
        grid.addWidget(self.btn_dconn, 3, 0, 1, 4)
        grid.addWidget(lbl_msg, 4, 0)
        grid.addWidget(self.edit_msg, 4, 1, 1, 2)
        grid.addWidget(self.btn_send, 4, 3, 1, 2)
        grid.addWidget(self.lbl_err_msg, 5, 0, 1, 4)
        grid.addWidget(self.btn_ext, 6, 0)

        self.btn_ext.clicked.connect(QCoreApplication.instance().quit)
        self.btn_conn.clicked.connect(self.connect)
        self.btn_send.clicked.connect(self.send)
        self.btn_dconn.clicked.connect(self.disconnect)

        self.setWindowTitle('TCP Client')
        self.center()
        self.show()

    def disable_btn(self, value):
        self.btn_conn.setDisabled(value)
        self.btn_ext.setDisabled(value)
        self.btn_send.setEnabled(value)
        self.btn_dconn.setEnabled(value)
        self.addr_frame.setDisabled(value)

    def connect(self):
        host = self.edit_host.text()
        port = self.edit_port.text()

        if host and port:
            self.client.connect(host, int(port))
            if self.client.peername:
                self.lbl_err.setText(
                    f'Connected to: {self.client.peername[0]}:{self.client.peername[1]}'
                )
            else:
                self.lbl_err.setText(str(self.client.error_msg))
        else:
            self.lbl_err.setText('Error!')

    def disconnect(self):
        self.client.close()
        self.lbl_err.setText('')

    def send(self):
        msg = self.edit_msg.text()
        if msg:
            self.client.send(msg)
            self.lbl_err_msg.setText('')
        else:
            self.lbl_err_msg.setText('Error!')

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())
Esempio n. 3
0
class PochaPlayerInputWidget(QFrame):

    winnerSet = QtCore.pyqtSignal(str)
    newExpected = QtCore.pyqtSignal()
    handsClicked = QtCore.pyqtSignal(str, str)

    def __init__(self, player, engine, colour=None, parent=None):
        super(PochaPlayerInputWidget, self).__init__(parent)
        self.player = player
        self.engine = engine
        self.winner = False
        self.pcolour = colour
        self.mainLayout = QVBoxLayout(self)
        self.mainLayout.setSpacing(0)

        self.label = QLabel(self)
        self.label.setText(self.player)
        self.mainLayout.addWidget(self.label)
        self.label.setAutoFillBackground(False)
        self.setFrameShape(QFrame.Panel)
        self.setFrameShadow(QFrame.Raised)
        self.label.setScaledContents(True)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setWordWrap(False)
        css = ("QLabel {{ font-size: 24px; font-weight: bold; "
               "color:rgb({},{},{});}}")
        self.label.setStyleSheet(css.format(self.pcolour.red(),
                                            self.pcolour.green(),
                                            self.pcolour.blue()))

        self.expectedGroupBox = QFrame(self)
        self.mainLayout.addWidget(self.expectedGroupBox)
        self.ebLayout = QHBoxLayout(self.expectedGroupBox)
        self.ebLayout.setSpacing(0)
        self.ebLayout.setContentsMargins(2, 2, 2, 2)
        self.expectedGroup = QButtonGroup(self)
        self.expectedGroup.buttonReleased.connect(self.expectedClickedAction)
        self.expectedButtons = []

        self.wonGroupBox = QFrame(self)
        self.mainLayout.addWidget(self.wonGroupBox)
        self.wbLayout = QHBoxLayout(self.wonGroupBox)
        self.wbLayout.setSpacing(0)
        self.wbLayout.setContentsMargins(2, 2, 2, 2)
        self.wonGroup = QButtonGroup(self)
        self.wonGroup.buttonReleased.connect(self.wonClickedAction)
        self.wonButtons = []
        for i in range(-1, 9):
            button = PochaHandsButton(str(i), self)
            self.expectedGroup.addButton(button, i)
            self.expectedButtons.append(button)
            button.toggled.connect(self.enableWonGroup)
            if i < 0:
                button.hide()
            else:
                self.ebLayout.addWidget(button)

            button = PochaHandsButton(str(i), self)
            self.wonGroup.addButton(button, i)
            self.wonButtons.append(button)
            if i < 0:
                button.hide()
            else:
                self.wbLayout.addWidget(button)

        self.reset()

    def reset(self):
        self.expectedButtons[0].setChecked(True)
        self.wonButtons[0].setChecked(True)
        self.refreshButtons()
        self.disableWonRow()

    def refreshButtons(self, forbidden=-1):
        hands = self.engine.getHands()
        for eb, wb in zip(self.expectedButtons, self.wonButtons):
            eb.setDisabled(int(eb.text()) > hands)
            if int(eb.text()) == forbidden:
                eb.setDisabled(True)
            wb.setDisabled(int(wb.text()) > hands)

    def disableWonRow(self, disable=True):
        if self.getExpectedHands() < 0:
            self.wonGroupBox.setDisabled(True)
        else:
            self.wonGroupBox.setDisabled(disable)

    def enableWonGroup(self, button):
        self.newExpected.emit()

    def isWinner(self): return False

    def getPlayer(self): return self.player

    def getScore(self):
        expected = self.expectedGroup.checkedId()
        won = self.wonGroup.checkedId()
        if expected < 0 or won < 0:
            return 0
        if expected == won:
            return 10 + 3 * won
        return -3 * abs(expected - won)

    def getWonHands(self): return self.wonGroup.checkedId()

    def getExpectedHands(self): return self.expectedGroup.checkedId()

    def setExpectedHands(self, number):
        if number < 0:
            self.expectedButtons[0].toggle()
            return True
        button = self.expectedGroup.button(number)
        if button.isEnabled():
            button.toggle()
            return True
        return False

    def setWonHands(self, number):
        if number < 0:
            self.wonButtons[0].toggle()
            return True
        button = self.wonGroup.button(number)
        if button.isEnabled():
            button.toggle()
            return True
        return False

    def expectedClickedAction(self, _):
        self.handsClicked.emit('expected', self.player)

    def wonClickedAction(self, _):
        self.handsClicked.emit('won', self.player)

    def setColour(self, colour):
        self.pcolour = colour
        css = ("QLabel {{ font-size: 24px; font-weight: bold; "
               "color:rgb({},{},{});}}")
        self.label.setStyleSheet(css.format(self.pcolour.red(),
                                            self.pcolour.green(),
                                            self.pcolour.blue()))