示例#1
1
class BrowserDialogWindow(QMainWindow):
    def __init__(self, ui_controller):
        self._controller = ui_controller
        self.overrideExists = False

        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(640, 200))
        self.setWindowTitle("Transcription")

        central_widget = QWidget(self)
        self.setCentralWidget(central_widget)

        grid_layout = QGridLayout(self)
        central_widget.setLayout(grid_layout)

        fields = self._controller.get_fields(self)

        # text field
        text_field_label = QLabel("Text field:", self)
        text_field_label.setAlignment(QtCore.Qt.AlignRight)

        self.text_field_combo_box = QComboBox(central_widget)
        self.text_field_combo_box.setGeometry(QRect(40, 40, 491, 31))
        self.text_field_combo_box.setObjectName("text_field")
        self.text_field_combo_box.addItems(fields)

        # transcription field
        transcription_field_label = QLabel("Transcription field:", self)
        transcription_field_label.setAlignment(QtCore.Qt.AlignRight)

        self.transcription_field_combo_box = QComboBox(central_widget)
        self.transcription_field_combo_box.setGeometry(QRect(40, 40, 491, 31))
        self.transcription_field_combo_box.setObjectName("transcription_field")
        self.transcription_field_combo_box.addItems(fields)

        # language field
        language_field_label = QLabel("Language:", self)
        language_field_label.setAlignment(QtCore.Qt.AlignRight)

        languages = self._controller.get_languages(self)
        self.language_field_combo_box = QComboBox(central_widget)
        self.language_field_combo_box.setGeometry(QRect(40, 40, 491, 31))
        self.language_field_combo_box.setObjectName("language_field")
        self.language_field_combo_box.addItems(languages)

        # overwrite exist
        self.overwrite_exists_check_box = QCheckBox("Overwrite exist", self)
        self.overwrite_exists_check_box.move(20, 20)
        self.overwrite_exists_check_box.resize(320, 40)

        # start button
        start_button = QPushButton('Start', self)
        start_button.resize(100, 32)
        start_button.move(50, 50)
        start_button.clicked.connect(self.start)

        # cancel button
        cancel_button = QPushButton('Cancel', self)
        cancel_button.resize(100, 32)
        cancel_button.move(50, 50)
        cancel_button.clicked.connect(self.close)

        first_column = 0
        second_column = 1

        text_field_row = 0
        grid_layout.addWidget(text_field_label, text_field_row, first_column)
        grid_layout.addWidget(self.text_field_combo_box, text_field_row, second_column)

        transcription_field_row = 1
        grid_layout.addWidget(transcription_field_label, transcription_field_row, first_column)
        grid_layout.addWidget(self.transcription_field_combo_box, transcription_field_row, second_column)

        language_field_row = 2
        grid_layout.addWidget(language_field_label, language_field_row, first_column)
        grid_layout.addWidget(self.language_field_combo_box, language_field_row, second_column)

        overwrite_exists_row = 3
        grid_layout.addWidget(self.overwrite_exists_check_box, overwrite_exists_row, second_column)

        buttons_exists_row = 4
        grid_layout.addWidget(start_button, buttons_exists_row, first_column)
        grid_layout.addWidget(cancel_button, buttons_exists_row, second_column)

    def start(self):
        self._controller.start(self._controller, self.text_field_combo_box.currentText(),
                               self.transcription_field_combo_box.currentText(),
                               self.language_field_combo_box.currentText(),
                               self.overwrite_exists_check_box.isChecked())
示例#2
0
    def initUI(self):      

        cb = QCheckBox('Show title', self)
        cb.move(20, 20)
        cb.toggle()
        cb.stateChanged.connect(self.changeTitle)
        
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('QCheckBox')
        self.show()
示例#3
0
文件: interface.py 项目: Akriaro/PY
    def initUI(self):
        cb = QCheckBox('Show title', self)
        cb.move(10, 10)
        cb.toggle()
        cb.stateChanged.connect(self.changeTitle)
        btn1 = QPushButton("Button 1", self)
        btn1.move(30, 50)
        btn2 = QPushButton("Button 2", self)
        btn2.move(150, 50)

        btn1.clicked.connect(cnv2)
        btn2.clicked.connect(self.buttonClicked)

        self.statusBar()

        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle('Title')
        self.show()
示例#4
0
class CheckBoxWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(140, 40))
        self.setWindowTitle("Checkbox")

        self.b = QCheckBox("Awesome?", self)
        self.b.stateChanged.connect(self.click_box)
        self.b.move(20, 20)
        self.b.resize(320, 40)

    @staticmethod
    def click_box(state):
        if state == QtCore.Qt.Checked:
            print('Checked')
        else:
            print('Unchecked')
示例#5
0
    def home(self):
        btn = QPushButton('quit', self)
        btn.clicked.connect(self.close_application)
        btn.resize(btn.minimumSizeHint())
        btn.move(0, 60)

        action = QAction(QIcon('../pics/pythonlogo.png'),
                         'Flee the Scene', self)
        action.triggered.connect(self.close_application)

        self.toolBar = self.addToolBar('Extraction')
        self.toolBar.addAction(action)

        checkBox = QCheckBox('Enlarge window', self)
        checkBox.move(50, 25)
        # checkBox.toggle()
        checkBox.stateChanged.connect(self.enlargeWindow)

        self.progress = QProgressBar(self)
        self.progress.setGeometry(100, 62, 250, 20)

        self.btn = QPushButton("Download", self)
        self.btn.clicked.connect(self.download)
        self.btn.resize(btn.minimumSizeHint())
        self.btn.move(100, 100)

        print(self.style().objectName())
        self.styleChoice = QLabel('Windows Vista', self)
        self.styleChoice.move(50, 200)

        comboBox = QComboBox(self)
        comboBox.addItem('motif')
        comboBox.addItem('Windows')
        comboBox.addItem('cde')
        comboBox.addItem('Plastique')
        comboBox.addItem('Cleanlooks')
        comboBox.addItem('windowsvista')
        comboBox.move(50, 250)

        comboBox.activated[str].connect(self.style_choice)

        self.show()
示例#6
0
    def initUI(self):
        # checkBox
        cb = QCheckBox('show title', self)
        cb.move(10, 10)
        cb.toggle()
        cb.stateChanged.connect(self.changeTitle)

        # 颜色混合
        self.col = QColor(0, 0, 0)
        redb = QPushButton('Red', self)
        redb.setCheckable(True)
        redb.move(10, 30)
        redb.clicked[bool].connect(self.setColor)

        grnb = QPushButton('Green', self)
        grnb.setCheckable(True)
        grnb.move(10, 60)
        grnb.clicked[bool].connect(self.setColor)

        blueb = QPushButton('Blue', self)
        blueb.setCheckable(True)
        blueb.move(10, 90)
        blueb.clicked[bool].connect(self.setColor)

        self.square = QFrame(self)
        self.square.setGeometry(150, 20, 50, 50)
        self.square.setStyleSheet("QWidget { background-color: %s}" %
                                  self.col.name())

        # slider 滚动条
        sld = QSlider(Qt.Horizontal, self)
        sld.setFocusPolicy(Qt.NoFocus)
        sld.setGeometry(10, 120, 100, 10)
        sld.valueChanged[int].connect(self.changeValue)

        self.label = QLabel(self)
        self.label.setPixmap(QPixmap('1.png'))
        self.label.setGeometry(150, 90, 80, 80)

        # 进度条ProgressBar
        self.pbar = QProgressBar(self)
        self.pbar.setGeometry(10, 170, 200, 20)
        self.btn = QPushButton('Start', self)
        self.btn.move(10, 200)
        self.btn.clicked.connect(self.doAction)

        self.timer = QBasicTimer()
        self.step = 0

        # Calendar 日历
        cal = QCalendarWidget(self)
        cal.setGridVisible(True)
        cal.move(10, 230)
        cal.clicked[QDate].connect(self.showDate)
        self.lbl = QLabel(self)
        date = cal.selectedDate()
        self.lbl.setText(date.toString())
        self.lbl.move(80, 440)

        self.setGeometry(300, 200, 300, 500)
        self.setWindowTitle('Toggle')
        self.show()
示例#7
0
def window():
    global locationInput
    global nameInput
    global urlInput
    app = QApplication(sys.argv)
    win = QMainWindow()
    win.setGeometry(200, 200, 370, 220)
    win.setWindowTitle("Youtube Downloader in Python")
    win.setWindowIcon(QtGui.QIcon('icon.jpg'))

    #url set
    label = QtWidgets.QLabel(win)
    label.setText("Set Download URL:")
    label.move(10, 5)
    label.resize(150, 50)

    urlInput = textbox = QLineEdit(win)
    urlInput.move(10, 40)
    urlInput.resize(350, 25)

    #location set
    label2 = QtWidgets.QLabel(win)
    label2.setText("Set Download Location:")
    label2.move(10, 55)
    label2.resize(150, 50)

    locationInput = textbox = QLineEdit(win)
    locationInput.move(10, 90)
    locationInput.resize(350, 25)

    #filename set
    label3 = QtWidgets.QLabel(win)
    label3.setText("Set File Name:")
    label3.move(10, 105)
    label3.resize(150, 50)

    nameInput = textbox = QLineEdit(win)
    nameInput.move(10, 145)
    nameInput.resize(350, 25)

    setAll_Download = QtWidgets.QPushButton(win)
    setAll_Download.setText("Download")
    setAll_Download.move(290, 185)
    setAll_Download.resize(70, 25)
    setAll_Download.clicked.connect(setVars)

    #checkbox info
    label = QtWidgets.QLabel(win)
    label.setText("Quality Options:")
    label.move(10, 170)
    label.resize(150, 50)

    cb = QCheckBox(win)
    cb.setText("Best")
    cb.move(110, 182)
    cb.stateChanged.connect(changeQualityUp)

    cb2 = QCheckBox(win)
    cb2.setText("Worst")
    cb2.move(180, 182)
    cb2.stateChanged.connect(changeQualityDown)

    win.show()
    sys.exit(app.exec_())
示例#8
0
文件: qt.py 项目: choisungwook/ember
class App(QWidget):
    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 file dialogs - pythonspot.com'
        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 480
        self.features = []

        self.initUI()

    def initUI(self):
        # trainsetLabel
        self.trainsetLabel = QLabel("trainset: ", self)
        self.trainsetLabel.move(20, 20)

        # trainsetPathLabel
        self.trainsetPathLabel = QLabel("None", self)
        self.trainsetPathLabel.move(80, 18)
        self.trainsetPathLabel.resize(500, 20)

        # Filedialog button
        self.TrainSetbutton = QPushButton('Open', self)
        self.TrainSetbutton.setToolTip('This is an example button')
        self.TrainSetbutton.move(20, 40)
        self.TrainSetbutton.clicked.connect(self.TrainSetbutton_click)

        # trainset csv Label
        self.trainsetcsvLabel = QLabel("trainsetLabel: ", self)
        self.trainsetcsvLabel.move(20, 80)

        # trainsetPathLabel
        self.trainsetcsvPathLabel = QLabel("None", self)
        self.trainsetcsvPathLabel.move(115, 78)
        self.trainsetcsvPathLabel.resize(500, 20)

        # Filedialog button
        self.TrainSetCSVbutton = QPushButton('Open', self)
        self.TrainSetCSVbutton.setToolTip('This is an example button')
        self.TrainSetCSVbutton.move(20, 100)
        self.TrainSetCSVbutton.clicked.connect(self.TrainSetcsvbutton_click)

        #Extract button
        self.extractBtn = QPushButton('Extract features', self)
        self.extractBtn.setToolTip('This is an example button')
        self.extractBtn.move(20, 150)
        self.extractBtn.clicked.connect(self.extractBtn_click)

        #Progress bar
        self.progress = QProgressBar(self)
        self.progress.move(20, 400)
        self.progress.resize(600, 40)
        #self.setMaximum(100)

        # Checkbox on features for extracting
        # String
        self.FeStringChkBox = QCheckBox('features about string', self)
        self.FeStringChkBox.move(20, 200)
        self.FeStringChkBox.resize(500, 30)

        # ImportsInfo
        self.FeImportsChkBox = QCheckBox('features about ImportsInfo', self)
        self.FeImportsChkBox.move(20, 220)
        self.FeImportsChkBox.resize(500, 30)

        # byte histogram
        self.FeBytehistogramChkBox = QCheckBox('features about bytehistorgram',
                                               self)
        self.FeBytehistogramChkBox.move(20, 240)
        self.FeBytehistogramChkBox.resize(500, 30)

        # ByteEntropyHistogram
        self.FeByteEntropyHistogramChkBox = QCheckBox(
            'features about byte-entropy historgram', self)
        self.FeByteEntropyHistogramChkBox.move(20, 260)
        self.FeByteEntropyHistogramChkBox.resize(500, 30)

        self.setWindowTitle('Malware detection using AI')
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.show()

    # Button's event
    def TrainSetbutton_click(self):
        DirName = QFileDialog.getExistingDirectory(self, "Select Folder")
        if DirName:
            self.trainsetPathLabel.setText(DirName)

    def TrainSetcsvbutton_click(self):
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getOpenFileName(
            self,
            "QFileDialog.getOpenFileName()",
            "",
            "All Files (*)",
            options=options)
        if fileName:
            self.trainsetcsvPathLabel.setText(fileName)

    # extract
    def extractBtn_click(self):
        data = pd.read_csv(self.trainsetcsvPathLabel.text(),
                           names=['hash', 'y'])
        extractor = PEFeatureExtractor()

        ErrorCount = 0
        dirlists = os.listdir(self.trainsetPathLabel.text())
        end = len(dirlists)

        #features add
        self.features.clear()
        if self.FeStringChkBox.isChecked():
            self.features.append(features.StringExtractor())
        if self.FeImportsChkBox.isChecked():
            self.features.append(features.ImportsInfo())
        if self.FeBytehistogramChkBox.isChecked():
            self.features.append(features.ByteHistogram())
        if self.FeByteEntropyHistogramChkBox.isChecked():
            self.features.append(features.ByteEntropyHistogram())

        with jsonlines.open(os.path.join('output', "features.jsonl"),
                            'w') as f:
            for idx, _file in enumerate(dirlists):
                path = os.path.join(self.trainsetPathLabel.text(), _file)
                binary = open(path, 'rb').read()

                try:
                    feature = extractor.raw_features(binary, self.features)
                    feature.update({"sha256": _file})  #hash
                    feature.update(
                        {"label":
                         data[data.hash == _file].values[0][1]})  #label
                    f.write(feature)
                except KeyboardInterrupt:
                    sys.exit()
                except Exception as e:
                    ErrorCount += 1
                    print(e)
                self.progress.setValue((idx + 1) / end * 100)

        print("Error : %d" % (ErrorCount))
        print("Done")
示例#9
0
class HyperGui(QMainWindow):
    # Creating the dictionary
    cmd_ext = {
        'abort': 0,
        'hv': 0,
        'vent_sol': 0,
        'res1_sol': 0,
        'res2_sol': 0,
        'mc_pump': 0
    }

    # ******* Constructor for the class *******
    def __init__(self):
        super().__init__()

        self.init_ui()

        # This is creating the thread with an interval that calls the function update_txt
        self.timer = QtCore.QTimer(self)
        self.timer.setInterval(100)
        self.timer.timeout.connect(self.update_txt)

    # ******* This class will only initialize the gui *******
    def init_ui(self):
        # ******* This is the gui status text for the program (Need to change design) *******
        self.gui_status = QTextEdit('<b>Live</b>', self)
        self.gui_status.setReadOnly(True)
        self.gui_status.setAlignment(Qt.AlignCenter)
        self.gui_status.setToolTip('This is a <b>Status</b> text')
        self.gui_status.resize(80, 30)
        self.gui_status.move(5, 5)

        # ******* This is the state text which can change *******
        self.state_txt = QTextEdit('<h2>State:</h2> ', self)
        self.state_txt.setReadOnly(True)
        self.state_txt.setToolTip('This is a <b>State</b> text')
        self.state_txt.resize(200, 35)
        self.state_txt.move(100, 5)

        # ******* This is our pod dynamics table (May change things in the future) *******

        # Adjusting the text box for Pod Dynamics
        self.pod_dyn_txt = QTextEdit('<b>POD DYNAMICS</b> ', self)
        self.pod_dyn_txt.setAlignment(Qt.AlignCenter)
        self.pod_dyn_txt.setReadOnly(True)
        self.pod_dyn_txt.resize(425, 30)
        self.pod_dyn_txt.move(5, 390)

        #  Adjusting the table for Pod Dynamics
        self.pod_dyn_table = QTableWidget(self)
        self.pod_dyn_table.setRowCount(22)
        self.pod_dyn_table.setColumnCount(4)
        self.pod_dyn_table.resize(425, 320)
        self.pod_dyn_table.move(5, 420)
        self.pod_dyn_table.resizeRowsToContents()

        # ******* This is the time and Met text which will change values *******
        self.time_txt = QTextEdit('', self)
        self.time_txt.append('<h2>Time:</h2> \n <h2>MET:</h2>')
        self.time_txt.setReadOnly(True)
        self.time_txt.setToolTip('This is a <b>Time</b> text')
        self.time_txt.resize(200, 80)
        self.time_txt.move(320, 5)

        # ******* This is the brake vent close button for the program (Need to change design) *******
        self.bv_close = QPushButton('Brake Vent \n CLOSE', self)
        self.bv_close.setToolTip('This is a <b>Brake Vent Close</b> button')
        self.bv_close.setEnabled(False)
        self.bv_close.resize(120, 50)
        self.bv_close.move(0, 60)
        self.bv_close.clicked.connect(self.bv_close_handler)
        self.bv_close.update()

        # ******* This is the brake vent open button for the program (Need to change design) *******
        self.bv_open = QPushButton('Brake Vent \n OPEN', self)
        self.bv_open.setToolTip('This is a <b>Brake Vent Open</b> button')
        self.bv_open.resize(120, 50)
        self.bv_open.move(120, 60)
        self.bv_open.clicked.connect(self.bv_open_handler)
        self.bv_open.update()

        # ******* This is the res #1 close button for the program (Need to change design) *******
        self.res1_close = QPushButton('Res #1 \n CLOSE', self)
        self.res1_close.setToolTip('This is a <b>Res #1 Close</b> button')
        self.res1_close.setEnabled(False)
        self.res1_close.resize(120, 50)
        self.res1_close.move(0, 110)
        self.res1_close.clicked.connect(self.res1_close_handler)
        self.res1_close.update()

        # ******* This is the res #1 open button for the program (Need to change design) *******
        self.res1_open = QPushButton('Res #1 \n OPEN', self)
        self.res1_open.setToolTip('This is a <b>Res #1 Open</b> button')
        self.res1_open.resize(120, 50)
        self.res1_open.move(120, 110)
        self.res1_open.clicked.connect(self.res1_open_handler)
        self.res1_open.update()

        # ******* This is the res #2 close button for the program (Need to change design) *******
        self.res2_close = QPushButton('Res #2 \n CLOSE', self)
        self.res2_close.setToolTip('This is a <b>Res #2 Close</b> button')
        self.res2_close.setEnabled(False)
        self.res2_close.resize(120, 50)
        self.res2_close.move(0, 160)
        self.res2_close.clicked.connect(self.res2_close_handler)
        self.res2_close.update()

        # ******* This is the res #2 open button for the program (Need to change design) *******
        self.res2_open = QPushButton('Res #2 \n OPEN', self)
        self.res2_open.setToolTip('This is a <b>Res #2 Open</b> button')
        self.res2_open.resize(120, 50)
        self.res2_open.move(120, 160)
        self.res2_open.clicked.connect(self.res2_open_handler)
        self.res2_open.update()

        # ******* This is the hv+ off button for the program (Need to change design) *******
        self.hv_plus_off = QPushButton('HV (+) \n OFF', self)
        self.hv_plus_off.setToolTip('This is a <b>HV plus OFF</b> button')
        self.hv_plus_off.setEnabled(False)
        self.hv_plus_off.resize(120, 50)
        self.hv_plus_off.move(0, 210)
        self.hv_plus_off.clicked.connect(self.hv_plus_off_handler)
        self.hv_plus_off.update()

        # ******* This is the hv+ on button for the program (Need to change design) *******
        self.hv_plus_on = QPushButton('HV (+) \n ON', self)
        self.hv_plus_on.setToolTip('This is a <b>HV plus ON</b> button')
        self.hv_plus_on.resize(120, 50)
        self.hv_plus_on.move(120, 210)
        self.hv_plus_on.clicked.connect(self.hv_plus_on_handler)
        self.hv_plus_on.update()

        # ******* This is the hv- off button for the program (Need to change design) *******
        self.hv_minus_off = QPushButton('HV (-) \n OFF', self)
        self.hv_minus_off.setToolTip('This is a <b>HV minus OFF</b> button')
        self.hv_minus_off.setEnabled(False)
        self.hv_minus_off.resize(120, 50)
        self.hv_minus_off.move(0, 260)
        self.hv_minus_off.clicked.connect(self.hv_minus_off_handler)
        self.hv_minus_off.update()

        # ******* This is the hv- on button for the program (Need to change design) *******
        self.hv_minus_on = QPushButton('HV (-) \n ON', self)
        self.hv_minus_on.setToolTip('This is a <b>HV minus ON</b> button')
        self.hv_minus_on.resize(120, 50)
        self.hv_minus_on.move(120, 260)
        self.hv_minus_on.clicked.connect(self.hv_minus_on_handler)
        self.hv_minus_on.update()

        # ******* This is the manual throttle checkbox *******
        self.mt_chkbox = QCheckBox('Manual Throttle', self)
        self.mt_chkbox.setToolTip(
            'This is the <b>Manual Throttle</b> Checkbox')
        self.mt_chkbox.move(35, 330)

        # ******* This is the manual throttle slider *******
        self.mt_chkslider = QSlider(Qt.Horizontal, self)
        self.mt_chkslider.setFocusPolicy(Qt.NoFocus)
        self.mt_chkslider.setGeometry(35, 350, 110, 30)

        # ******* This is the LAUNCH button for the program (Need to change design) *******
        self.launch_bttn = QPushButton('LAUNCH', self)
        self.launch_bttn.setToolTip('This is the <b>LAUNCH</b> button')
        self.launch_bttn.resize(90, 90)
        self.launch_bttn.move(250, 90)

        # When you click the launch button you start the thread
        self.launch_bttn.clicked.connect(self.start)

        # ******* This is the ABORT button for the program (Need to change design) *******
        self.abort_bttn = QPushButton('ABORT', self)
        self.abort_bttn.setToolTip('This is the <b>ABORT</b> button')
        self.abort_bttn.resize(90, 90)
        self.abort_bttn.move(250, 180)

        # When you click abort button you stop the thread
        self.abort_bttn.clicked.connect(self.stop)

        # ******* This is the log text box *******

        # Creating the Log Text box
        self.pd_val_txt = QTextEdit('<b>Pod Value</b>', self)
        self.pd_val_txt.setAlignment(Qt.AlignCenter)
        self.pd_val_txt.setReadOnly(True)
        self.pd_val_txt.resize(150, 230)
        self.pd_val_txt.move(550, 5)

        # ******* This is the pod health table *******

        # Creating the Pod Health text
        self.pod_hlth_txt = QTextEdit('<b>Pod Health</b>', self)
        self.pod_hlth_txt.setAlignment(Qt.AlignCenter)
        self.pod_hlth_txt.setReadOnly(True)
        self.pod_hlth_txt.resize(325, 30)
        self.pod_hlth_txt.move(950, 5)

        # Creating the table for Pod Health
        self.pod_hlth_table = QTableWidget(self)
        self.pod_hlth_table.setRowCount(24)
        self.pod_hlth_table.setColumnCount(3)
        self.pod_hlth_table.setHorizontalHeaderLabels(
            ["LOW", "ACTUAL", "HIGH"])
        self.pod_hlth_table.resize(325, 380)
        self.pod_hlth_table.move(950, 35)
        self.pod_hlth_table.resizeRowsToContents()

        # ******* This is the Environmentals table *******

        # Creating the Environmentals text
        self.env_txt = QTextEdit('<b>Environmentals</b>', self)
        self.env_txt.setAlignment(Qt.AlignCenter)
        self.env_txt.setReadOnly(True)
        self.env_txt.resize(321, 30)
        self.env_txt.move(950, 420)

        # Creating the table for Environmentals
        self.env_table = QTableWidget(self)
        self.env_table.setRowCount(9)
        self.env_table.setColumnCount(3)
        self.env_table.setHorizontalHeaderLabels(["LOW", "ACTUAL", "HIGH"])
        self.env_table.resize(321, 295)
        self.env_table.move(950, 450)

        # setGeometry has 4 values to pass in the first two are window position in relation to your computer (x, y)
        # the second two values are the size of the window itself (width, height)
        self.setGeometry(0, 0, 2000, 1000)

        # Sets the title of the window
        self.setWindowTitle('HyperLynx GUI')

    # ******* Other Functions for the class *******

    # This function will start the thread
    def start(self):
        self.timer.start()

    # This function will stop the thread
    def stop(self):
        self.timer.stop()

    # This function will handle when bv close button is clicked
    def bv_close_handler(self):
        self.bv_close.setEnabled(False)
        self.bv_open.setEnabled(True)
        self.update()

    # This function will handle when bv open button is clicked
    def bv_open_handler(self):
        self.bv_close.setEnabled(True)
        self.bv_open.setEnabled(False)
        self.update()

    # This function will handle when res1 close button is clicked
    def res1_close_handler(self):
        self.res1_close.setEnabled(False)
        self.res1_open.setEnabled(True)
        self.update()

    # This function will handle when res1 open button is clicked
    def res1_open_handler(self):
        self.res1_close.setEnabled(True)
        self.res1_open.setEnabled(False)
        self.update()

    # This function will handle when res2 close button is clicked
    def res2_close_handler(self):
        self.res2_close.setEnabled(False)
        self.res2_open.setEnabled(True)
        self.update()

    # This function will handle when res2 open button is clicked
    def res2_open_handler(self):
        self.res2_close.setEnabled(True)
        self.res2_open.setEnabled(False)
        self.update()

    # This function will handle when hv+ off close button is clicked
    def hv_plus_off_handler(self):
        self.hv_plus_off.setEnabled(False)
        self.hv_plus_on.setEnabled(True)
        self.update()

    # This function will handle when hv+ on button is clicked
    def hv_plus_on_handler(self):
        self.hv_plus_off.setEnabled(True)
        self.hv_plus_on.setEnabled(False)
        self.update()

    # This function will handle when hv- off button is clicked
    def hv_minus_off_handler(self):
        self.hv_minus_off.setEnabled(False)
        self.hv_minus_on.setEnabled(True)
        self.update()

    # This function will handle when hv- on button is clicked
    def hv_minus_on_handler(self):
        self.hv_minus_off.setEnabled(True)
        self.hv_minus_on.setEnabled(False)
        self.update()

    # This function is running on the thread separate from initializing the gui
    def update_txt(self):
        loop_cnt = 0

        # Its arbitrary but if I did something like while True it breaks the GUI
        while loop_cnt < 50:
            # Random number generator
            test_val = random.uniform(0, 3)

            # Update the items of the environmental table
            self.env_table.setItem(0, 0, QTableWidgetItem("0.0"))
            self.env_table.setItem(0, 1, QTableWidgetItem(str(test_val)))
            self.env_table.setItem(0, 2, QTableWidgetItem("3.0"))

            loop_cnt += 1
class MyGUI(QMainWindow):
    def __init__(self):
        super(MyGUI, self).__init__()
        self.initUI()  # initialize interface elements
        self.initEvents()  # initialize click events (listeners)
        self.cap = cv2.VideoCapture(0)  # webcam object
        self.pixmap = None
        self.firstPixmap = None  # first captured image. to be displayed at the end
        self.capturing = False
        self.confirmedImagesCounter = 0  # how many images are confirmed by user so far
        self.detectingCorners = False
        self.done_drawPredicted = False
        self.currentCorners = None  # array of last detected corners
        self.predicted2D = None
        self.homographies = []  # list of homographies of each captured image
        self.capturedImagePoints = {
        }  # dictionary of 2D points on captured image
        self.objectPoints = {}  # dictionary of 3D points on chessboard
        self.A = None  #intrinsic
        self.Rts = []  #extrinsic
        self.points_in_row, self.points_in_column = no_of_rows, no_of_columns  #number of rows and columns of your Checkerboard
        x, y = square_size, square_size  #size of square on the Checkerboard in mm
        # points in 3D
        self.capturedObjectPointsLR = [
            [i * x, j * y, 0] for i in range(self.points_in_row, 0, -1)
            for j in range(self.points_in_column, 0, -1)
        ]
        self.capturedObjectPointsRL = list(
            reversed(self.capturedObjectPointsLR))

    def initUI(self):
        # set window size & title
        self.setWindowTitle('Camera Calibration')
        self.setGeometry(20, 80, 660, 610)

        # initialize capture button
        self.captureButton = QPushButton('START', self)
        self.captureButton.resize(100, 40)
        self.captureButton.move(280, 10)

        # initialize checkbox
        self.detectCornersCheckbox = QCheckBox("Detect Corners", self)
        self.detectCornersCheckbox.move(10, 10)

        # initialize images counter label
        self.counterLabel = QLabel('Images taken: 0', self)
        self.counterLabel.resize(150, 40)
        self.counterLabel.move(430, 10)

        # initialize captured image label
        self.imageLabel = QLabel('Image will be displayed here', self)
        self.imageLabel.setAlignment(Qt.AlignCenter | Qt.AlignVCenter)
        self.imageLabel.resize(640, 480)
        self.imageLabel.move(10, 60)
        self.imageLabel.setFrameShape(QFrame.Box)

        # initialize confirm button
        self.confirmButton = QPushButton('CONFIRM', self)
        self.confirmButton.resize(100, 30)
        self.confirmButton.move(60, 550)
        self.confirmButton.hide()

        # initialize ignore button
        self.ignoreButton = QPushButton('IGNORE', self)
        self.ignoreButton.resize(100, 30)
        self.ignoreButton.move(280, 550)
        self.ignoreButton.hide()

        # initialize done button
        self.doneButton = QPushButton('DONE', self)
        self.doneButton.resize(100, 30)
        self.doneButton.move(500, 550)

        # initialize signature label
        self.signatureLabel = QLabel(
            'Coded by Obeida ElJundi & Mohammed Dhaybi', self)
        self.signatureLabel.resize(660, 20)
        self.signatureLabel.move(0, 590)
        self.signatureLabel.setAlignment(Qt.AlignCenter | Qt.AlignVCenter)

    def initEvents(self):
        """ initialize click events (listeners) """
        self.captureButton.clicked.connect(self.captureClicked)
        self.ignoreButton.clicked.connect(self.ignoreClicked)
        self.confirmButton.clicked.connect(self.confirmClicked)
        self.doneButton.clicked.connect(self.doneClicked)
        self.detectCornersCheckbox.stateChanged.connect(
            self.detectCornersCheckboxClicked)

    def paintEvent(self, event):
        painter = QPainter(self)
        if self.pixmap:  # display image taken from webcam
            self.imageLabel.setAlignment(Qt.AlignLeft | Qt.AlignTop)
            self.imageLabel.setText('')
            painter.drawPixmap(10, 60, self.pixmap)
        if self.capturing: self.captureImage()
        if self.done_drawPredicted:
            painter.drawPixmap(10, 60, self.firstPixmap)
            pen = QPen(Qt.white, 2, Qt.SolidLine)  #darkCyan
            painter.setPen(pen)
            for pixel in self.predicted2D:
                cx = int(pixel[0] + 10)
                cy = int(pixel[1] + 60)
                painter.drawEllipse(cx - 5, cy - 5, 10, 10)
                painter.drawLine(cx - 5, cy, cx + 5, cy)
                painter.drawLine(cx, cy - 5, cx, cy + 5)

    def captureClicked(self):
        if self.capturing == False:
            self.capturing = True
            self.captureButton.setText('STOP')
        else:
            self.capturing = False
            self.captureButton.setText('START')

    def detectCornersCheckboxClicked(self, state):
        self.detectingCorners = state == Qt.Checked

    def captureImage(self):
        """ captures frame from webcam & tries to detect corners on chess board """
        ret, frame = self.cap.read()  # read frame from webcam
        if ret:  # if frame captured successfully
            frame_inverted = cv2.flip(frame, 1)  # flip frame horizontally
            if self.detectingCorners:  # if detect corners checkbox is checked
                cornersDetected, corners, imageWithCorners = self.detectCorners(
                    frame_inverted)  # detect corners on chess board
                if cornersDetected:  # if corners detected successfully
                    self.currentCorners = corners
                    self.frameWithCornersCaptured()
            self.pixmap = self.imageToPixmap(frame_inverted)
            self.update()

    def frameWithCornersCaptured(self):
        self.captureClicked()  #fix last frame
        self.toggleConfirmAndIgnoreVisibility(True)

    def confirmClicked(self):
        self.confirmedImagesCounter += 1
        if self.confirmedImagesCounter == 1: self.firstPixmap = self.pixmap
        #if self.confirmedImagesCounter == 3: self.doneButton.show()
        self.counterLabel.setText('Images taken: ' +
                                  str(self.confirmedImagesCounter))
        self.capturedImagePoints[
            self.confirmedImagesCounter] = self.currentCorners
        if self.currentCorners[0, 0, 0] < self.currentCorners[-1, 0, 0]:
            capturedObjectPoints = self.capturedObjectPointsLR
        else:
            capturedObjectPoints = self.capturedObjectPointsRL
        self.objectPoints[self.confirmedImagesCounter] = capturedObjectPoints

        h = self.computeHomography(self.currentCorners, capturedObjectPoints)
        self.homographies.append(h)
        self.toggleConfirmAndIgnoreVisibility(False)
        self.captureClicked()  #continue capturing

    def ignoreClicked(self):
        self.captureClicked()  #continue capturing
        self.toggleConfirmAndIgnoreVisibility(False)

    def doneClicked(self):
        if self.confirmedImagesCounter < 3:
            rem = 3 - self.confirmedImagesCounter
            QMessageBox.question(
                self, 'Warning!',
                "the number of captured photos should be at least 3. Please take "
                + str(rem) + " more photos", QMessageBox.Ok)
        #elif self.confirmedImagesCounter % 2 != 0:
        #	QMessageBox.question(self, 'Warning!', "the number of captured photos should be even. Please take one more photo!",QMessageBox.Ok)
        else:
            self.captureClicked()  #stop capturing
            M = self.buildMmatrix()
            b = self.getMinimumEigenVector(M)
            #print(type(b),b)
            v0, lamda, alpha, betta, gamma, u0, A = self.calculateIntrinsicParam(
                b)
            #self.A = A
            Rt = self.calculateExtrinsicParam(A)
            #self.Rts = self.calculateAllExtrinsicParam(A, lamda)
            #self.built_in_calib()
            self.predicted2D = self.predict2Dpoints(self.objectPoints[1], A,
                                                    Rt, lamda)
            self.done_drawPredicted = True
            self.update()
            #x = self.MLE(A,Rt)
            #A_opt = np.array([[x[0],x[1],x[2]],[0,x[3],x[4]],[0,0,1]])
            #Rt_opt = np.array([[x[5],x[6],x[11]],[x[7],x[8],x[12]],[x[9],x[10],x[13]]])
            #print('A_opt:',A_opt, 'Rt_opt:',Rt_opt)
            print(
                'Done :)\nCheck intrinsic.txt & extrinsic.txt & predicted VS actual.txt'
            )

    def toggleConfirmAndIgnoreVisibility(self, visibility=True):
        if visibility:
            self.ignoreButton.show()
            self.confirmButton.show()
            #self.doneButton.show()
        else:
            self.ignoreButton.hide()
            self.confirmButton.hide()
            #self.doneButton.hide()

    def detectCorners(self, image):
        criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30,
                    0.001)
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        ret, corners = cv2.findChessboardCorners(gray,
                                                 (no_of_columns, no_of_rows),
                                                 cv2.CALIB_CB_FAST_CHECK)
        if ret:
            cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria)
            cv2.drawChessboardCorners(image, (no_of_columns, no_of_rows),
                                      corners, ret)
        return ret, corners, image

    def imageToPixmap(self, image):
        qformat = QImage.Format_RGB888
        img = QImage(image, image.shape[1], image.shape[0], image.strides[0],
                     qformat)
        img = img.rgbSwapped()  # BGR > RGB
        return QPixmap.fromImage(img)

    def displayImage(self):
        self.imageLabel.setPixmap(self.pixmap)

    ####################### CALIBRATION STUFF ###########################

    def computeHomography(self, points2D, points3D):
        U = self.buildUmatrix(points2D, points3D)
        return self.getMinimumEigenVector(U)

    def buildUmatrix(self, points2D, points3D):
        rows = self.points_in_row * self.points_in_column * 2
        U = np.zeros((rows, 9))
        for i in range(len(points2D)):
            U[i * 2, 0] = points3D[i][0]  #Px
            U[i * 2, 1] = points3D[i][1]  #Py
            U[i * 2, 2] = 1
            U[i * 2, 3:6] = 0
            U[i * 2, 6:9] = U[i * 2, 0:3] * -points2D[i, 0, 0]

            U[i * 2 + 1, 0:3] = 0
            U[i * 2 + 1, 3:6] = U[i * 2, 0:3]
            U[i * 2 + 1, 6:9] = U[i * 2, 0:3] * -points2D[i, 0, 1]
        return U

    def calculateV(self, h1, h2):
        v = np.zeros((6, 1))
        v[0, 0] = h1[0] * h2[0]
        v[1, 0] = h1[0] * h2[1] + h1[1] * h2[0]
        v[2, 0] = h1[1] * h2[1]
        v[3, 0] = h1[2] * h2[0] + h1[0] * h2[2]
        v[4, 0] = h1[2] * h2[1] + h1[1] * h2[2]
        v[5, 0] = h1[2] * h2[2]
        return v

    def buildMmatrix(
            self):  # Build the matrix made by homographies to calculate B
        M = np.zeros((self.confirmedImagesCounter * 2, 6))
        for i in range(len(self.homographies)):
            h1 = self.homographies[i][::3]
            h2 = self.homographies[i][1::3]
            v12 = self.calculateV(h1, h2)  #6X1
            v11 = self.calculateV(h1, h1)  #6X1
            v22 = self.calculateV(h2, h2)  #6X1
            M[2 * i, :] = v12.T  # 1X6
            M[2 * i + 1, :] = (v11 - v22).T  # 1X6
        return M

    def calculateIntrinsicParam(self, b):
        (B11, B12, B22, B13, B23, B33) = b
        v0 = (B12 * B13 - B11 * B23) / (B11 * B22 - B12**2)
        lamda = B33 - (B13**2 + v0 * (B12 * B13 - B11 * B23)) / B11
        alpha = np.sqrt(lamda / B11)
        betta = np.sqrt((lamda * B11) / (B11 * B22 - B12**2))
        gamma = (-B12 * betta * alpha**2) / lamda
        u0 = (gamma * v0 / betta) - (B13 * alpha**2 / lamda)
        A = np.array([[alpha, gamma, u0], [0, betta, v0], [0, 0, 1]])
        #write intrinsic parameters to file
        if not os.path.exists('./output'):
            os.mkdir('./output')  #make output folder if not exists
        with open('./output/intrinsic.txt', 'w+') as f:
            f.write('A=\n{}'.format(A))
        return v0, lamda, alpha, betta, gamma, u0, A

    def calculateExtrinsicParam(self, A):
        h1 = self.homographies[0][::3]  # 1st column of 1st image homography
        h2 = self.homographies[0][1::3]  # 2nd column of 1st image homography
        h3 = self.homographies[0][2::3]  # 3rd column of 1st image homography
        A_inv = np.linalg.inv(A)
        Ah1 = np.dot(A_inv, h2)
        lamda = 1 / np.sqrt(np.dot(Ah1, Ah1))
        r1 = lamda * np.dot(A_inv, h1)  # 1st column or rotation matrix
        r2 = lamda * np.dot(A_inv, h2)  # 2nd column or rotation matrix
        r3 = np.cross(r1, r2)  # 3rd column or rotation matrix
        t = lamda * np.dot(A_inv, h3)  # translation vector
        Rt = np.array([r1.T, r2.T, r3.T, t.T]).T
        #write extrinsic parameters to file
        if not os.path.exists('./output'):
            os.mkdir('./output')  #make output folder if not exists
        with open('./output/extrinsic.txt', 'w+') as f:
            f.write('[R|t]=\n{}'.format(Rt))
        return Rt

    def calculateAllExtrinsicParam(self, A, lamda):
        Rts = []
        A_inv = np.linalg.inv(A)
        for homography in self.homographies:
            h1 = homography[::3]
            h2 = homography[1::3]
            h3 = homography[2::3]
            r1 = lamda * np.dot(A_inv, h1)
            r2 = lamda * np.dot(A_inv, h2)
            r3 = np.cross(r1, r2)
            t = lamda * np.dot(A_inv, h3)
            Rt = np.array([r1.T, r2.T, r3.T, t.T]).T
            Rts.append(Rt)
        return Rts

    def getMinimumEigenVector(self, U):
        """ return eigen vector of square matrix U with the minimum eigen value """
        P = np.dot(U.T, U)
        w, v = np.linalg.eig(P)
        i = np.where(w == np.min(w))
        e1 = v[:, i[0][0]]
        return e1

    def predict2Dpoints(self, points3D, A, Rt, lamda):
        Rt = np.delete(Rt, 2, axis=1)  # remove r3 column
        points3D = [[p[0], p[1], 1] for p in points3D]
        imgpoints = np.array(
            [np.squeeze(p) for p in self.capturedImagePoints[1]])
        imgpoints = np.append(imgpoints,
                              np.ones((imgpoints.shape[0], 1)),
                              axis=1)  # append 1 to each 2D point
        pred = []
        if not os.path.exists('./output'):
            os.mkdir('./output')  #make output folder if not exists
        f = open('./output/predicted VS actual.txt', 'w+')
        f.write('predicted >> actual')
        for p3d, p2d in zip(points3D, imgpoints):
            p3d = np.array(p3d)
            tmp = np.dot(np.dot(A, Rt), p3d)
            tmp = tmp / tmp[2]
            pred.append(tmp)
            f.write('\n{} , {}  >>  {} , {}'.format(tmp[0], tmp[1], p2d[0],
                                                    p2d[1]))
        f.close()
        return pred

    def built_in_calib(self):  #not used!
        objpoints = np.array([
            np.array(p) for k in sorted(self.objectPoints.keys())
            for p in self.objectPoints[k]
        ])
        #objpoints = objpoints.reshape(1,objpoints.shape[0],objpoints.shape[1])
        objpoints = objpoints.astype('float32')
        print('objpoints.shape:', objpoints.shape)
        imgpoints = np.array([
            np.squeeze(p, axis=0)
            for k in sorted(self.capturedImagePoints.keys())
            for p in self.capturedImagePoints[k]
        ])
        #imgpoints = imgpoints.reshape(1,imgpoints.shape[0],imgpoints.shape[1])
        imgpoints = imgpoints.astype('float32')
        print('imgpoints.shape:', imgpoints.shape)
        ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera([objpoints],
                                                           [imgpoints],
                                                           (640, 480), None,
                                                           None)
        print('mtx:', mtx)
        print('rvecs, tvecs =', rvecs, tvecs)

    def loss_function(self, x):  #not used!
        #A, Rt = ARt
        A = np.array([[x[0], x[1], x[2]], [0.0, x[3], x[4]], [0.0, 0.0, 1.0]])
        Rt = np.array([[x[5], x[6], x[11]], [x[7], x[8], x[12]],
                       [x[9], x[10], x[13]]])
        #Rt = np.delete(Rt, 2, axis=1) # remove r3 column
        ARt = np.dot(A, Rt)
        #points3D = np.array([[p[0],p[1],1] for p in points3D])
        objpoints = np.array([
            np.array(p) for k in sorted(self.objectPoints.keys())
            for p in self.objectPoints[k]
        ])
        objpoints[:, 2] = 1.0
        imgpoints = np.array([
            np.squeeze(p) for k in sorted(self.capturedImagePoints.keys())
            for p in self.capturedImagePoints[k]
        ])
        imgpoints = np.append(imgpoints,
                              np.ones((imgpoints.shape[0], 1)),
                              axis=1)  # append 1 to each 2D point
        #print('loss_function.points3D.shape:',objpoints.shape)
        #print('loss_function.points2D.shape:',imgpoints.shape)
        #print('loss_function.points2D[0]:',imgpoints[0])
        #loss = 0
        f = []
        for p3d, p2d in zip(objpoints, imgpoints):
            pred = np.dot(ARt, p3d)
            err = np.dot(p2d - pred, p2d - pred)
            #loss += err
            f.append(err)
        #return loss
        return f

    def MLE(self, A, Rt):  #not used!
        x = [
            A[0, 0], A[0, 1], A[0, 2], A[1, 1], A[1, 2], Rt[0, 0], Rt[0, 1],
            Rt[1, 0], Rt[1, 1], Rt[2, 0], Rt[2, 1], Rt[0, 3], Rt[1, 3], Rt[2,
                                                                           3]
        ]
        sol = optimize.root(self.loss_function, x, jac=False, method='lm')
        return sol.x
示例#11
0
文件: 3menu.py 项目: FYPYTHON/notes
    def initContralUI(self):
        # 对话框
        self.contral_ui.btn = QPushButton('Open Dialog', self.contral_ui)
        self.contral_ui.btn.move(20, 20)
        self.contral_ui.btn.clicked.connect(self.showDialog)

        self.contral_ui.le = QLineEdit(self.contral_ui)
        self.contral_ui.le.move(130, 22)
        size = self.geometry()
        x = size.x()
        y = size.y()
        w = size.width()
        h = size.height()
        self.contral_ui.setGeometry(x+w+1,y,w,h)

        # 颜色框
        col = QColor(0, 0, 0)

        self.contral_ui.color_btn = QPushButton('Color Dialog', self.contral_ui)
        self.contral_ui.color_btn.move(20, 60)

        self.contral_ui.color_btn.clicked.connect(self.showColorDialog)

        self.contral_ui.frm = QFrame(self.contral_ui)
        self.contral_ui.frm.setStyleSheet("QWidget { background-color: %s }"
                               % col.name())
        self.contral_ui.frm.setGeometry(130, 60, 100, 20)

        # 字体框
        self.contral_ui.font_btn = QPushButton('Font Dialog', self.contral_ui)
        self.contral_ui.font_btn.setSizePolicy(QSizePolicy.Fixed,
                          QSizePolicy.Fixed)
        self.contral_ui.font_btn.move(20, 100)

        self.contral_ui.font_btn.clicked.connect(self.showFontDialog)
        self.contral_ui.lbl = QLabel('Knowledge only matters', self.contral_ui)
        self.contral_ui.lbl.move(130, 105)

        # checkbox
        cb = QCheckBox('Show title', self.contral_ui)
        cb.move(20, 150)
        cb.toggle()
        cb.stateChanged.connect(self.changeTitle)

        # 日历控件
        self.contral_ui.cal = QCalendarWidget(self.contral_ui)
        self.contral_ui.cal.setGridVisible(True)
        self.contral_ui.cal.move(20, 170)
        self.contral_ui.cal.clicked[QDate].connect(self.showDate)

        self.contral_ui.date_lbl = QLabel(self.contral_ui)
        date = self.contral_ui.cal.selectedDate()
        self.contral_ui.date_lbl.setText(date.toString())
        self.contral_ui.date_lbl.move(130, 380)

        # 下拉框
        self.contral_ui.combo = QComboBox(self.contral_ui)
        self.contral_ui.combo.addItem("Ubuntu")
        self.contral_ui.combo.addItem("Mandriva")
        self.contral_ui.combo.addItem("Fedora")
        self.contral_ui.combo.addItem("Arch")
        self.contral_ui.combo.addItem("Gentoo")
        self.contral_ui.combo.move(50, 400)
        self.contral_ui.combo.activated[str].connect(self.onActivated)

        self.combo_lbl = QLabel("Ubuntu", self.contral_ui)
        self.combo_lbl.move(20,425)
        # self.combo_lbl.setFixedSize()

        # self.contral_ui.resize(600,500)
        self.contral_ui.setWindowTitle('Contral Widget')
class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(950, 610))
        self.setWindowTitle("Tanks and Alliances Tool")

        oImage = QImage("tank2.jpg")
        sImage = oImage.scaled(QSize(950, 610))  # resize Image to widgets size
        palette = QPalette()
        palette.setBrush(10, QBrush(sImage))  # 10 = Windowrole
        self.setPalette(palette)

        self.combo_label = QLabel(self)
        self.combo_label.setText('Graph type:')
        self.combo_label.move(20, 40)

        self.combo = QComboBox(self)
        self.combo.addItem("All Tanks")
        self.combo.addItem("All Alliances")
        self.combo.resize(150, 32)
        self.combo.move(130, 40)
        self.combo.activated[str].connect(self.onActivated)

        self.core_label = QLabel(self)
        self.core_label.setText('Cores:')
        self.core_label.move(20, 80)

        self.core_val = QLineEdit(self)
        self.core_val.move(130, 80)
        self.core_val.resize(150, 32)

        self.year_label = QLabel(self)
        self.year_label.setText('Alliances from:')
        self.year_label.move(20, 120)

        self.year_val = QLineEdit(self)
        self.year_val.move(130, 120)
        self.year_val.resize(150, 32)

        self.country_label = QLabel(self)
        self.country_label.setText('Country name:')
        self.country_label.move(370, 120)

        self.country_name = QLineEdit(self)
        self.country_name.move(480, 120)
        self.country_name.resize(150, 32)

        self.but_allie = QPushButton('Generate graph', self)
        self.but_allie.clicked.connect(self.clickMethodAllie)
        self.but_allie.resize(150, 32)
        self.but_allie.move(130, 160)

        self.but_tanks_for_country = QPushButton('Draw for country', self)
        self.but_tanks_for_country.clicked.connect(self.clickMethodCountry)
        self.but_tanks_for_country.resize(150, 32)
        self.but_tanks_for_country.move(480, 160)
        # --------------------------------------------------------------------------
        self.cb = QCheckBox('Generate more', self)
        self.cb.resize(150, 32)
        self.cb.move(20, 10)
        self.cb.toggle()
        self.cb.stateChanged.connect(self.changeTitle)
        # --------------------------------------------------------------------------
        self.check_1 = QCheckBox('Tanks distribution', self)
        self.check_1.resize(350, 32)
        self.check_1.toggle()
        self.check_1.move(370, 20)

        self.check_2 = QCheckBox('Number of all tanks of allies', self)
        self.check_2.resize(350, 32)
        self.check_2.toggle()
        self.check_2.move(370, 40)

        self.check_3 = QCheckBox('Number of all tanks of tank sellers', self)
        self.check_3.resize(380, 32)
        self.check_3.toggle()
        self.check_3.move(370, 60)

        self.combo_tanks = QComboBox(self)
        _, tank_names = zip(*sql.get_popular_tanks_by_number_of_owners(
            min_pop=3))
        for t in tank_names:
            self.combo_tanks.addItem(t)
        self.combo_tanks.resize(150, 32)
        self.combo_tanks.move(780, 120)

        self.tank_label = QLabel(self)
        self.tank_label.setText('Tank type:')
        self.tank_label.resize(150, 32)
        self.tank_label.move(700, 120)

        self.but_countries_for_tanks = QPushButton('Draw for tank', self)
        self.but_countries_for_tanks.clicked.connect(self.clickMethodTank)
        self.but_countries_for_tanks.resize(150, 32)
        self.but_countries_for_tanks.move(780, 160)

        # self.btn = QPushButton('Try me!', self)
        # self.btn.clicked.connect(self.onClick)
        # self.btn.resize(150, 32)
        # self.btn.move(500, 500)

    def onClick(self):
        self.SW = SecondWindow()
        self.SW.show()

    def changeTitle(self, state):

        if state == Qt.Checked:
            self.setWindowTitle('QCheckBox')
        else:
            self.setWindowTitle(' ')

    def clickMethodAllie(self):

        print('test: ' + self.country_name.text())
        print('test: ' + self.year_val.text())
        print('test: ' + self.combo.currentText())
        print('test: ' + self.core_val.text())

        if self.combo.currentText() == 'All Alliances':
            start_year = 0
            alliances = []
            if self.year_val.text():
                try:
                    start_year = int(self.year_val.text())
                except:
                    QMessageBox.about(self, 'Wrong input!',
                                      'Year number has to be an integer.')
                    return
            for res in session.query(Alliance.name_1, Alliance.name_2).filter(
                    Alliance.start_year >= start_year).all():
                alliances.append(res)
            G_allies = nx.Graph()
            G_allies.add_edges_from(alliances)
            G_allies = G_allies.to_undirected()

            if self.core_val.text():
                try:
                    G_allies = nx.k_core(G_allies, k=int(self.core_val.text()))
                except:
                    QMessageBox.about(self, 'Wrong input!',
                                      'Core size has to be an integer.')
            gd.draw_alliance(G_allies)

        elif self.combo.currentText() == 'All Tanks':
            seller_buyers = []

            for res in session.query(Tank.owner_name, Tank.seller_name).all():
                seller_buyers.append(res)
            G_sell_buy = nx.Graph()
            G_sell_buy.add_edges_from(seller_buyers)
            G_sell_buy = G_sell_buy.to_undirected()

            if self.core_val.text():
                G_sell_buy.remove_edges_from(nx.selfloop_edges(G_sell_buy))

                try:
                    G_sell_buy = nx.k_core(G_sell_buy,
                                           k=int(self.core_val.text()))
                except:
                    QMessageBox.about(self, 'Wrong input!',
                                      'Core size has to be an integer.')
            gd.draw_tanks(G_sell_buy)

    def clickMethodCountry(self):

        print('test: ' + self.country_name.text())
        print('test: ' + self.year_val.text())
        print('test: ' + self.combo.currentText())

        if self.country_name.text():
            try:
                if self.check_1.isChecked():
                    sql.get_tanks(self.country_name.text(), session)
                if self.check_2.isChecked():
                    sql.get_sum_of_tanks_from_allies(self.country_name.text(),
                                                     session)
                if self.check_3.isChecked():
                    sql.get_tank_sellers_tank_sum(self.country_name.text(),
                                                  session)
            except:
                QMessageBox.about(self, 'Wrong input!',
                                  'Try to change the country name.')

    def clickMethodTank(self):

        tank_name = self.combo_tanks.currentText()
        sql.get_countries_with_tank(tank_name)

    def onActivated(self, text):
        print(text)
        if text == 'All Tanks':
            self.year_val.setEnabled(False)
        else:
            self.year_val.setEnabled(True)
class MikochikuAlarm(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.search_ch_id = "UC-hM6YJuNYVAmUWxeIr9FeA"
        self.ch_dic = {
            "ときのそら": "UCp6993wxpyDPHUpavwDFqgg",
            "AZKi": "UC0TXe_LYZ4scaW2XMyi5_kw",
            "ロボ子さん": "UCDqI2jOz0weumE8s7paEk6g",
            "さくらみこ": "UC-hM6YJuNYVAmUWxeIr9FeA",
            "白上フブキ": "UCdn5BQ06XqgXoAxIhbqw5Rg",
            "夏色まつり": "UCQ0UDLQCjY0rmuxCDE38FGg",
            "夜空メル": "UCD8HOxPs4Xvsm8H0ZxXGiBw",
            "赤井はあと": "UC1CfXB_kRs3C-zaeTG3oGyg",
            "アキ・ローゼンタール": "UCFTLzh12_nrtzqBPsTCqenA",
            "湊あくあ": "UC1opHUrw8rvnsadT-iGp7Cg",
            "癒月ちょこ": "UC1suqwovbL1kzsoaZgFZLKg",
            "百鬼あやめ": "UC7fk0CB07ly8oSl0aqKkqFg",
            "紫咲シオン": "UCXTpFs_3PqI41qX2d9tL2Rw",
            "大空スバル": "UCvzGlP9oQwU--Y0r9id_jnA",
            "大神ミオ": "UCp-5t9SrOQwXMU7iIjQfARg",
            "猫又おかゆ": "UCvaTdHTWBGv3MKj3KVqJVCw",
            "戌神ころね": "UChAnqc_AY5_I3Px5dig3X1Q",
            "不知火フレア": "UCvInZx9h3jC2JzsIzoOebWg",
            "白銀ノエル": "UCdyqAaZDKHXg4Ahi7VENThQ",
            "宝鐘マリン": "UCCzUftO8KOVkV4wQG1vkUvg",
            "兎田ぺこら": "UC1DCedRgGHBdm81E1llLhOQ",
            "潤羽るしあ": "UCl_gCybOJRIgOXw6Qb4qJzQ",
            "星街すいせい": "UC5CwaMl1eIgY8h02uZw7u8A",
            "天音かなた": "UCZlDXzGoo7d44bwdNObFacg",
            "桐生ココ": "UCS9uQI-jC3DE0L4IpXyvr6w",
            "角巻わため": "UCqm3BQLlJfvkTsX_hvm0UmA",
            "常闇トワ": "UC1uv2Oq6kNxgATlCiez59hw",
            "姫森ルーナ": "UCa9Y57gfeY0Zro_noHRVrnw"
        }
        self.old_video_id_list = []
        self.initUI()

    def initUI(self):

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.check_live)
        self.timer.setInterval(5000)
        self.timer.start()

        label = QLabel(self)
        label.setPixmap(QPixmap(resource_path("icon.ico")))
        label.move(60, 70)

        self.alarm_cb = QCheckBox('配信が始まったらアラームを鳴らす', self)
        self.alarm_cb.move(20, 20)
        self.alarm_cb.toggle()

        # self.loop_cb = QCheckBox('アラームをループ再生する', self)
        # self.loop_cb.move(20, 40)
        # self.loop_cb.toggle()

        self.webbrowser_cb = QCheckBox('配信が始まったら自動でブラウザを開く', self)
        self.webbrowser_cb.move(20, 40)
        self.webbrowser_cb.toggle()

        self.alarm_stop = QPushButton("待機中", self)
        # self.alarm_stop.setCheckable(True)
        # self.alarm_stop.setEnabled(False)
        self.alarm_stop.move(80, 360)
        self.alarm_stop.clicked[bool].connect(self.stop_alarm)

        self.listWidget = QListWidget(self)
        self.listWidget.resize(300, 150)
        self.listWidget.addItem("ときのそら")
        self.listWidget.addItem("AZKi")
        self.listWidget.addItem("ロボ子さん")
        self.listWidget.addItem("さくらみこ")
        self.listWidget.addItem("白上フブキ")
        self.listWidget.addItem("夏色まつり")
        self.listWidget.addItem("夜空メル")
        self.listWidget.addItem("赤井はあと")
        self.listWidget.addItem("アキ・ローゼンタール")
        self.listWidget.addItem("湊あくあ")
        self.listWidget.addItem("癒月ちょこ")
        self.listWidget.addItem("百鬼あやめ")
        self.listWidget.addItem("紫咲シオン")
        self.listWidget.addItem("大空スバル")
        self.listWidget.addItem("大神ミオ")
        self.listWidget.addItem("猫又おかゆ")
        self.listWidget.addItem("戌神ころね")
        self.listWidget.addItem("不知火フレア")
        self.listWidget.addItem("白銀ノエル")
        self.listWidget.addItem("宝鐘マリン")
        self.listWidget.addItem("兎田ぺこら")
        self.listWidget.addItem("潤羽るしあ")
        self.listWidget.addItem("星街すいせい")
        self.listWidget.addItem("天音かなた")
        self.listWidget.addItem("桐生ココ")
        self.listWidget.addItem("角巻わため")
        self.listWidget.addItem("常闇トワ")
        self.listWidget.addItem("姫森ルーナ")

        self.listWidget.move(30, 200)

        self.listWidget.itemClicked.connect(self.clicked)

        self.setGeometry(300, 300, 400, 400)
        self.setWindowTitle('みこ畜アラーム')

        self.show()

    def clicked(self, qmodelindex):
        self.search_ch_id = self.ch_dic[self.listWidget.currentItem().text()]

    def check_live(self):
        buff_video_id_set = self.get_live_video_id(self.search_ch_id)
        print(self.listWidget.selectedIndexes())
        if self.listWidget.selectedIndexes() is None:
            print("aaaa")
            self.search_ch_id = ""
        if buff_video_id_set:
            for getting_video_id in buff_video_id_set:
                if not getting_video_id == "" and not getting_video_id is None:
                    if not getting_video_id in self.old_video_id_list:
                        self.old_video_id_list.append(getting_video_id)
                        if len(self.old_video_id_list) > 30:
                            self.old_video_id_list = self.old_video_id_list[1:]
                        print("")
                        print("配信が始まりました")
                        # self.alarm_stop.setEnabled(False)
                        self.alarm_stop.click()
                        self.alarm_stop.setText("ストップ")
                        if self.webbrowser_cb.checkState():
                            webbrowser.open(
                                "https://www.youtube.com/watch?v=" +
                                getting_video_id)
                        if self.alarm_cb.checkState():
                            self.alarm_sound()

    def stop_alarm(self):
        pygame.mixer.music.stop()
        self.alarm_stop.setEnabled(True)
        self.alarm_stop.setText("待機中")

    def alarm_sound(self):
        # loop = 1
        # if self.loop_cb.checkState():
        loop_count = 5
        pygame.mixer.music.play(loop_count)
        pygame.mixer.music.play(loop_count)

    def get_live_video_id(self, search_ch_id):
        dict_str = ""
        video_id_set = set()
        try:
            session = requests.Session()
            headers = {
                'user-agent':
                'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
            }
            html = session.get("https://www.youtube.com/channel/" +
                               search_ch_id,
                               headers=headers,
                               timeout=10)
            soup = BeautifulSoup(html.text, 'html.parser')
            keyword = 'window["ytInitialData"]'
            for scrp in soup.find_all("script"):
                if keyword in str(scrp):
                    dict_str = str(scrp).split(' = ', 1)[1]
            dict_str = dict_str.replace('false', 'False')
            dict_str = dict_str.replace('true', 'True')

            index = dict_str.find("\n")
            dict_str = dict_str[:index - 1]
            dics = eval(dict_str)
            for section in dics.get("contents", {}).get(
                    "twoColumnBrowseResultsRenderer",
                {}).get("tabs",
                        {})[0].get("tabRenderer",
                                   {}).get("content",
                                           {}).get("sectionListRenderer",
                                                   {}).get("contents", {}):
                for itemsection in section.get("itemSectionRenderer",
                                               {}).get("contents", {}):
                    items = {}
                    if "shelfRenderer" in itemsection:
                        for items in itemsection.get("shelfRenderer",
                                                     {}).get("content",
                                                             {}).values():
                            for item in items.get("items", {}):
                                for videoRenderer in item.values():
                                    for badge in videoRenderer.get(
                                            "badges", {}):
                                        if badge.get(
                                                "metadataBadgeRenderer",
                                            {}).get(
                                                "style", {}
                                            ) == "BADGE_STYLE_TYPE_LIVE_NOW":
                                            video_id_set.add(
                                                videoRenderer.get(
                                                    "videoId", ""))
                    elif "channelFeaturedContentRenderer" in itemsection:
                        for item in itemsection.get(
                                "channelFeaturedContentRenderer",
                            {}).get("items", {}):
                            for badge in item.get("videoRenderer",
                                                  {}).get("badges", {}):
                                if badge.get("metadataBadgeRenderer", {}).get(
                                        "style",
                                        "") == "BADGE_STYLE_TYPE_LIVE_NOW":
                                    video_id_set.add(
                                        item.get("videoRenderer",
                                                 {}).get("videoId", ""))
        except:
            return video_id_set

        return video_id_set
示例#14
0
    def create_ui(self):
        # 1.文字标签
        # QLabel(显示的文字, 父标签/放到哪个窗口上)
        label1 = QLabel('用户名:', self)
        # 一般不常用的移动坐标
        label1.move(50, 10)

        # 2.按钮
        btn1 = QPushButton('登录', self)
        btn1.move(50, 50)
        # css语法:选择器{属性1:属性值1; 属性2:属性值2;..}
        # color - 字体颜色,对应的值:颜色单词, rbg(255, 0, 0)
        #
        btn1.setStyleSheet('QPushButton{}')
        btn2 = QRadioButton('男', self)
        btn2.move(50, 100)
        btn3 = QCheckBox('篮球', self)
        btn3.move(50, 150)
        btn4 = QCommandLinkButton('hello', 'hellowword', self)
        btn4.move(50, 200)

        b1 = QDialogButtonBox.StandardButton.Ok
        b2 = QDialogButtonBox.StandardButton.Cancel
        btn5 = QDialogButtonBox(b2, self)
        btn5.move(50, 300)

        # 3.输入框
        input1 = QLineEdit(self)
        input1.move(150, 10)
        input2 = QLineEdit('admin', self)
        input2.move(150, 50)
        input1.setText('张三')
        # 富文本
        input3 = QTextEdit('张三', self)
        input3.move(50, 300)
        # 设置成只读
        input3.setReadOnly(True)
        # 只能显示纯文本
        input4 = QPlainTextEdit(self)
        input4.move(300, 10)
        # 输入数值
        input5 = QSpinBox(self)
        input5.move(100, 100)
        input5.setMinimum(10)
        input5.setMaximum(20)
        input5.setValue(15)
        print(input5.value())  # 获取当前值
        # 输入小数
        input6 = QDoubleSpinBox(self)
        input6.move(100, 150)
        # 下拉菜单
        input7 = QComboBox(self)
        input7.addItems(['item1', 'item2'])
        input7.move(150, 200)
        print(input7.currentText())  # 获取当前选中的选项,适用input8
        input8 = QFontComboBox(self)
        input8.move(350, 300)
        input8.setCurrentIndex(2)
        print(input8.currentText())
        label1.setFont(input8.currentFont())
        # 日期选择
        input9 = QDateEdit(date.today(), self)
        input9.move(300, 400)
        # 选择颜色
        input10 = QColorDialog(self)
        input10.move(400, 400)
        # input10.show()

        input11 = QDial(self)
        input11.move(300, 200)

        input12 = QSlider(self)
        input12.move(430, 350)
        input12.setMaximum(100)
        input12.setMinimum(-100)
        input12.setValue(20)
        input12.setOrientation(Qt.Horizontal)  # 设置为水平方向
示例#15
0
class Gui(QWidget):
    def __init__(self,map,interface):
        super(Gui, self).__init__()

        # Estimated
        self.xestimated = []
        self.yestimated = []
        self.zestimated = []
        self.Restimated = []
        self.Yestimated = []
        self.Pestimated = []

        self.xreal = []
        self.yreal = []
        self.zreal = []
        self.Rreal = []
        self.Yreal = []
        self.Preal = []
        self.interface = interface
        self.initUI(map=map)


    def initUI(self,map):
        ### initialize
        self.filename = map

        # Estimated
        self.pose3dEstimated = []
        self.pose3dReal = []
        self.error = []

        self.loadpathXYZ()


        ### Text out
        self.textbox = QLineEdit(self)
        self.textbox.move(20,480+10)
        self.textbox.resize(640,80)



        ### To select a different graph
        self.showNow = "showXYZ"
        
        ## XYZ
        self.cbxyz = QCheckBox('Show XYZ', self)
        self.cbxyz.move(640+40, 100)
        self.cbxyz.toggle()
        self.cbxyz.setChecked(True)
        self.cbxyz.stateChanged.connect(self.showXYZ)

        ## RPY
        self.cbRPY = QCheckBox('Show RPY', self)
        self.cbRPY.move(640+40, 200)
        self.cbRPY.toggle()
        self.cbRPY.setChecked(False)
        self.cbRPY.stateChanged.connect(self.showRPY)

        ## Error
        self.cbError = QCheckBox('Show Error', self)
        self.cbError.move(640+40, 300)
        self.cbError.toggle()
        self.cbError.setChecked(False)
        self.cbError.stateChanged.connect(self.showError)



        ### Saving results
        ButtonSave = QPushButton('Save results', self)
        ButtonSave.setCheckable(True)
        ButtonSave.move(640+50, 480+30)
        ButtonSave.clicked[bool].connect(self.savingResult)

        # Plot map
        self.main_widget = QWidget(self)
        l = QVBoxLayout(self.main_widget)
        self.dc = MyDynamicMplCanvas(parent=self.main_widget,option=self.showNow,
                                        map=self.map, xsim=self.xestimated, ysim=self.yestimated,
                                        xreal=self.xreal, yreal=self.yreal,interface=self.interface)
        l.addWidget(self.dc)




        self.setGeometry(600, 600, 250, 150)
        self.setWindowTitle('Compare')
        self.setFixedSize(10+640+20+150,600)

    def setInterface(self,interface):
        self.interface = interface

    def showXYZ(self,state):
        if state == Qt.Checked:
            self.textbox.setText("You have selected show XYZ graph")
            self.showNow = "showXYZ"
            self.dc.setOption(self.showNow)

            self.cbRPY.setChecked(False)
            self.cbError.setChecked(False)

    def showRPY(self, state):
        if state == Qt.Checked:
            self.textbox.setText("You have selected show RPY graph")
            self.showNow = "showRPY"
            self.cbxyz.setChecked(False)
            self.cbError.setChecked(False)
            self.dc.setOption(self.showNow)



            

    def showError(self, state):
        if state == Qt.Checked:
            self.textbox.setText("You have selected show error graph")
            self.showNow = "showError"
            self.dc.setOption(self.showNow)
            self.cbxyz.setChecked(False)
            self.cbRPY.setChecked(False)

            
    def savingResult(self):
        self.textbox.setText("Saving result...")
        ## Save real and sim xyzRYP
        np.save(os.path.join("result", "xestimated.npy"), np.array(self.xestimated))

        np.save(os.path.join("result", "yestimated.npy"), np.array(self.yestimated))
        np.save(os.path.join("result", "xreal.npy"), np.array(self.xreal))
        np.save(os.path.join("result", "yreal.npy"), np.array(self.yreal))

        self.textbox.setText("Done!")


    def update(self):
        ###### Estimated ########
        pose3dEstimated = PosXYZRPY(self.interface.getsimPose3D())

        self.xestimated.append(pose3dEstimated.x)
        self.yestimated.append(pose3dEstimated.y)
        self.zestimated.append(pose3dEstimated.z)
        self.Restimated.append(pose3dEstimated.R)
        self.Yestimated.append(pose3dEstimated.Y)
        self.Pestimated.append(pose3dEstimated.P)

        ###### Real ########
        pose3dReal = PosXYZRPY(self.interface.getPose3D())

        self.xreal.append(pose3dReal.x)
        self.yreal.append(pose3dReal.y)
        self.zreal.append(pose3dReal.z)
        self.Rreal.append(pose3dReal.R)
        self.Yreal.append(pose3dReal.Y)
        self.Preal.append(pose3dReal.P)



    def loadpathXYZ(self):
        a=[]

        for line in open(self.filename, 'r').readlines():
            line = line.rstrip('\n')
            linelist = line.split()
            if len(linelist)>1:
                pose = jderobot.Pose3DData()
                pose.x = float(linelist[0])
                pose.y = float(linelist[1])
                pose.z = float(linelist[2])
                a.append(pose)

        self.map = list(a)
示例#16
0
class sigviewer(QMainWindow, From_Main):
    def __init__(self):
        super(sigviewer, self).__init__()
        QMainWindow.__init__(self)
        self.setupUi(self)
        self.setGeometry(0, 0, 1350, 690)
        self.create_MenuBar()
        self.sc = pg.PlotWidget()
        self.sc1 = pg.PlotWidget()
        self.sc2 = pg.PlotWidget()
        self.timer = QtCore.QTimer()
        self.timer1 = QtCore.QTimer()
        self.timer2 = QtCore.QTimer()
        self.init_UI()
        self.x = []
        self.x1 = []
        self.x2 = []
        self.y = []
        self.y1 = []
        self.y2 = []

        self.l = QVBoxLayout(self.graphicsView)
        self.l.setGeometry(QtCore.QRect(10, 5, 571, 150))
        self.l1 = QVBoxLayout(self.graphicsView_2)
        self.l.setGeometry(QtCore.QRect(10, 225, 571, 150))
        self.l2 = QVBoxLayout(self.graphicsView_3)
        self.l.setGeometry(QtCore.QRect(10, 440, 571, 150))

        self.l.addWidget(self.sc)
        self.l1.addWidget(self.sc1)
        self.l2.addWidget(self.sc2)

        self.label = QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(660, 8, 600, 191))
        self.label.setText("")
        self.label.setStyleSheet("background-color: white")

        self.label1 = QLabel(self.centralwidget)
        self.label1.setGeometry(QtCore.QRect(660, 210, 600, 191))
        self.label1.setText("")
        self.label1.setStyleSheet("background-color: white")

        self.label2 = QLabel(self.centralwidget)
        self.label2.setGeometry(QtCore.QRect(660, 420, 600, 191))
        self.label2.setText("")
        self.label2.setStyleSheet("background-color: white")

    def init_UI(self):

        self.createpdf = QtWidgets.QPushButton(self.centralwidget)
        self.createpdf.setGeometry(QtCore.QRect(1270, 23, 75, 591))
        self.createpdf.setText(" Create PDF")
        self.createpdf.setObjectName("pdf")
        self.createpdf.setShortcut("Ctrl+F")
        self.createpdf.clicked.connect(lambda: self.savepdf())

        #  channel 1
        self.open3 = QtWidgets.QPushButton(self.centralwidget)
        self.open3.setGeometry(QtCore.QRect(20, 170, 41, 23))
        self.open3.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("images.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.open3.setIcon(icon1)
        self.open3.setObjectName("open")
        self.open3.setShortcut("Ctrl+O")
        self.open3.clicked.connect(lambda: self.OpenBrowse())

        self.play3 = QtWidgets.QPushButton(self.centralwidget)
        self.play3.setGeometry(QtCore.QRect(80, 170, 41, 23))
        self.play3.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("play.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.play3.setIcon(icon2)
        self.play3.setObjectName("play")
        self.play3.setShortcut("Ctrl+P")
        self.play3.clicked.connect(lambda: self.dynamicSig())

        self.pause3 = QtWidgets.QPushButton(self.centralwidget)
        self.pause3.setGeometry(QtCore.QRect(140, 170, 41, 23))
        self.pause3.setText("")
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap("pause.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.pause3.setIcon(icon3)
        self.pause3.setObjectName("pause")
        self.pause3.setShortcut("Ctrl+T")
        self.pause3.clicked.connect(lambda: self.pauseSignal())

        self.clear3 = QtWidgets.QPushButton(self.centralwidget)
        self.clear3.setGeometry(QtCore.QRect(200, 170, 41, 23))
        self.clear3.setText("")
        icon4 = QtGui.QIcon()
        icon4.addPixmap(QtGui.QPixmap("clear.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.clear3.setIcon(icon4)
        self.clear3.setObjectName("clear")
        self.clear3.setShortcut("Ctrl+L")
        self.clear3.clicked.connect(lambda: self.clear())

        self.zoom_in3 = QtWidgets.QPushButton(self.centralwidget)
        self.zoom_in3.setGeometry(QtCore.QRect(260, 170, 41, 23))
        self.zoom_in3.setText("")
        icon5 = QtGui.QIcon()
        icon5.addPixmap(QtGui.QPixmap("zoomin.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.zoom_in3.setIcon(icon5)
        self.zoom_in3.setObjectName("Zoom In")
        self.zoom_in3.setShortcut("Ctrl+Num++")
        self.zoom_in3.clicked.connect(lambda: self.zoomin())

        self.zoom_out3 = QtWidgets.QPushButton(self.centralwidget)
        self.zoom_out3.setGeometry(QtCore.QRect(320, 170, 41, 23))
        self.zoom_out3.setText("")
        icon6 = QtGui.QIcon()
        icon6.addPixmap(QtGui.QPixmap("zoomout.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.zoom_out3.setIcon(icon6)
        self.zoom_out3.setObjectName("Zoom Out")
        self.zoom_out3.setShortcut("Ctrl+-")
        self.zoom_out3.clicked.connect(lambda: self.zoomout())

        self.scroll_right3 = QtWidgets.QPushButton(self.centralwidget)
        self.scroll_right3.setGeometry(QtCore.QRect(380, 170, 41, 23))
        self.scroll_right3.setText("")
        icon7 = QtGui.QIcon()
        icon7.addPixmap(QtGui.QPixmap("arrowr.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.scroll_right3.setIcon(icon7)
        self.scroll_right3.setObjectName("scroll right")
        self.scroll_right3.setShortcut("Ctrl+Right")
        self.scroll_right3.clicked.connect(lambda: self.scrollR())

        self.scroll_left3 = QtWidgets.QPushButton(self.centralwidget)
        self.scroll_left3.setGeometry(QtCore.QRect(440, 170, 41, 23))
        self.scroll_left3.setText("")
        icon8 = QtGui.QIcon()
        icon8.addPixmap(QtGui.QPixmap("arrowl.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.scroll_left3.setIcon(icon8)
        self.scroll_left3.setObjectName("scroll left")
        self.scroll_left3.setShortcut("Ctrl+Left")
        self.scroll_left3.clicked.connect(lambda: self.scrollL())

        self.spectrogram3 = QtWidgets.QPushButton(self.centralwidget)
        self.spectrogram3.setGeometry(QtCore.QRect(500, 170, 41, 23))
        self.spectrogram3.setText("")
        icon9 = QtGui.QIcon()
        icon9.addPixmap(QtGui.QPixmap("spectro.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.spectrogram3.setIcon(icon9)
        self.spectrogram3.setObjectName("spectrogram")
        self.spectrogram3.setShortcut("Ctrl+M")
        self.spectrogram3.clicked.connect(lambda: self.spectrogram())

        self.channel1box = QCheckBox("", self)
        self.channel1box.move(560, 190)
        self.channel1box.resize(16, 17)
        self.channel1box.setChecked(True)
        self.channel1box.setShortcut("Ctrl+H")
        self.channel1box.stateChanged.connect(self.show1)

        #  channel 2
        self.open1 = QtWidgets.QPushButton(self.centralwidget)
        self.open1.setGeometry(QtCore.QRect(20, 370, 41, 23))
        self.open1.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("images.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.open1.setIcon(icon1)
        self.open1.setObjectName("open")
        self.open1.setShortcut("Shift+O")
        self.open1.clicked.connect(lambda: self.OpenBrowse1())

        self.play1 = QtWidgets.QPushButton(self.centralwidget)
        self.play1.setGeometry(QtCore.QRect(80, 370, 41, 23))
        self.play1.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("play.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.play1.setIcon(icon2)
        self.play1.setObjectName("play")
        self.play1.setShortcut("Shift+P")
        self.play1.clicked.connect(lambda: self.dynamicSig1())

        self.pause1 = QtWidgets.QPushButton(self.centralwidget)
        self.pause1.setGeometry(QtCore.QRect(140, 370, 41, 23))
        self.pause1.setText("")
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap("pause.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.pause1.setIcon(icon3)
        self.pause1.setObjectName("pause")
        self.pause1.setShortcut("Shift+T")
        self.pause1.clicked.connect(lambda: self.pauseSignal1())

        self.clear_1 = QtWidgets.QPushButton(self.centralwidget)
        self.clear_1.setGeometry(QtCore.QRect(200, 370, 41, 23))
        self.clear_1.setText("")
        icon4 = QtGui.QIcon()
        icon4.addPixmap(QtGui.QPixmap("clear.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.clear_1.setIcon(icon4)
        self.clear_1.setObjectName("clear")
        self.clear_1.setShortcut("Shift+L")
        self.clear_1.clicked.connect(lambda: self.clear1())

        self.zoom_in1 = QtWidgets.QPushButton(self.centralwidget)
        self.zoom_in1.setGeometry(QtCore.QRect(260, 370, 41, 23))
        self.zoom_in1.setText("")
        icon5 = QtGui.QIcon()
        icon5.addPixmap(QtGui.QPixmap("zoomin.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.zoom_in1.setIcon(icon5)
        self.zoom_in1.setObjectName("zoom in")
        self.zoom_in1.setShortcut("Shift+Num++")
        self.zoom_in1.clicked.connect(lambda: self.zoomin1())

        self.zoom_out1 = QtWidgets.QPushButton(self.centralwidget)
        self.zoom_out1.setGeometry(QtCore.QRect(320, 370, 41, 23))
        self.zoom_out1.setText("")
        icon6 = QtGui.QIcon()
        icon6.addPixmap(QtGui.QPixmap("zoomout.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.zoom_out1.setIcon(icon6)
        self.zoom_out1.setObjectName("zoom out")
        self.zoom_out1.setShortcut("Shift+-")
        self.zoom_out1.clicked.connect(lambda: self.zoomout1())

        self.scroll_right1 = QtWidgets.QPushButton(self.centralwidget)
        self.scroll_right1.setGeometry(QtCore.QRect(380, 370, 41, 23))
        self.scroll_right1.setText("")
        icon7 = QtGui.QIcon()
        icon7.addPixmap(QtGui.QPixmap("arrowr.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.scroll_right1.setIcon(icon7)
        self.scroll_right1.setObjectName("scroll right")
        self.scroll_right1.setShortcut("Shift+Right")
        self.scroll_right1.clicked.connect(lambda: self.scrollR1())

        self.scroll_left1 = QtWidgets.QPushButton(self.centralwidget)
        self.scroll_left1.setGeometry(QtCore.QRect(440, 370, 41, 23))
        self.scroll_left1.setText("")
        icon8 = QtGui.QIcon()
        icon8.addPixmap(QtGui.QPixmap("arrowl.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.scroll_left1.setIcon(icon8)
        self.scroll_left1.setObjectName("scroll left")
        self.scroll_left1.setShortcut("Shift+Left")
        self.scroll_left1.clicked.connect(lambda: self.scrollL1())

        self.spectrogram_1 = QtWidgets.QPushButton(self.centralwidget)
        self.spectrogram_1.setGeometry(QtCore.QRect(500, 370, 41, 23))
        self.spectrogram_1.setText("")
        icon9 = QtGui.QIcon()
        icon9.addPixmap(QtGui.QPixmap("spectro.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.spectrogram_1.setIcon(icon9)
        self.spectrogram_1.setObjectName("spectrogram")
        self.spectrogram_1.setShortcut("Shift+M")
        self.spectrogram_1.clicked.connect(lambda: self.spectrogram1())

        self.channel2box = QCheckBox("", self)
        self.channel2box.move(560, 390)
        self.channel2box.resize(16, 17)
        self.channel2box.setChecked(True)
        self.channel2box.setShortcut("Shift+H")
        self.channel2box.stateChanged.connect(self.show2)

        # channel 3
        self.open2 = QtWidgets.QPushButton(self.centralwidget)
        self.open2.setGeometry(QtCore.QRect(20, 590, 41, 23))
        self.open2.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("images.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.open2.setIcon(icon1)
        self.open2.setObjectName("open")
        self.open2.setShortcut("Alt+O")
        self.open2.clicked.connect(lambda: self.OpenBrowse2())

        self.play2 = QtWidgets.QPushButton(self.centralwidget)
        self.play2.setGeometry(QtCore.QRect(80, 590, 41, 23))
        self.play2.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("play.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.play2.setIcon(icon2)
        self.play2.setObjectName("play")
        self.play2.setShortcut("Alt+P")
        self.play2.clicked.connect(lambda: self.dynamicSig2())

        self.pause2 = QtWidgets.QPushButton(self.centralwidget)
        self.pause2.setGeometry(QtCore.QRect(140, 590, 41, 23))
        self.pause2.setText("")
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap("pause.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.pause2.setIcon(icon3)
        self.pause2.setObjectName("pause")
        self.pause2.setShortcut("Alt+T")
        self.pause2.clicked.connect(lambda: self.pauseSignal2())

        self.clear_2 = QtWidgets.QPushButton(self.centralwidget)
        self.clear_2.setGeometry(QtCore.QRect(200, 590, 41, 23))
        self.clear_2.setText("")
        icon4 = QtGui.QIcon()
        icon4.addPixmap(QtGui.QPixmap("clear.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.clear_2.setIcon(icon4)
        self.clear_2.setObjectName("clear")
        self.clear_2.setShortcut("Alt+L")
        self.clear_2.clicked.connect(lambda: self.clear2())

        self.zoom_in2 = QtWidgets.QPushButton(self.centralwidget)
        self.zoom_in2.setGeometry(QtCore.QRect(260, 590, 41, 23))
        self.zoom_in2.setText("")
        icon5 = QtGui.QIcon()
        icon5.addPixmap(QtGui.QPixmap("zoomin.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.zoom_in2.setIcon(icon5)
        self.zoom_in2.setObjectName("zoom in")
        self.zoom_in2.setShortcut("Alt+Num++")
        self.zoom_in2.clicked.connect(lambda: self.zoomin2())

        self.zoom_out2 = QtWidgets.QPushButton(self.centralwidget)
        self.zoom_out2.setGeometry(QtCore.QRect(320, 590, 41, 23))
        self.zoom_out2.setText("")
        icon6 = QtGui.QIcon()
        icon6.addPixmap(QtGui.QPixmap("zoomout.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.zoom_out2.setIcon(icon6)
        self.zoom_out2.setObjectName("zoom out")
        self.zoom_out2.setShortcut("Alt+-")
        self.zoom_out2.clicked.connect(lambda: self.zoomout2())

        self.scroll_right2 = QtWidgets.QPushButton(self.centralwidget)
        self.scroll_right2.setGeometry(QtCore.QRect(380, 590, 41, 23))
        self.scroll_right2.setText("")
        icon7 = QtGui.QIcon()
        icon7.addPixmap(QtGui.QPixmap("arrowr.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.scroll_right2.setIcon(icon7)
        self.scroll_right2.setObjectName("scroll right")
        self.scroll_right2.setShortcut("Alt+Right")
        self.scroll_right2.clicked.connect(lambda: self.scrollR2())

        self.scroll_left2 = QtWidgets.QPushButton(self.centralwidget)
        self.scroll_left2.setGeometry(QtCore.QRect(440, 590, 41, 23))
        self.scroll_left2.setText("")
        icon8 = QtGui.QIcon()
        icon8.addPixmap(QtGui.QPixmap("arrowl.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.scroll_left2.setIcon(icon8)
        self.scroll_left2.setObjectName("scroll left")
        self.scroll_left2.setShortcut("Alt+Left")
        self.scroll_left2.clicked.connect(lambda: self.scrollL2())

        self.spectrogram_2 = QtWidgets.QPushButton(self.centralwidget)
        self.spectrogram_2.setGeometry(QtCore.QRect(500, 590, 41, 23))
        self.spectrogram_2.setText("")
        icon9 = QtGui.QIcon()
        icon9.addPixmap(QtGui.QPixmap("spectro.png"), QtGui.QIcon.Normal,
                        QtGui.QIcon.Off)
        self.spectrogram_2.setIcon(icon9)
        self.spectrogram_2.setObjectName("spectrogram")
        self.spectrogram_2.setShortcut("Alt+M")
        self.spectrogram_2.clicked.connect(lambda: self.spectrogram2())

        self.channel3box = QCheckBox("", self)
        self.channel3box.move(560, 610)
        self.channel3box.resize(16, 17)
        self.channel3box.setChecked(True)
        self.channel3box.setShortcut("Alt+H")
        self.channel3box.stateChanged.connect(self.show3)

    def create_MenuBar(self):
        menuBar = self.menuBar()
        self.setMenuBar(menuBar)
        # self.menuBar.setShortcut("Alt")
        #        menubar file
        file_menu = menuBar.addMenu('file')

        open_action = QAction(QIcon("open.png"), "open File", self)
        file_menu.addAction(open_action)

        saveAction = QAction(QIcon("save.png"), "save", self)
        file_menu.addAction(saveAction)

        gdfAction = QAction("Export GDF...", self)
        file_menu.addAction(gdfAction)

        eventsAction = QAction("Export Events...", self)
        file_menu.addAction(eventsAction)

        importAction = QAction("Import Events...", self)
        file_menu.addAction(importAction)

        infoAction = QAction(QIcon("info.png"), "Info...", self)
        file_menu.addAction(infoAction)

        closeAction = QAction(QIcon("close.png"), "Close", self)
        file_menu.addAction(closeAction)
        closeAction.triggered.connect(self.close)
        closeAction.setShortcut("Ctrl+Q")

        # menubar  edit
        edit_menu = menuBar.addMenu('edit')

        undoAction = QAction(QIcon("undo.png"), "Undo", self)
        edit_menu.addAction(undoAction)

        redoAction = QAction(QIcon("redo.png"), "Redo", self)
        edit_menu.addAction(redoAction)

        toallAction = QAction(QIcon("to_all.png"), "to All Channels", self)
        edit_menu.addAction(toallAction)

        copyAction = QAction(QIcon("copy.png"), "Copy to Channels...", self)
        edit_menu.addAction(copyAction)

        deleteAction = QAction(QIcon("delete.png"), "Delete", self)
        edit_menu.addAction(deleteAction)

        changeAction = QAction(QIcon("change.png"), "Change Channel...", self)
        edit_menu.addAction(changeAction)

        typeAction = QAction(QIcon("color.png"), "Change Type", self)
        edit_menu.addAction(typeAction)

        insertAction = QAction(QIcon("add.png"), "Insert Over", self)
        edit_menu.addAction(insertAction)

        edit_menu.addAction('Quit', self.close)

        # menubar  mode
        mode_menu = menuBar.addMenu('mode')

        newAction = QAction(QIcon("new event.png"), "New Event", self)
        mode_menu.addAction(newAction)

        editAction = QAction(QIcon("edit.png"), "Edit Event", self)
        mode_menu.addAction(editAction)
        scrollAction = QAction(QIcon("scroll.png"), "Scroll", self)
        mode_menu.addAction(scrollAction)

        viewAction = QAction(QIcon("view.png"), "View Options", self)
        mode_menu.addAction(viewAction)

        # menubar  view
        view_menu = menuBar.addMenu('view')

        toolbarAction = QAction("Toolbars", self)
        view_menu.addAction(toolbarAction)

        statusAction = QAction("Statusbar", self)
        view_menu.addAction(statusAction)

        animationAction = QAction("Animation", self)
        view_menu.addAction(animationAction)

        eveAction = QAction(QIcon("favourite.png"), "Events...", self)
        view_menu.addAction(eveAction)

        channAction = QAction(QIcon("channels.png"), "Channels...", self)
        view_menu.addAction(channAction)

        scaleAction = QAction("Scale All", self)
        view_menu.addAction(scaleAction)

        zoominvAction = QAction(QIcon("zoomin.png"), "Zoom In Vertical", self)
        view_menu.addAction(zoominvAction)

        zoomoutvAction = QAction(QIcon("zoom out.png"), "Zoom Out Vertical",
                                 self)
        view_menu.addAction(zoomoutvAction)

        zoominhAction = QAction(QIcon("zoomin.png"), "Zoom In Horizontal",
                                self)
        view_menu.addAction(zoominhAction)

        zoomouthAction = QAction(QIcon("zoom out.png"), "Zoom Out Horizontal",
                                 self)
        view_menu.addAction(zoomouthAction)

        gotoAction = QAction(QIcon("goto.png"), "Go to...", self)
        view_menu.addAction(gotoAction)

        gonextAction = QAction("Goto and Select Next Event", self)
        view_menu.addAction(gonextAction)

        goprevAction = QAction("Goto and Select Previos Evenet", self)
        view_menu.addAction(goprevAction)

        fitAction = QAction("Fit View to selected Event", self)
        view_menu.addAction(fitAction)

        hideAction = QAction("Hide Events of Other Type", self)
        view_menu.addAction(hideAction)

        showAction = QAction("Show All Events", self)
        view_menu.addAction(showAction)

        # menubar  tools
        tools_menu = menuBar.addMenu('tools')

        calcAction = QAction("Calculate Mean...", self)
        tools_menu.addAction(calcAction)

        powerAction = QAction("Power Spectrum...", self)
        tools_menu.addAction(powerAction)

        # menubar  help
        help_menu = menuBar.addMenu('help')
        help_menu.addAction('Quit', self.close)

    ###CHANNEL 1 FUNCTIONS###

    def OpenBrowse(self):
        self.fileName, _ = QFileDialog.getOpenFileName(
            self, "QFileDialog.getOpenFileName()", "", "CSV Files (*.csv)")
        if self.fileName:
            df = pd.read_csv(self.fileName, header=None)
            self.x = np.array(df[0])
            self.y = np.array(df[1])
            xrange, yrange = self.sc.viewRange()
            self.min = self.x[0]
            self.max = self.x[-1]
            # print(xrange,self.x[-1])
            self.sc.setXRange(xrange[0] / 5, xrange[1] / 5, padding=0)
            pen = pg.mkPen(color=(50, 50, 250))
            self.sc.plot(self.x, self.y, pen=pen)

    def scrollR(self):
        xrange, yrange = self.sc.viewRange()
        scrollvalue = (xrange[1] - xrange[0]) / 10
        if xrange[1] < self.max:
            self.sc.setXRange(xrange[0] + scrollvalue,
                              xrange[1] + scrollvalue,
                              padding=0)
        else:
            pass

    def scrollL(self):
        xrange, yrange = self.sc.viewRange()
        scrollvalue = (xrange[1] - xrange[0]) / 10
        if xrange[0] > self.min:
            self.sc.setXRange(xrange[0] - scrollvalue,
                              xrange[1] - scrollvalue,
                              padding=0)
        else:
            pass

    def zoomin(self):
        xrange, yrange = self.sc.viewRange()
        self.sc.setXRange(xrange[0] / 2, xrange[1] / 2, padding=0)

    def zoomout(self):
        xrange, yrange = self.sc.viewRange()
        if xrange[1] < ((0.5 * self.max) + 1):
            self.sc.setXRange(xrange[0] * 2, xrange[1] * 2, padding=0)
        else:
            pass

    def clear(self):
        self.sc.clear()
        self.sc.setXRange(0, 1, padding=0)

    def dynamicSig(self):
        self.timer = QtCore.QTimer()
        self.timer.setInterval(2)
        self.timer.timeout.connect(self.dynamicSig)
        self.timer.start()
        xrange, yrange = self.sc.viewRange()
        scrollvalue = (xrange[1] - xrange[0]) / 500
        if xrange[1] < self.max:
            self.sc.setXRange(xrange[0] + scrollvalue,
                              xrange[1] + scrollvalue,
                              padding=0)
        else:
            pass

    def pauseSignal(self):
        self.timer.stop()

    def spectrogram(self):
        #plotting the spectrogram####
        # Define the list of frequencies
        self.frequencies = np.arange(5, 105, 5)

        # Sampling Frequency
        self.data = pd.DataFrame(pd.read_csv(self.fileName, delimiter=None))
        self.Data = self.data.iloc[1:][1:]
        self.sub2 = self.Data.values.tolist()
        self.samplingFrequency = 2 * (len(self.sub2)) + 1

        # Create two ndarrays
        self.s1 = np.empty([0])  # For samples
        self.s2 = np.empty([0])  # For signal

        # Start Value of the sample
        self.start = 1

        # Stop Value of the sample
        self.stop = self.samplingFrequency
        for self.frequency in self.frequencies:

            self.sub1 = np.arange(self.start, self.stop, 1)

        self.s1 = np.append(self.s1, self.sub1)
        self.s2 = np.append(self.s2, self.sub2)
        self.start = self.stop + 1
        self.stop = self.start + self.samplingFrequency

        # Plot the spectrogram
        fig = plot.figure()
        plot.subplot(111)
        self.powerSpectrum, self.freqenciesFound, self.time, self.imageAxis = plot.specgram(
            self.s2, Fs=self.samplingFrequency)
        plot.xlabel('Time')
        plot.ylabel('Frequency')
        fig.savefig('plot.png')
        self.upload()

    def upload(self):
        self.label.setPixmap(QtGui.QPixmap("plot.png"))
        self.label.setScaledContents(True)

    def show1(self):
        if (self.channel1box.isChecked() == True):
            self.graphicsView.show()
            self.label.show()
            self.open3.show()
            self.play3.show()
            self.pause3.show()
            self.clear3.show()
            self.zoom_in3.show()
            self.zoom_out3.show()
            self.scroll_right3.show()
            self.scroll_left3.show()
            self.spectrogram3.show()

        else:
            self.graphicsView.hide()
            self.label.hide()
            self.open3.hide()
            self.play3.hide()
            self.pause3.hide()
            self.clear3.hide()
            self.zoom_in3.hide()
            self.zoom_out3.hide()
            self.scroll_right3.hide()
            self.scroll_left3.hide()
            self.spectrogram3.hide()

    ##CHANNEL 2 FUNCTIONS###
    def scrollR1(self):
        xrange, yrange = self.sc1.viewRange()
        scrollvalue = (xrange[1] - xrange[0]) / 10
        if xrange[1] < self.max1:
            self.sc1.setXRange(xrange[0] + scrollvalue,
                               xrange[1] + scrollvalue,
                               padding=0)
        else:
            pass

    def scrollL1(self):
        xrange, yrange = self.sc1.viewRange()
        scrollvalue = (xrange[1] - xrange[0]) / 10
        if xrange[0] > self.min1:
            self.sc1.setXRange(xrange[0] - scrollvalue,
                               xrange[1] - scrollvalue,
                               padding=0)
        else:
            pass

    def zoomin1(self):
        xrange, yrange = self.sc1.viewRange()
        self.sc1.setXRange(xrange[0] / 2, xrange[1] / 2, padding=0)

    def zoomout1(self):
        xrange, yrange = self.sc1.viewRange()
        if xrange[1] < ((0.5 * self.max1) + 1):
            self.sc1.setXRange(xrange[0] * 2, xrange[1] * 2, padding=0)
        else:
            pass

    def OpenBrowse1(self):
        self.fileName1, _ = QFileDialog.getOpenFileName(
            self, "QFileDialog.getOpenFileName()", "", "CSV Files (*.csv)")
        if self.fileName1:
            df = pd.read_csv(self.fileName1, header=None)
            self.x1 = np.array(df[0])
            self.y1 = np.array(df[1])
            xrange, yrange = self.sc1.viewRange()
            self.min1 = self.x1[0]
            self.max1 = self.x1[-1]
            self.sc1.setXRange(xrange[0] / 5, xrange[1] / 5, padding=0)
            pen = pg.mkPen(color=(50, 50, 250))
            self.sc1.plot(self.x1, self.y1, pen=pen)

    def clear1(self):
        self.sc1.clear()
        self.sc1.setXRange(0, 1, padding=0)

    def dynamicSig1(self):
        # self.clear()
        self.timer1 = QtCore.QTimer()
        self.timer1.setInterval(50)
        self.timer1.timeout.connect(self.dynamicSig1)
        self.timer1.start()
        xrange, yrange = self.sc1.viewRange()
        scrollvalue = (xrange[1] - xrange[0]) / 500
        if xrange[1] < self.max1:
            self.sc1.setXRange(xrange[0] + scrollvalue,
                               xrange[1] + scrollvalue,
                               padding=0)
        else:
            pass

    def pauseSignal1(self):
        self.timer1.stop()

    def spectrogram1(self):
        #plotting the spectrogram####
        # Define the list of frequencies
        self.frequencies = np.arange(5, 105, 5)

        # Sampling Frequency
        self.data = pd.DataFrame(pd.read_csv(self.fileName1, delimiter=None))
        self.Data = self.data.iloc[1:][1:]
        self.sub2 = self.Data.values.tolist()
        self.samplingFrequency = 2 * (len(self.sub2)) + 1

        # Create two ndarrays
        self.s1 = np.empty([0])  # For samples
        self.s2 = np.empty([0])  # For signal

        # Start Value of the sample
        self.start = 1

        # Stop Value of the sample
        self.stop = self.samplingFrequency
        for self.frequency in self.frequencies:

            self.sub1 = np.arange(self.start, self.stop, 1)

        self.s1 = np.append(self.s1, self.sub1)
        self.s2 = np.append(self.s2, self.sub2)
        self.start = self.stop + 1
        self.stop = self.start + self.samplingFrequency

        # Plot the spectrogram
        fig = plot.figure()
        plot.subplot(111)
        self.powerSpectrum, self.freqenciesFound, self.time, self.imageAxis = plot.specgram(
            self.s2, Fs=self.samplingFrequency)
        plot.xlabel('Time')
        plot.ylabel('Frequency')
        fig.savefig('plot1.png')
        self.upload1()

    def upload1(self):
        self.label1.setPixmap(QtGui.QPixmap("plot1.png"))
        self.label1.setScaledContents(True)

    def show2(self):
        if (self.channel2box.isChecked() == True):
            self.graphicsView_2.show()
            self.label1.show()
            self.open1.show()
            self.play1.show()
            self.pause1.show()
            self.clear_1.show()
            self.zoom_in1.show()
            self.zoom_out1.show()
            self.scroll_right1.show()
            self.scroll_left1.show()
            self.spectrogram_1.show()

        else:
            self.graphicsView_2.hide()
            self.label1.hide()
            self.open1.hide()
            self.play1.hide()
            self.pause1.hide()
            self.clear_1.hide()
            self.zoom_in1.hide()
            self.zoom_out1.hide()
            self.scroll_right1.hide()
            self.scroll_left1.hide()
            self.spectrogram_1.hide()

    ###CHANNEL 3 FUNCTIONS###
    def scrollR2(self):
        xrange, yrange = self.sc2.viewRange()
        scrollvalue = (xrange[1] - xrange[0]) / 10
        if xrange[1] < self.max2:
            self.sc2.setXRange(xrange[0] + scrollvalue,
                               xrange[1] + scrollvalue,
                               padding=0)
        else:
            pass

    def scrollL2(self):
        xrange, yrange = self.sc2.viewRange()
        scrollvalue = (xrange[1] - xrange[0]) / 10
        if xrange[0] > self.min2:
            self.sc2.setXRange(xrange[0] - scrollvalue,
                               xrange[1] - scrollvalue,
                               padding=0)
        else:
            pass

    def zoomin2(self):
        xrange, yrange = self.sc2.viewRange()
        self.sc2.setXRange(xrange[0] / 2, xrange[1] / 2, padding=0)

    def zoomout2(self):
        xrange, yrange = self.sc2.viewRange()
        if xrange[1] < ((0.5 * self.max2) + 1):
            self.sc2.setXRange(xrange[0] * 2, xrange[1] * 2, padding=0)
        else:
            pass

    def OpenBrowse2(self):
        self.fileName2, _ = QFileDialog.getOpenFileName(
            self, "QFileDialog.getOpenFileName()", "", "CSV Files (*.csv)")
        if self.fileName2:
            df = pd.read_csv(self.fileName2, header=None)
            self.x2 = np.array(df[0])
            self.y2 = np.array(df[1])
            self.min2 = self.x2[0]
            self.max2 = self.x2[-1]
            xrange, yrange = self.sc2.viewRange()
            self.sc2.setXRange(xrange[0] / 5, xrange[1] / 5, padding=0)
            pen = pg.mkPen(color=(50, 50, 250))
            self.sc2.plot(self.x2, self.y2, pen=pen)

    def clear2(self):
        self.sc2.clear()
        self.sc2.setXRange(0, 1, padding=0)

    def dynamicSig2(self):
        # self.clear()
        self.timer2 = QtCore.QTimer()
        self.timer2.setInterval(100)
        self.timer2.timeout.connect(self.dynamicSig2)
        self.timer2.start()
        xrange, yrange = self.sc2.viewRange()
        scrollvalue = (xrange[1] - xrange[0]) / 500
        if xrange[1] < self.max2:
            self.sc2.setXRange(xrange[0] + scrollvalue,
                               xrange[1] + scrollvalue,
                               padding=0)
        else:
            pass

    def pauseSignal2(self):
        self.timer2.stop()

    def spectrogram2(self):
        #plotting the spectrogram####
        # Define the list of frequencies
        self.frequencies = np.arange(5, 105, 5)

        # Sampling Frequency
        self.data = pd.DataFrame(pd.read_csv(self.fileName2, delimiter=None))
        self.Data = self.data.iloc[1:][1:]
        self.sub2 = self.Data.values.tolist()
        self.samplingFrequency = 2 * (len(self.sub2)) + 1

        # Create two ndarrays
        self.s1 = np.empty([0])  # For samples
        self.s2 = np.empty([0])  # For signal

        # Start Value of the sample
        self.start = 1

        # Stop Value of the sample
        self.stop = self.samplingFrequency
        for self.frequency in self.frequencies:

            self.sub1 = np.arange(self.start, self.stop, 1)

        self.s1 = np.append(self.s1, self.sub1)
        self.s2 = np.append(self.s2, self.sub2)
        self.start = self.stop + 1
        self.stop = self.start + self.samplingFrequency

        # Plot the spectrogram
        fig = plot.figure()
        plot.subplot(111)
        self.powerSpectrum, self.freqenciesFound, self.time, self.imageAxis = plot.specgram(
            self.s2, Fs=self.samplingFrequency)
        plot.xlabel('Time')
        plot.ylabel('Frequency')
        fig.savefig('plot2.png')
        self.upload2()

    def upload2(self):
        self.label2.setPixmap(QtGui.QPixmap("plot2.png"))
        self.label2.setScaledContents(True)

    def show3(self):
        if (self.channel3box.isChecked() == True):
            self.graphicsView_3.show()
            self.label2.show()
            self.open2.show()
            self.play2.show()
            self.pause2.show()
            self.clear_2.show()
            self.zoom_in2.show()
            self.zoom_out2.show()
            self.scroll_right2.show()
            self.scroll_left2.show()
            self.spectrogram_2.show()

        else:
            self.graphicsView_3.hide()
            self.label2.hide()
            self.open2.hide()
            self.play2.hide()
            self.pause2.hide()
            self.clear_2.hide()
            self.zoom_in2.hide()
            self.zoom_out2.hide()
            self.scroll_right2.hide()
            self.scroll_left2.hide()
            self.spectrogram_2.hide()

    ##save to pdf function##

# save as pdf

    def savepdf(self):
        fig = plot.figure()

        if (self.channel1box.isChecked() == True):
            if len(self.x) == 0:
                pass
            else:
                plot.subplot(3, 2, 1)
                plot.plot(self.x,
                          self.y,
                          color='red',
                          linewidth=2,
                          scalex=True)
                plot.subplot(3, 2, 2)
                self.powerSpectrum, self.freqenciesFound, self.time, self.imageAxis = plot.specgram(
                    self.s2, Fs=self.samplingFrequency)
                plot.xlabel('Time')
                plot.ylabel('Frequency')
        if (self.channel2box.isChecked() == True):
            if len(self.x1) == 0:
                pass
            else:
                plot.subplot(3, 2, 3)
                plot.plot(self.x1,
                          self.y1,
                          color='red',
                          linewidth=2,
                          scalex=True)
                plot.subplot(3, 2, 4)
                self.powerSpectrum1, self.freqenciesFound1, self.time1, self.imageAxis1 = plot.specgram(
                    self.s2, Fs=self.samplingFrequency)
                plot.xlabel('Time')
                plot.ylabel('Frequency')
        if (self.channel3box.isChecked() == True):
            if len(self.x2) == 0:
                pass
            else:
                plot.subplot(3, 2, 5)
                plot.plot(self.x2,
                          self.y2,
                          color='red',
                          linewidth=2,
                          scalex=True)
                plot.subplot(3, 2, 6)
                self.powerSpectrum2, self.freqenciesFound2, self.time2, self.imageAxis2 = plot.specgram(
                    self.s2, Fs=self.samplingFrequency)
                plot.xlabel('Time')
                plot.ylabel('Frequency')
        # plot.show()
        fig.savefig("x.pdf")
示例#17
0
    def initUI(self):
        ''' '''

        checkBox = QCheckBox('Show title', self)
        checkBox.move(20, 20)
        checkBox.toggle()
        checkBox.stateChanged.connect(self.changeTitle)

        self.color = QColor(0, 0, 0)

        redBtn = QPushButton('Red', self)
        redBtn.setCheckable(True)
        redBtn.move(20, 60)
        redslider = QSlider(Qt.Horizontal, self)
        redslider.setFocusPolicy(Qt.NoFocus)
        redslider.setGeometry(100, 60, 100, 20)
        redBtn.clicked[bool].connect(self.setColor)
        redslider.valueChanged[int].connect(self.changeRedValue)

        greenBtn = QPushButton('Green', self)
        greenBtn.setCheckable(True)
        greenBtn.move(20, 100)
        greenslider = QSlider(Qt.Horizontal, self)
        greenslider.setFocusPolicy(Qt.NoFocus)
        greenslider.setGeometry(100, 100, 100, 20)
        greenBtn.clicked[bool].connect(self.setColor)
        greenslider.valueChanged[int].connect(self.changeGreenValue)

        blueBtn = QPushButton('Blue', self)
        blueBtn.setCheckable(True)
        blueBtn.move(20, 140)
        blueslider = QSlider(Qt.Horizontal, self)
        blueslider.setFocusPolicy(Qt.NoFocus)
        blueslider.setGeometry(100, 140, 100, 20)
        blueBtn.clicked[bool].connect(self.setColor)
        blueslider.valueChanged[int].connect(self.changeBlueValue)

        calinder = QCalendarWidget(self)
        calinder.setGridVisible(True)
        calinder.move(160, 200)
        calinder.clicked[QDate].connect(self.showDate)

        self.label = QLabel(self)
        date = calinder.selectedDate()
        self.label.setText(date.toString())
        self.label.move(20, 200)

        self.frame = QFrame(self)
        self.frame.setGeometry(350, 60, 100, 100)
        self.frame.setStyleSheet('QWidget {background-color: %s}' %
                                 self.color.name())

        self.pbar = QProgressBar(self)
        self.pbar.setGeometry(20, 450, 500, 20)

        self.pBtn = QPushButton('Start', self)
        self.pBtn.move(20, 400)
        self.pBtn.clicked.connect(self.doAction)

        self.timer = QBasicTimer()
        self.step = 0

        self.setGeometry(300, 300, 600, 500)
        self.setWindowTitle('控件示例')
        self.show()
示例#18
0
class SettingInterface(QWidget):
    """ 设置界面 """

    crawlComplete = pyqtSignal()
    selectedFoldersChanged = pyqtSignal(list)

    def __init__(self, parent=None):
        super().__init__(parent)
        # 读入数据
        self.__readConfig()
        # 创建小部件
        self.__createWidgets()
        # 初始化界面
        self.__initWidget()

    def __createWidgets(self):
        """ 创建小部件 """
        # 实例化滚动区域
        self.all_h_layout = QHBoxLayout(self)
        self.scrollArea = QScrollArea(self)
        self.widget = QWidget()
        # 实例化标签
        self.appLabel = QLabel('应用', self.widget)
        self.playLabel = QLabel('播放', self.widget)
        self.settingLabel = QLabel('设置', self.widget)
        self.colorModeLabel = QLabel('模式', self.widget)
        self.mediaInfoLabel = QLabel('媒体信息', self.widget)
        self.loginLabel = ClickableLabel('登录', self.widget)
        self.getMetaDataCheckBox = QCheckBox('关', self.widget)
        self.darkColorButton = QRadioButton('深色', self.widget)
        self.lightColorButton = QRadioButton('浅色', self.widget)
        self.equalizerLabel = ClickableLabel('均衡器', self.widget)
        self.musicInThisPCLabel = QLabel('此PC上的音乐', self.widget)
        self.selectFolderLabel = ClickableLabel('选择查找音乐的位置', self.widget)
        self.getMetaDataLabel = QLabel('自动检索并更新缺失的专辑封面和元数据', self.widget)

    def __initWidget(self):
        """ 初始化小部件 """
        self.resize(1000, 800)
        self.widget.resize(self.width(), 800)
        self.scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        # 将信号连接到槽函数
        self.getMetaDataCheckBox.stateChanged.connect(
            self.checkBoxStatedChangedSlot)
        self.selectFolderLabel.clicked.connect(self.showSelectSongFolderPanel)
        self.lightColorButton.clicked.connect(self.colorModeChangeSlot)
        self.darkColorButton.clicked.connect(self.colorModeChangeSlot)
        # 设置鼠标光标
        self.selectFolderLabel.setCursor(Qt.PointingHandCursor)
        self.equalizerLabel.setCursor(Qt.PointingHandCursor)
        self.loginLabel.setCursor(Qt.PointingHandCursor)
        # 分配ID
        self.appLabel.setObjectName('titleLabel')
        self.playLabel.setObjectName('titleLabel')
        self.colorModeLabel.setObjectName('titleLabel')
        self.settingLabel.setObjectName('settingLabel')
        self.mediaInfoLabel.setObjectName('titleLabel')
        self.loginLabel.setObjectName('clickableLabel')
        self.musicInThisPCLabel.setObjectName('titleLabel')
        self.equalizerLabel.setObjectName('clickableLabel')
        self.selectFolderLabel.setObjectName('clickableLabel')
        # 根据是否有选中目录来设置爬虫复选框的启用与否
        self.updateCheckBoxEnabled()
        # 设置选中的主题颜色
        if self.config.get('color-mode', 'light-color') == 'light-color':
            self.lightColorButton.setChecked(True)
        else:
            self.darkColorButton.setChecked(True)
        # 初始化布局和样式
        self.__initLayout()
        self.__setQss()

    def __initLayout(self):
        """ 初始化布局 """
        self.playLabel.move(30, 247)
        self.colorModeLabel.move(30, 483)
        self.settingLabel.move(30, 63)
        self.equalizerLabel.move(30, 292)
        self.mediaInfoLabel.move(30, 350)
        self.darkColorButton.move(30, 572)
        self.getMetaDataLabel.move(30, 392)
        self.lightColorButton.move(30, 533)
        self.selectFolderLabel.move(30, 188)
        self.musicInThisPCLabel.move(30, 140)
        self.getMetaDataCheckBox.move(30, 423)
        self.appLabel.move(self.width() - 400, 140)
        self.loginLabel.move(self.width() - 400, 188)
        self.scrollArea.setWidget(self.widget)
        self.all_h_layout.addWidget(self.scrollArea)
        self.all_h_layout.setContentsMargins(0, 0, 0, 0)

    def updateCheckBoxEnabled(self):
        """ 根据是否有选中目录来设置爬虫复选框的启用与否 """
        if self.config.get('selected-folders'):
            self.getMetaDataCheckBox.setEnabled(True)
        else:
            self.getMetaDataCheckBox.setEnabled(False)

    def checkBoxStatedChangedSlot(self):
        """ 复选框状态改变对应的槽函数 """
        if self.getMetaDataCheckBox.isChecked():
            self.getMetaDataCheckBox.setText('开')
            self.getMetaDataCheckBox.setEnabled((False))
            # 创建一个爬虫线程
            self.createCrawlThread()
        else:
            self.getMetaDataCheckBox.setEnabled(True)
            self.getMetaDataCheckBox.setText('关')

    def createCrawlThread(self):
        """ 创建一个爬虫线程 """
        self.getMetaDataThread = GetMetaDataThread(
            self.config['selected-folders'])
        self.stateToolTip = StateToolTip('正在爬取专辑信息', '正在启动浏览器...',
                                         self.getMetaDataThread, self.window())
        self.getMetaDataThread.crawlSignal.connect(self.__updateStateToolTip)
        self.getMetaDataThread.finished.connect(
            self.getMetaDataThread.deleteLater)
        self.stateToolTip.show()
        self.getMetaDataThread.start()

    def __updateStateToolTip(self, crawlState):
        """ 根据爬取进度更新进度提示框 """
        if crawlState == '酷狗爬取完成':
            self.stateToolTip.setTitle('正在爬取流派信息')
        elif crawlState == '全部完成':
            self.stateToolTip.setState(True)
            # 摧毁线程
            self.getMetaDataThread.requestInterruption()
            self.getMetaDataThread.wait()
            # 更新json文件
            self.__updateSongInfo()
        elif crawlState == '强制退出':
            self.__updateSongInfo()
        else:
            self.stateToolTip.setContent(crawlState)

    def __updateSongInfo(self):
        """ 更新歌曲信息 """
        self.getMetaDataCheckBox.setCheckState(Qt.Unchecked)
        # 发送爬取完成的信号
        self.crawlComplete.emit()

    def colorModeChangeSlot(self):
        """ 主题颜色改变时更新Json文件 """
        if self.sender() == self.lightColorButton:
            self.config['color-mode'] = 'light-color'
        else:
            self.config['color-mode'] = 'dark-color'
        self.writeConfig()

    def __setQss(self):
        """ 设置层叠样式 """
        with open('resource\\css\\settingInterface.qss',
                  encoding='utf-8') as f:
            self.setStyleSheet(f.read())

    def resizeEvent(self, e):
        self.appLabel.move(self.width() - 400, 140)
        self.loginLabel.move(self.width() - 400, 188)
        self.widget.resize(self.width(), self.widget.height())
        super().resizeEvent(e)

    def showSelectSongFolderPanel(self):
        """ 显示歌曲文件夹选择面板 """
        selectSongFolderPanel = SelectSongFolderPanel(self.window())
        # 如果歌曲文件夹选择面板更新了json文件那么自己也得更新
        selectSongFolderPanel.updateSelectedFoldersSig.connect(
            self.__updateSelectedFolders)
        selectSongFolderPanel.exec_()

    def __updateSelectedFolders(self, selectedFolder_list: list):
        """ 更新选中的歌曲列表 """
        if self.config['selected-folders'] == selectedFolder_list:
            return
        self.config['selected-folders'] = selectedFolder_list
        # 发送更新歌曲文件夹列表的信号
        self.selectedFoldersChanged.emit(selectedFolder_list)

    def __readConfig(self):
        """ 读入配置文件数据 """
        # 如果配置文件夹不存在就创建一个
        if not os.path.exists('config'):
            os.mkdir('config')
        try:
            with open('config\\config.json', encoding='utf-8') as f:
                self.config = load(f)  # type:dict
        except:
            self.config = {'selected-folders': []}
        if hasattr(self, 'getMetaDataCheckBox'):
            self.updateCheckBoxEnabled()

    def writeConfig(self):
        """ 读入配置文件数据 """
        with open('config\\config.json', 'w', encoding='utf-8') as f:
            dump(self.config, f)

    def closeEvent(self, e):
        """ 关闭窗口之前更新json文件 """
        self.writeConfig()
        e.accept()
示例#19
0
class Mainwindow(QMainWindow):
    def __init__(self):
        super(mainwindow, self).__init__()
        self.initUI()
        self.password_attributes = []
        self.numbers = [
            "1",
            "2",
            "3",
            "4",
            "5",
            "6",
            "7",
            "8",
            "9",
            "0",
        ]
        self.math_symbols = [
            "*",
            "%",
            "(",
            ")",
            "/",
            "+",
            "=",
            "-",
            ">",
            "<",
        ]
        self.letters = [
            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
            'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
        ]
        self.caps_letters = [letter.upper() for letter in self.letters]
        self.speical_chacathers = [
            "!", "`", "~", "@", "#", "$", "&", "_", "}", "{", "\"", "\'", ",",
            "."
        ]
        self.passwords = []

    def initUI(self):
        self.setGeometry(350, 200, 600, 400)
        self.setWindowTitle('Password generator')

        # title of the window
        self.title = QtWidgets.QLabel('Times', self)
        self.title.setFont(QFont('Times', 20))
        self.title.setText('Password Generator')
        self.title.move(180, 10)
        self.title.resize(250, 80)

        # atturtuibes of the password

        # length of the password
        self.length_of_password = QtWidgets.QLineEdit(self)
        self.length_of_password.setDisabled(True)
        self.length_of_password.setText('0')
        self.length_of_password.resize(150, 40)
        self.length_of_password.move(40, 115)

        self.add_length = QtWidgets.QPushButton(self)
        self.add_length.setText("A")
        self.add_length.move(170, 115)
        self.add_length.resize(20, 20)
        self.add_length.setObjectName("length_of_password")
        self.add_length.clicked.connect(self.add_or_sub)

        self.remove_length = QtWidgets.QPushButton(self)
        self.remove_length.setText("S")
        self.remove_length.move(170, 135)
        self.remove_length.resize(20, 20)
        self.remove_length.setObjectName("length_of_password")
        self.remove_length.clicked.connect(self.add_or_sub)

        self.len_of_pass = QtWidgets.QLabel(self)
        self.len_of_pass.setText('Length of password')
        self.len_of_pass.setFont(QFont('Times', 10))
        self.len_of_pass.move(40, 80)
        self.len_of_pass.resize(250, 40)

        # password add special characters

        self.add_special = QtWidgets.QLabel(self)
        self.add_special.setText(
            'Add special characters. (^ < > , . \' \" ` ~)')
        self.add_special.setFont(QFont('Times', 10))
        self.add_special.move(40, 150)
        self.add_special.resize(250, 40)

        self.checkbox1 = QCheckBox(self)
        self.checkbox1.move(300, 165)

        # password adds capital letters
        self.add_caps = QtWidgets.QLabel(self)
        self.add_caps.setText('Add capital letters. (A B C D)')
        self.add_caps.setFont(QFont('Times', 10))
        self.add_caps.move(40, 180)
        self.add_caps.resize(250, 40)

        self.checkbox2 = QCheckBox(self)
        self.checkbox2.move(300, 192)

        # password add letters
        self.add_letters = QtWidgets.QLabel(self)
        self.add_letters.setText('Add letters. (a b c d)')
        self.add_letters.setFont(QFont('Times', 10))
        self.add_letters.move(40, 210)
        self.add_letters.resize(250, 40)

        self.checkbox3 = QCheckBox(self)
        self.checkbox3.move(300, 219)

        self.add_numbers = QtWidgets.QLabel(self)
        self.add_numbers.setText('Add numbers. (1 2 3 4)')
        self.add_numbers.setFont(QFont('Times', 10))
        self.add_numbers.move(40, 240)
        self.add_numbers.resize(250, 40)

        self.checkbox4 = QCheckBox(self)
        self.checkbox4.move(300, 246)

        # password add math symbols
        self.add_math_symbols = QtWidgets.QLabel(self)
        self.add_math_symbols.setText('Add math symbols. (+ - = /)')
        self.add_math_symbols.setFont(QFont('Times', 10))
        self.add_math_symbols.move(40, 270)
        self.add_math_symbols.resize(250, 40)

        self.checkbox5 = QCheckBox(self)
        self.checkbox5.move(300, 280)

        # amount of passwords
        self.amount_of_passwords = QtWidgets.QLineEdit(self)
        self.amount_of_passwords.setDisabled(True)
        self.amount_of_passwords.setText('0')
        self.amount_of_passwords.resize(150, 40)
        self.amount_of_passwords.move(375, 115)

        self.add_passwords = QtWidgets.QPushButton(self)
        self.add_passwords.setText("A")
        self.add_passwords.move(505, 115)
        self.add_passwords.resize(20, 20)
        self.add_passwords.clicked.connect(self.add_or_sub)

        self.remove_passwords = QtWidgets.QPushButton(self)
        self.remove_passwords.setText("S")
        self.remove_passwords.move(505, 135)
        self.remove_passwords.resize(20, 20)
        self.remove_passwords.clicked.connect(self.add_or_sub)

        self.amount_of_pass = QtWidgets.QLabel(self)
        self.amount_of_pass.setText('Add amount of passwords')
        self.amount_of_pass.setFont(QFont('Times', 10))
        self.amount_of_pass.move(375, 80)
        self.amount_of_pass.resize(250, 40)

        # submit password with attrubites
        self.submit_password = QtWidgets.QPushButton(self)
        self.submit_password.setText("Get Passwords")
        self.submit_password.move(375, 165)
        self.submit_password.resize(150, 40)
        self.submit_password.clicked.connect(self.submit)

        #slide down for information
        self.slider = QSlider(Qt.Vertical, self)
        self.slider.valueChanged.connect(self.updateLabel)
        self.slider.resize(30, 75)
        self.slider.move(515, 250)
        self.slider.setInvertedAppearance(True)
        self.slider.setDisabled(True)

        #display passwords
        self.display_passwords = QtWidgets.QLabel(self)
        self.display_passwords.setFont(QFont('Times', 10))
        self.display_passwords.setText('')
        self.display_passwords.move(375, 230)

    def add_or_sub(self):
        sender = self.sender()
        if sender.objectName() == "length_of_password":
            if sender.text() == self.remove_passwords.text():
                if int(self.length_of_password.text()) != 0:
                    self.length_of_password.setText(
                        str(int(self.length_of_password.text()) - 1))
            else:
                self.length_of_password.setText(
                    str(int(self.length_of_password.text()) + 1))
        else:
            if sender.text() == self.remove_passwords.text():
                if int(self.amount_of_passwords.text()) != 0:
                    self.amount_of_passwords.setText(
                        str(int(self.amount_of_passwords.text()) - 1))
            else:
                self.amount_of_passwords.setText(
                    str(int(self.amount_of_passwords.text()) + 1))

    def submit(self):
        if int(self.length_of_password.text()) != 0 and int(
                self.amount_of_passwords.text()) != 0:
            minmal_len = 0
            amount_of_passwords = int(self.amount_of_passwords.text())
            lenght_of_password = int(self.length_of_password.text())
            if self.checkbox1.isChecked() == True:
                self.password_attributes.append(self.speical_chacathers)
                minmal_len += 1
            if self.checkbox2.isChecked() == True:
                self.password_attributes.append(self.caps_letters)
                minmal_len += 1

            if self.checkbox3.isChecked() == True:
                self.password_attributes.append(self.letters)
                minmal_len += 1

            if self.checkbox4.isChecked() == True:
                self.password_attributes.append(self.numbers)
                minmal_len += 1

            if self.checkbox5.isChecked() == True:
                self.password_attributes.append(self.math_symbols)
                minmal_len += 1

            if int(self.length_of_password.text()) < minmal_len:
                QMessageBox.about(
                    self, "Problem",
                    "Your password is not long enough for the attributes that you want"
                )
                self.password_attributes = []
            if minmal_len == 0:
                QMessageBox.about(self, "Problem",
                                  "Make sure you have atleast one attribute")
            else:
                for passwords in range(0, amount_of_passwords):
                    password = ''
                    must_have = [x for x in range(0, minmal_len)]
                    random.shuffle(must_have)
                    for letters in range(0, lenght_of_password):
                        if len(must_have) != 0:
                            password += random.choice(
                                self.password_attributes[must_have[0]])
                            must_have.pop(0)
                        else:
                            password += random.choice(
                                random.choice(self.password_attributes))
                    password = list(password)
                    random.shuffle(password)
                    self.passwords.append("".join(password))
                print(self.passwords)
                self.slider.setDisabled(False)
                self.slider.setRange(0, len(self.passwords))
                self.display_passwords.setText('\n'.join(self.passwords[0:5]))
                self.display_passwords.adjustSize()
                if len(self.passwords) <= 5:
                    self.slider.hide()
                else:
                    self.slider.setRange(5, len(self.passwords))
        else:
            QMessageBox.about(
                self, "Problem",
                "Make sure you have a password that is atleast 1 character and atleast 1 password"
            )

    def updateLabel(self, value):
        value = self.slider.value()
        self.display_passwords.setText('\n'.join(self.passwords[value -
                                                                5:value]))
示例#20
0
    def initUI(self):

        # checkbox
        cb = QCheckBox('show title', self)
        cb.move(20, 20)
        cb.toggle()
        cb.stateChanged.connect(self.changeTitle)

        # toggle button
        self.col = QColor(0, 0, 0)

        redb = QPushButton('red', self)
        redb.setCheckable(True)
        redb.move(20, 40)
        redb.clicked[bool].connect(self.setColor)

        greenb = QPushButton('green', self)
        greenb.setCheckable(True)
        greenb.move(20, 60)
        greenb.clicked[bool].connect(self.setColor)

        blueb = QPushButton('blue', self)
        blueb.setCheckable(True)
        blueb.move(20, 80)
        blueb.clicked[bool].connect(self.setColor)

        self.square = QFrame(self)
        self.square.setGeometry(150, 20, 100, 100)
        self.square.setStyleSheet('QWidget {background-color: %s}' %
            self.col.name())

        # slider
        sld = QSlider(Qt.Horizontal, self)
        sld.setFocusPolicy(Qt.NoFocus)
        sld.setGeometry(20, 160, 100, 20)
        sld.valueChanged[int].connect(self.changeValue)

        self.label = QLabel('0', self)
        self.label.setGeometry(140, 155, 80, 30)

        # progressbar
        self.pbar = QProgressBar(self)
        self.pbar.setGeometry(20, 200, 200, 25)

        self.btn = QPushButton('start', self)
        self.btn.move(20, 230)
        self.btn.clicked.connect(self.doAction)

        self.timer = QBasicTimer()
        self.step = 0

        # calendar
        cal = QCalendarWidget(self)
        cal.setGridVisible(True)
        cal.move(20, 300)
        cal.clicked[QDate].connect(self.showDate)

        self.lbl = QLabel(self)
        date = cal.selectedDate()
        self.lbl.setText(date.toString())
        self.lbl.move(20, 280)

        self.setGeometry(300, 300, 400, 550)
        self.setWindowTitle('widgets')
        self.show()
示例#21
0
class UploadWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        edit = QLineEdit('', self)
        edit.setDragEnabled(True)
        edit.setReadOnly(True)
        edit.move(20, 20)
        edit.isReadOnly()
        self.edit = edit
        self.articles_checked = None
        self.wikipedia_checked = None

        self.checkbox = QCheckBox("Download Articles", self)
        self.checkbox.move(15, 50)
        self.checkbox.stateChanged.connect(self.clickBoxArticles)

        self.checkbox = QCheckBox("Wikipedia Descriptions", self)
        self.checkbox.move(15, 70)
        self.checkbox.stateChanged.connect(self.clickBoxWikipedia)

        button = Button("Choose file", self)
        button.move(138, 16)
        button.clicked.connect(self.upload_pdf)

        button2 = Button("Run", self)
        button2.setEnabled(False)
        button2.move(180, 45)
        button2.clicked.connect(self.exit)
        self.button2 = button2

        self.setWindowTitle('cTAKES Program')
        self.setGeometry(700, 300, 280, 100)

    def clickBoxArticles(self, state):
        if state == QtCore.Qt.Checked:
            print("articles checked")
            self.articles_checked = True
        else:
            print("articles unchecked")
            self.articles_checked = False

    def clickBoxWikipedia(self, state):
        if state == QtCore.Qt.Checked:
            print("wiki checked")
            self.wikipedia_checked = True
        else:
            print("wiki unchecked")
            self.wikipedia_checked = False

    def upload_pdf(self):
        dialog = QFileDialog()
        fname = dialog.getOpenFileName(None, "Import PDF", "",
                                       "PDF data file (*.pdf)")
        # if(isEmpty(fname[0]) == False):
        self.fname = fname[0]
        self.edit.setText(os.path.basename(fname[0]))
        self.button2.setEnabled(True)

    def exit(self):
        self.close()
示例#22
0
class Window(QMainWindow):

    def __init__(self):
        super(Window, self).__init__()
        self.setGeometry(50,50, 2000,1200)
        self.setWindowTitle("TdLog : betting sports")
        self.home()
        self.flag = 0
        self.setAutoFillBackground(True)
        p = self.palette()
        p.setColor(self.backgroundRole(), Qt.lightGray)
        self.setPalette(p)
        self.details_over_dtree_triggered = 0
        self.details_over_bayes_triggered = 0
        self.details_over_knn_triggered = 0
        
    def home(self):
        self.knn_method_triggered = 0
        self.decision_tree_method_triggered = 0
        self.bayes_method_triggered = 0
        self.svm_method_triggered = 0
        self.flag = 0
        self.label_1 = QLabel(self)
        self.label_1.setText("")
        self.label_2 = QLabel(self)
        self.label_2.setText("")
        self.label_3 = QLabel(self)
        self.label_3.setText("")
        self.btn_Quit = QPushButton("Quit", self)
        self.btn_Quit.clicked.connect(self.quitt)
        self.btn_svm = QPushButton("svm method", self)
        self.btn_svm.clicked.connect(self.svmmethod)
        self.label_svm = QLabel(self)
        self.label_svm.setText("")
        self.threshold = 0.5
        self.btn_Thresh = QPushButton("Threshold value", self)
        self.btn_Thresh.clicked.connect(self.threshold_value)
        self.label_Thresh = QLineEdit(self)
        self.label_Thresh.setText("0.5")
        self.label_Thresh_text = QLabel(self)
        self.label_Thresh_text.setText("")
        self.btn_0 = QPushButton("Process data", self)
        self.btn_0.clicked.connect(self.processed_data)
        self.label_0 = QLabel(self)
        self.label_0.setText("Please process data")        
        self.btn_1 = QPushButton("KNN method", self)
        self.btn_1.clicked.connect(self.launch_knn)
        self.details_knn = QPushButton("details..", self)
        self.details_knn.clicked.connect(self.details)
        self.details_bayes = QPushButton("details..", self)
        self.details_bayes.clicked.connect(self.details)
        self.details_dtree = QPushButton("details..", self)
        self.details_dtree.clicked.connect(self.details)
        self.btn_2 = QPushButton("Bayes", self)
        self.btn_2.clicked.connect(self.launch_bayes)
        self.btn_3 = QPushButton("Decision_tree", self)
        self.btn_3.clicked.connect(self.launch_decision_tree)
        self.btn_6 = QCheckBox("Next games you will bet on according to Decision Tree", self)
        self.btn_6.clicked.connect(self.next_games)
        self.label_6 = QLabel(self)
        self.label_6.setText("Please process data and try knn method \nbefore checking the box")
        self.btn_5 = QCheckBox("Next games you will bet on according to Bayes",self)
        self.btn_5.clicked.connect(self.next_games)
        self.label_5 = QLabel(self)
        self.label_5.setText("Please process data and try Bayes method \nbefore checking the box")
        self.btn_4 = QCheckBox("Next games you will bet on according to KNN", self)
        self.btn_4.clicked.connect(self.next_games)
        self.label_4 = QLabel(self)
        self.label_4.setText("Please process data and try decision tree \nmethod before checking the box")
        self.position()
        self.show()        
        
    def position(self):
        self.btn_Quit.move(1500,0)
        self.btn_0.move(0,10)
        self.btn_0.adjustSize()
        self.label_0.move(0,50)
        self.label_0.adjustSize()
        self.btn_Thresh.move(600,0)
        self.btn_Thresh.adjustSize()
        self.label_Thresh.move(650,50)
        self.label_Thresh_text.move(650,100)
        self.label_Thresh_text.adjustSize()
        self.btn_1.move(250,350)
        self.btn_1.adjustSize()
        self.details_knn.move(120,470)
        self.details_knn.adjustSize()
        self.label_1.move(250,400)
        self.btn_2.move(650,350)
        self.btn_2.adjustSize()
        self.details_bayes.move(520,470)
        self.details_bayes.adjustSize()
        self.label_2.move(650,400)
        self.btn_3.move(1000,350)
        self.btn_3.adjustSize()
        self.details_dtree.move(870,470)
        self.details_dtree.adjustSize()
        self.label_3.move(1000,400)
        self.btn_6.move(1350,600)
        self.btn_6.adjustSize()
        self.label_4.move(1350,620)
        self.label_4.adjustSize()
        self.btn_5.move(770,600)
        self.btn_5.adjustSize()
        self.label_5.move(770,620)
        self.btn_4.move(120,600)
        self.btn_4.adjustSize()
        self.label_6.move(120,620)
        self.label_5.adjustSize()
        self.btn_svm.move(1550,350)
        self.btn_svm.adjustSize()
        self.label_svm.move(1550,620)
        self.label_svm.adjustSize()
        self.label_6.adjustSize()
        

        
                
    def processed_data(self):
        df =pd.read_csv('training_file.csv', sep=';')         
        self.threshold = 0.5
        ## Creating a training files from seasons 07-08 to 18-19
        self.keys_to_keep = ["FTR","B365H","B365D","B365A","HTGDBG","ATGDBG","HTPBG","ATPBG"]
        self.X =[]
        self.Y = []
        file_name_total = ""
        
        for k in range(7,19) :
            file_name = str(k)+"-"+str(k+1)+"_processed.csv"
            file_name_total = file_name_total+"""
            """+file_name
            df=pd.read_csv('Training_Files/France/'+file_name, sep=',')
            # sep = "," fot F1_processed or sep = ";" for training_file
            # We only keep "before-game data" except FTR which we will use to train our classification algorithm
            dataset = {}
            df_dict = df.to_dict()
            print(file_name)
            for key in self.keys_to_keep : 
                dataset[key] = df_dict[key]
            dataset_df = pd.DataFrame.from_dict(dataset)
            df_dict = dataset_df.T.to_dict()
            self.X+=[list(df_dict[i].values())[1:] for i in df_dict.keys()]
            self.Y+=[list(df_dict[i].values())[0] for i in df_dict.keys()]
        
        #check for NaN values
        flag = 0
        X_copy=[]
        Y_copy=[]
        for i in range(len(self.X)) :
            for k in range(len(self.X[i])):
                if math.isnan(self.X[i][k]):
                    flag = 1
            if flag ==0 :
                X_copy+=[self.X[i]]
                Y_copy+=[self.Y[i]]
            else :
                print("Incorrect data : " + str(i))
            flag = 0
        self.X = X_copy
        self.Y=Y_copy
        
        for i in range(len(self.Y)) : 
            if self.Y[i]=="H" : 
                self.Y[i]=0
            elif self.Y[i] =="D" : 
                self.Y[i]=1
            else :
                self.Y[i]=2
        self.label_0.setText(file_name_total +"\n data successfully processed")
        self.label_0.adjustSize()
        # allow user to use the other buttons
        self.flag = 1
        
    
    
    def quitt(self):
        self.close()
    
    def threshold_value(self):
        # we compare the threshold with a probability so it has to stand between 0 and 1
        if (float(self.label_Thresh.text()) > 1 or float(self.label_Thresh.text()) < 0):
            self.label_Thresh_text.setText("please enter a value between 0 and 1")
            self.label_Thresh_text.adjustSize()
        else :
            self.threshold = float(self.label_Thresh.text())
            if self.flag == 1  and self.knn_method_triggered == 1 :
                self.launch_knn()
            if self.btn_4.checkState()==2 and self.flag == 1 :
                self.used_method = 2
                self.print_next_games(self.used_method)
            if self.flag == 1  and self.bayes_method_triggered == 1 :
                self.launch_bayes()
            if self.btn_5.checkState() == 2 and self.flag == 1 :
                self.used_method = 1
                self.print_next_games(self.used_method)
            if self.flag == 1  and self.decision_tree_method_triggered == 1 :
               self.launch_decision_tree()
            if self.btn_6.checkState() == 2 and self.flag == 1 :
                self.used_method = 0
                self.print_next_games(self.used_method)
            if self.details_over_knn_triggered == 1 :
                self.details()
            if self.details_over_bayes_triggered == 1 :
                self.details()
            if self.details_over_dtree_triggered == 1 :
                self.details()
    
    
    def launch_knn(self):
        self.method_number = 2
        self.method()
    
    def launch_decision_tree(self):
        self.method_number = 0
        self.method()
    
    def launch_bayes(self):
        self.method_number = 1
        self.method()
        
    
    def method(self):
        if self.flag == 1:
            r = random.random()
            random.shuffle(self.X, lambda:r)
            random.shuffle(self.Y, lambda:r)
            training_X = self.X[:int(len(self.X)-len(self.X)/5)]
            testing_X = self.X[int(len(self.X)-len(self.X)/5):]       
            training_Y = self.Y[:int(len(self.Y)-len(self.Y)/5)]
            testing_Y = self.Y[int(len(self.Y)-len(self.Y)/5):]    
            if self.method_number == 0:
                self.decision_tree_method_triggered = 1
                self.dtree_model = DecisionTreeClassifier(max_depth = 10).fit(training_X, training_Y) 
                predictions = self.dtree_model.predict_proba(testing_X)
            if self.method_number == 1:
                self.bayes_method_triggered = 1
                self.gnb = GaussianNB().fit(training_X, training_Y) 
                predictions = self.gnb.predict_proba(testing_X)
            if self.method_number == 2:
                self.knn_method_triggered = 1    
                self.knn = KNeighborsClassifier(n_neighbors = 3).fit(training_X, training_Y) 
                # creating a confusion matrix 
                predictions = self.knn.predict_proba(testing_X) 
            accepted_games = []
            accepted_Y = []
            accepted_odd =[]
            sum_true_odd = 0
            number_of_won_games = 0
            X_bet = [20]
            for k in range (len(predictions)) : 
                for i in range(len(predictions[k])) : 
                    if predictions[k][i]>self.threshold : 
                        accepted_games+=[i]
                        accepted_Y+=[testing_Y[k]]
                        accepted_odd+=[testing_X[k][i]]
                        l = len(X_bet)
                        if testing_Y[k] == i:
                            sum_true_odd += testing_X[k][i]
                            number_of_won_games += 1
                            X_bet.append(X_bet[l-1]+20*((sum_true_odd/number_of_won_games) - 1))
                        else :
                            X_bet.append(X_bet[l-1]-20)
            if self.method_number == 0:
                self.X_bet_dtree = X_bet
            if self.method_number == 1:
                self.X_bet_bayes = X_bet
            if self.method_number == 2:
                self.X_bet_knn = X_bet
            cm = confusion_matrix(accepted_Y, accepted_games) 
            true_class = cm[0][0]+cm[1][1]+cm[2][2]
            correct_answers = true_class/len(accepted_Y)
            correct_answers = round(correct_answers,4)
            correct_answers = str(correct_answers)
            average_bet = sum_true_odd/number_of_won_games
            average_bet = round(average_bet,4)
            average_bet = str(average_bet)
            average_gain = (true_class/len(accepted_Y))*(sum_true_odd/(true_class))*20-20
            average_gain = round(average_gain,4)
            average_gain = str(average_gain)
            if self.method_number == 2:
                self.label_1.setText("KNN correct answers (%):"+correct_answers+" \nAverage won odd :"+average_bet+" \nWhat you got betting 20 £ :"+average_gain)
                self.label_1.adjustSize()
            if self.method_number ==1:
                self.label_2.setText("Bayes correct answers (%):"+correct_answers+" \nAverage won odd :"+average_bet+" \nWhat you got betting 20 £ :"+average_gain)
                self.label_2.adjustSize()
            if self.method_number == 0:
                self.label_3.setText("Decision tree correct answers (%):"+correct_answers+" \nAverage won odd :"+average_bet+" \nWhat you got betting 20 £ :"+average_gain)
                self.label_3.adjustSize()
            if self.method_number == 2 and self.btn_4.checkState()==2:
                self.used_method = 2
                self.print_next_games(self.used_method)
                if self.details_over_knn_triggered == 1:
                    self.details()
            if self.method_number == 1 and self.btn_5.checkState()==2:
                self.used_method = 1
                self.print_next_games(self.used_method)  
                if self.details_over_bayes_triggered == 1:
                    self.details()
            if self.method_number == 0 and self.btn_6.checkState()==2:
                self.used_method = 0
                self.print_next_games(self.used_method) 
                if self.details_over_dtree_triggered == 1:    
                    self.details()
                    
            # you have to push "details" if you have pushed again a method, this is one of the problems 
        else :
            self.label_1.setText("""Please process the data before  
            starting analyse them ...""")
            self.label_1.adjustSize()
            self.label_2.setText("""Please process the data before 
            starting analyse them ...""")
            self.label_2.adjustSize()  
            self.label_3.setText("""Please process the data before 
            starting analyse them ...""")
            self.label_3.adjustSize()
            

### Those  functions print on the user interface the next games and teams he has to bet on
    
    def next_games(self):
        if self.flag == 1 :
            if self.btn_4.checkState() == 2 :
                self.used_method = 2
                self.print_next_games(self.used_method)
            if self.btn_5.checkState() == 2 :
                self.used_method = 1
                self.print_next_games(self.used_method)
            if self.btn_6.checkState() == 2:
                self.used_method = 0
                self.print_next_games(self.used_method)            
            
    def print_next_games(self, method_name):
        df = pd.read_csv("Next_games.csv", sep=';')            
        dataset = {}
        df_dict_origin = df.to_dict()
        for key in self.keys_to_keep : 
            dataset[key] = df_dict_origin[key]
        dataset_df = pd.DataFrame.from_dict(dataset)
        df_dict = dataset_df.T.to_dict()           
        X =[]
        X +=[list(df_dict[i].values())[1:] for i in df_dict.keys()]
        if method_name == 0 :
            predictions = self.dtree_model.predict_proba(X)
        if method_name == 1 :
            predictions = self.gnb.predict_proba(X)
        if method_name == 2 :
            predictions = self.knn.predict_proba(X)
        Games_you_need_to_bet_on = []
        number_of_bets = 0
        for i in range(len(predictions)) :
            # we browse predictions and print the team and the game if our prediction are good enough to bet on it
            if (predictions[i][0] > self.threshold) :
                # if probability of home team victory is higher than the threshold, we bet on home team
                Games_you_need_to_bet_on.append("\nBet on %s during %s against %s on %s" %(df_dict_origin["HomeTeam"][i],df_dict_origin["HomeTeam"][i],df_dict_origin["AwayTeam"][i],df_dict_origin["Date"][i]))
                number_of_bets += 1
            if (predictions[i][1] > self.threshold) :
                Games_you_need_to_bet_on.append("\nBet on a draw during %s against %s on %s"%(df_dict_origin["HomeTeam"][i],df_dict_origin["AwayTeam"][i],df_dict_origin["Date"][i]))
                number_of_bets += 1
            if (predictions[i][2] > self.threshold) :
                Games_you_need_to_bet_on.append("\nBet on %s during %s against %s on %s"%(df_dict_origin["AwayTeam"][i],df_dict_origin["HomeTeam"][i],df_dict_origin["AwayTeam"][i],df_dict_origin["Date"][i]))
                number_of_bets += 1
        if method_name == 0:
            self.label_4.setText(' '.join(Games_you_need_to_bet_on))
            self.label_4.adjustSize()
        if method_name == 1:
            self.label_5.setText(' '.join(Games_you_need_to_bet_on))
            self.label_5.adjustSize()
        if method_name == 2:
            self.label_6.setText(' '.join(Games_you_need_to_bet_on))
            self.label_6.adjustSize()
            

### Those functions plot the details of current cash over time according relating to the differents kinds of method we consider

    
    def details(self):
        if self.flag == 1:  
            if self.decision_tree_method_triggered == 1:
                self.details_over_dtree_triggered = 1
            if self.bayes_method_triggered == 1:
                self.details_over_bayes_triggered = 1
            if self.knn_method_triggered == 1:
                self.details_over_knn_triggered = 1
            self.draw()

    def draw(self):
        plt.figure(1)
        plt.clf()
        plt.subplot(221)
        if self.details_over_dtree_triggered == 1:  
            l = len(self.X_bet_dtree)
            Y = [1]*(l)
            for i in range(1,l):
                Y[i] = Y[i-1]+1               
            plt.figure(1)
            plt.plot(Y, self.X_bet_dtree, 'b')
            plt.title("Decision Tree method")
            plt.ylabel("Current_cash")
            plt.xlabel("Time")
        plt.subplot(222)
        if self.details_over_bayes_triggered == 1:  
            l = len(self.X_bet_bayes)
            Y = [1]*(l)
            for i in range(1,l):
                Y[i] = Y[i-1]+1               
            plt.plot(Y, self.X_bet_bayes, 'm')
            plt.title("Bayes method")
            plt.ylabel("Current_cash")
            plt.xlabel("Time")
        plt.subplot (223)
        if self.details_over_knn_triggered == 1:
            l = len(self.X_bet_knn)
            Y = [1]*(l)
            for i in range(1,l):
                Y[i] = Y[i-1]+1      
            plt.plot(Y, self.X_bet_knn, 'g')
            plt.title("KNN method")
            plt.ylabel("Current_cash")
            plt.xlabel("Time")
        plt.draw()

    def svmmethod(self):
        # check if he has processed data
        if self.flag == 1:
            self.svm_method_triggered = 1
            # remix the data to train the model each time on different values set
            r = random.random()
            random.shuffle(self.X, lambda:r)
            random.shuffle(self.Y, lambda:r)
            training_X = self.X[:int(len(self.X)-len(self.X)/5)]
            testing_X = self.X[int(len(self.X)-len(self.X)/5):]       
            training_Y = self.Y[:int(len(self.Y)-len(self.Y)/5)]
            testing_Y = self.Y[int(len(self.Y)-len(self.Y)/5):] 
            # use of svm_linear model
            self.svm_model_linear = SVC(kernel = 'linear', C = 1, probability = True).fit(training_X, training_Y) 
            svm_predictions = self.svm_model_linear.predict_proba(testing_X) 
            ### compute some data concerning the model to give an overview of it
            # pool of games we bet on
            accepted_games_svm = []
            accepted_Y_svm = []
            accepted_odd_svm =[]
            sum_true_odd_svm = 0
            number_of_won_games_svm = 0
            for k in range (len(svm_predictions)) : 
                for i in range(len(svm_predictions[k])) : 
                    # if the probability we computed thanks to svm model is higher than the threshold, we bet
                    if svm_predictions[k][i]>self.threshold : 
                        accepted_games_svm+=[i]            
                        accepted_Y_svm+=[testing_Y[k]]
                        accepted_odd_svm+=[testing_X[k][i]]
                        if testing_Y[k] == i:
                            sum_true_odd_svm += testing_X[k][i]
                            number_of_won_games_svm += 1
            # building a confusion matrix
            cm_svm = confusion_matrix(accepted_Y_svm, accepted_games_svm)
            # pool of games we bet on successfully 
            true_class_svm = cm_svm[0][0]+cm_svm[1][1]+cm_svm[2][2]
            correct_answers = true_class_svm/len(accepted_Y_svm)
            correct_answers = round(correct_answers,4)
            correct_answers = str(correct_answers)
            average_bet = sum_true_odd_svm/number_of_won_games_svm
            average_bet = round(average_bet,4)
            average_bet = str(average_bet)
            average_gain = (true_class_svm/len(accepted_Y_svm))*(sum_true_odd_svm/(true_class_svm))*20-20
            average_gain = round(average_gain,4)
            average_gain = str(average_gain)
            # it gives the overview of the model efficiency on a QLabel just under the QPushButton
            self.label_1.setText("SVM correct answers (%):"+correct_answers+" \nAverage won odd :"+average_bet+" \nWhat you got betting 20 £ :"+average_gain)
            self.label_1.adjustSize()
            # if the QCheckBox is checked, it prints the next games and teams we have to bet on
            if self.btn_svm.checkState()==2:
                self.print_svm_next_games() 
        # if data are not processed
        else :
            self.label_svm.setText("Please process the data before  starting analyse them ...")
            self.label_svm.adjustSize()
            
    """
    This function prints the next games the user need to bet on according to the method he has choosen
    """
    def print_svm_next_games(self):
        df = pd.read_csv("Next_games.csv", sep=';')
        dataset = {}
        df_dict_origin = df.to_dict()
        for key in self.keys_to_keep : 
            dataset[key] = df_dict_origin[key]
        dataset_df = pd.DataFrame.from_dict(dataset)
        df_dict = dataset_df.T.to_dict()
        X_svm =[]
        X_svm+=[list(df_dict[i].values())[1:] for i in df_dict.keys()]
        predictions = self.svm.predict_proba(X_svm)
        Games_you_need_to_bet_on = []
        for i in range(len(predictions)) :
        # we browse predictions and print the team and the game if our prediction are good enough to bet on it
            if (predictions[i][0] > self.threshold) :
                # if probability of home team victory is higher than the threshold, we bet on home team
                Games_you_need_to_bet_on.append("\nBet on %s during %s against %s on %s" %
                                                (df_dict_origin["HomeTeam"][i],df_dict_origin["HomeTeam"][i],
                                                 df_dict_origin["AwayTeam"][i],df_dict_origin["Date"][i]))
            if (predictions[i][1] > self.threshold) :
                Games_you_need_to_bet_on.append("\nBet on a draw game during %s againt %s on %s"%
                                                (df_dict_origin["HomeTeam"][i],df_dict_origin["AwayTeam"][i],
                                                 df_dict_origin["Date"][i]))
            if (predictions[i][2] > self.threshold) :
                Games_you_need_to_bet_on.append("\nBet on %s during %s against %s on %s"%
                                                (df_dict_origin["AwayTeam"][i],df_dict_origin["HomeTeam"][i],
                                                 df_dict_origin["AwayTeam"][i],df_dict_origin["Date"][i]))
        self.label_svm.setText(' '.join(Games_you_need_to_bet_on))
        self.label_svm.adjustSize()
        
    def svm_next_games(self):
        if self.flag == 1 and self.btn_svm.checkState() == 2 :
            self.print_svm_next_games()
            
        else :
            self.label_svm.setText("Please process data, check the box and \ntry svm method")
            self.label_svm.adjustSize()
示例#23
0
    def initUI(self):
        self.setGeometry(300, 300, 600, 600)
        self.setWindowTitle('Drawing home')
        self.width = 175  #default settings
        self.height = 100
        self.roofHeight = 50
        self.mainColor1 = QColor(255, 255, 127)
        self.mainColor2 = QColor(255, 85, 0)
        self.roofColor = QColor(199, 250, 252)
        self.doorColor = QColor(255, 255, 255)
        self.lightColor = QColor(255, 219, 41)
        self.windowStyle = "Round window"
        self.roomNumber = 1

        drawButton = QPushButton(
            "Move cursor here to update the object, if it was not happened",
            self)
        drawButton.setFont(QFont("Comic Sans MS", 11, QFont.Normal))
        drawButton.move(40, 60)
        drawButton.adjustSize()
        #sliders etc.
        self.changeWidth = QSlider(Qt.Horizontal, self)
        self.changeWidth.setFocusPolicy(Qt.NoFocus)
        self.changeWidth.setStyleSheet(sldStyle)  #use our own style!
        self.changeWidth.setGeometry(30, 150, 100, 30)
        self.changeWidth.valueChanged[int].connect(self.changeWidthF)
        self.changeHeight = QSlider(Qt.Horizontal, self)
        self.changeHeight.setFocusPolicy(Qt.NoFocus)
        self.changeHeight.setStyleSheet(sldStyle)
        self.changeHeight.setGeometry(30, 220, 100, 30)
        self.changeHeight.valueChanged[int].connect(self.changeHeightF)
        self.changeRoofHeight = QSlider(Qt.Horizontal, self)
        self.changeRoofHeight.setFocusPolicy(Qt.NoFocus)
        self.changeRoofHeight.setStyleSheet(sldStyle)
        self.changeRoofHeight.setGeometry(30, 290, 100, 30)
        self.changeRoofHeight.valueChanged[int].connect(self.changeRoofHeightF)
        changeWindowStyle = QComboBox(self)
        changeWindowStyle.addItem("Round window")
        changeWindowStyle.addItem("2-part window")
        changeWindowStyle.addItem("No window")
        changeWindowStyle.move(30, 365)
        changeWindowStyle.setFont(QFont("Tahoma", 10, QFont.Normal))
        changeWindowStyle.activated[str].connect(self.changeWindowStyle)
        changeWindowStyle.adjustSize()
        changeIllumination = QCheckBox('Neon Light', self)
        changeIllumination.move(30, 410)
        changeIllumination.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeIllumination.adjustSize()
        changeIllumination.stateChanged.connect(self.changeIllumination)
        changeRoomNumber = QComboBox(self)
        changeRoomNumber.addItem("1")
        changeRoomNumber.addItem("2")
        changeRoomNumber.move(30, 505)
        changeRoomNumber.setFont(QFont("Tahoma", 10, QFont.Normal))
        changeRoomNumber.activated[int].connect(self.changeRoomNumber)
        #labels
        changeW = QLabel("Width", self)
        changeW.move(30, 120)
        changeW.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeH = QLabel("Height", self)
        changeH.move(30, 190)
        changeH.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeRH = QLabel("Roof level", self)
        changeRH.move(30, 260)
        changeRH.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeWS = QLabel("Window style", self)
        changeWS.move(30, 330)
        changeWS.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeWS.adjustSize()
        changeRN = QLabel("Number of rooms", self)
        changeRN.move(30, 450)
        changeRN.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeRN.adjustSize()
        changeRN1 = QLabel("on the 2nd floor", self)
        changeRN1.move(30, 470)
        changeRN1.setFont(QFont("Segoe Print", 10, QFont.Normal))
        changeRN1.adjustSize()
        #toolbar actions
        roofColorAction = QAction(QIcon('colorR.png'),
                                  'Change color of the roof', self)
        roofColorAction.triggered.connect(self.changeRoofColor)
        color1Action = QAction(QIcon('color2.png'),
                               'Change color of the upper part', self)
        color1Action.triggered.connect(self.changeColor1)
        color2Action = QAction(QIcon('color1.png'),
                               'Change color of the lower part', self)
        color2Action.triggered.connect(self.changeColor2)
        doorColorAction = QAction(QIcon('colorD.png'),
                                  'Change color of the door', self)
        doorColorAction.triggered.connect(self.changeDoorColor)
        randomizeAction = QAction(QIcon('random.png'), 'Randonize your house',
                                  self)
        randomizeAction.triggered.connect(self.randomize)
        toolbar = self.addToolBar('Menu')
        toolbar.setIconSize(QSize(45, 45))
        toolbar.addAction(roofColorAction)
        toolbar.addAction(color2Action)
        toolbar.addAction(color1Action)
        toolbar.addAction(doorColorAction)
        toolbar.addAction(randomizeAction)

        self.show()
示例#24
0
class SERIAL_UI(object):
    def __init__(self):
        super().__init__()
        self.resize(850, 600)
        self.center()

    def UI_init(self):
        lbl = QLabel("端口", self)
        lbl.move(20, 45)
        self.com = QComboBox(self)
        self.ComRelist()
        self.com.move(70, 45)
        self.com.resize(80, 25)

        self.RefreshCom = QPushButton("刷新串口", self)
        self.RefreshCom.move(30, 10)
        self.RefreshCom.resize(80, 25)

        lbl = QLabel("波特率", self)
        lbl.setFont(QFont("Microsoft YaHei"))
        lbl.move(20, 75)
        self.baudrate = QComboBox(self)
        self.baudrate.addItem("1200")
        self.baudrate.addItem("2400")
        self.baudrate.addItem("4800")
        self.baudrate.addItem("9600")
        self.baudrate.addItem("19200")
        self.baudrate.addItem("38400")
        self.baudrate.addItem("57600")
        self.baudrate.addItem("115200")
        self.baudrate.move(70, 75)
        self.baudrate.setCurrentIndex(3)  # 设置默认的下拉选项
        #		self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.s1__box_5)
        self.baudrate.resize(80, 25)

        self.lbl = QLabel("校验位", self)
        self.lbl.move(20, 105)
        self.parity_bit = QComboBox(self)
        self.parity_bit.addItem("NONE")
        self.parity_bit.addItem("ODD")
        self.parity_bit.addItem("EVEN")
        self.parity_bit.move(70, 105)
        self.parity_bit.setCurrentIndex(2)
        self.parity_bit.resize(80, 25)

        lbl = QLabel("数据位", self)
        lbl.move(20, 135)
        self.data_bit = QComboBox(self)
        self.data_bit.addItem("5")
        self.data_bit.addItem("6")
        self.data_bit.addItem("7")
        self.data_bit.addItem("8")
        self.data_bit.move(70, 135)
        self.data_bit.setCurrentIndex(3)
        self.data_bit.resize(80, 25)

        lbl = QLabel("停止位", self)
        lbl.move(20, 165)
        self.stop_bit = QComboBox(self)
        self.stop_bit.addItem("1")
        self.stop_bit.addItem("2")
        self.stop_bit.move(70, 165)
        self.stop_bit.resize(80, 25)

        #		self.col = QColor(0, 0, 0)
        self.StartCom = QPushButton("打开串口", self)
        #		StartCom.setStyleSheet(''' text-align : center;
        #                                            background-color : NavajoWhite;
        #                                            height : 30px;
        #                                            border-style: outset;
        #                                           font : 13px  ''')

        self.StartCom.setCheckable(True)
        self.StartCom.move(40, 200)
        self.StartCom.resize(80, 30)

        #		self.square = QFrame(self)
        #		self.square.setGeometry(140, 245, 20, 20)
        #		self.square.setStyleSheet("QWidget { background-color:red}")

        self.OutputText = QTextEdit(self)
        self.OutputText.move(180, 20)
        self.OutputText.resize(650, 400)
        #		self.OutputText.setPlainText('Hello PyQt5!\n单击按钮')
        #		self.OutputText.append("close")
        self.InputText = QTextEdit(self)
        self.InputText.move(180, 470)
        self.InputText.resize(650, 60)

        self.HexSend = QCheckBox('Hex发送', self)
        self.HexSend.move(550, 540)
        self.HexSend.resize(100, 30)

        self.ClearSend = QPushButton("清发送区", self)
        self.ClearSend.move(650, 540)
        self.ClearSend.resize(80, 30)

        self.HexReceive = QCheckBox('Hex接收', self)
        self.HexReceive.move(550, 430)
        self.HexReceive.resize(100, 30)

        self.ClearReceive = QPushButton("清接收区", self)
        self.ClearReceive.move(650, 430)
        self.ClearReceive.resize(80, 30)

        self.TimerSendCheck = QCheckBox('定时发送', self)
        self.TimerSendCheck.move(350, 540)
        self.TimerSendCheck.resize(100, 30)
        self.TimerSendValue = QLineEdit(self)
        self.TimerSendValue.move(420, 540)
        self.TimerSendValue.resize(50, 30)
        self.TimerSendValue.setText("")
        lbl = QLabel("ms/次", self)
        lbl.move(470, 540)

        #		ClearReceive.setStyleSheet(''' text-align : center;
        #                                            background-color : NavajoWhite;
        #                                            height : 30px;
        #                                            border-style: outset;
        #                                           font : 13px  ''')
        self.InputSend = QPushButton("发送", self)
        self.InputSend.move(200, 540)
        self.InputSend.resize(80, 30)

        tmp = open('logo.png', 'wb')
        tmp.write(base64.b64decode(logo))
        tmp.close()

        self.statusBar()
        self.setWindowIcon(QIcon('logo.png'))
        self.setWindowTitle('Python串口调试助手     作者: 何苏平 QQ:398002463')
        self.show()

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

    def ComRelist(self):
        self.com.clear()
        for i in self.serial_list:
            self.com.addItem(i)
class window(QMainWindow):
    def __init__(self, full_rumplestilskin_list):

        super(window, self).__init__()
        self.setGeometry(150, 150, 300, 365)
        self.setFixedSize(280, 340)
        self.setWindowTitle("Inventory Manager")

        self.full_list = full_rumplestilskin_list

        extractAction = QAction("Quit", self)
        extractAction.setShortcut("Ctrl+X")
        extractAction.setStatusTip("Closes the program")
        extractAction.triggered.connect(self.close_application)

        self.statusBar()

        mainMenu = self.menuBar()
        fileMenu = mainMenu.addMenu("&File")
        fileMenu.addAction(extractAction)

        self.home()

    def home(self):

        self.name_box = QLineEdit(self)
        self.name_box.move(95, 60)
        self.name_box.resize(125, 25)

        self.name_label = QLabel(self)
        self.name_label.setText("Oil Name")
        self.name_label.setAlignment(Qt.AlignVCenter)
        self.name_label.move(50, 57)
        self.name_label.setFixedWidth(50)

        self.prd_box = QLineEdit(self)
        self.prd_box.move(95, 90)
        self.prd_box.resize(125, 25)

        self.prd_label = QLabel(self)
        self.prd_label.setText("Production Code")
        self.prd_label.setAlignment(Qt.AlignVCenter)
        self.prd_label.move(13, 87)
        self.prd_label.setFixedWidth(80)

        self.newer_date = QLineEdit(self)
        self.newer_date.move(95, 120)
        self.newer_date.resize(125, 25)

        self.new_date_label = QLabel(self)
        self.new_date_label.setText("Purchased After")
        self.new_date_label.setAlignment(Qt.AlignVCenter)
        self.new_date_label.move(15, 117)
        self.new_date_label.setFixedWidth(80)

        self.older_date = QLineEdit(self)
        self.older_date.move(95, 150)
        self.older_date.resize(125, 25)

        self.older_date_label = QLabel(self)
        self.older_date_label.setText("Purchased Before")
        self.older_date_label.setAlignment(Qt.AlignVCenter)
        self.older_date_label.move(6, 147)
        self.older_date_label.setFixedWidth(85)

        self.output_name = QLineEdit(self)
        self.output_name.move(95, 230)
        self.output_name.resize(125, 25)

        self.output_name_label = QLabel(self)
        self.output_name_label.setText("Output Name")
        self.output_name_label.setAlignment(Qt.AlignVCenter)
        self.output_name_label.move(16, 227)

        search_button = QPushButton("Search", self)
        search_button.resize(95, 25)
        search_button.move(125, 280)
        search_button = search_button.clicked.connect(self.search)

        self.b1 = QCheckBox("Show only in stock", self)
        self.b1.move(95, 175)
        self.b1.setFixedWidth(150)

        self.b2 = QCheckBox("Show only out of stock", self)
        self.b2.move(95, 200)
        self.b2.setFixedWidth(150)

        self.show()

    def search(self):

        filtered_list = []
        for i in self.full_list:
            filtered_list.append(i)

        if len(self.output_name.text()) == 0:
            self.output_error()
            return

        # ------------------------------------------
        # Filter for names and lot number
        # ------------------------------------------

        if len(self.name_box.text()) > 0:
            filtered_list = list(
                filter(
                    lambda oil: self.name_box.text().lower() in oil[1].lower(),
                    filtered_list))

        if len(self.prd_box.text()) > 0:
            filtered_list = list(
                filter(
                    lambda oil: self.prd_box.text().lower()[-4:] in oil[0].
                    lower(), filtered_list))

        # ------------------------------------------
        # Get Date Values and check for date filters
        # ------------------------------------------

        get_purchase_date(filtered_list)
        filtered_list = sort_by_date(filtered_list)

        if len(self.newer_date.text()) > 0:

            try:
                search_date_newer = datetime.date(
                    int(self.newer_date.text()[6:]),
                    int(self.newer_date.text()[:2]),
                    int(self.newer_date.text()[3:5]))
            except (TypeError, ValueError):
                self.date_error()
                return

            filtered_list = list(
                filter(lambda oil: search_date_newer <= oil[7], filtered_list))

        if len(self.older_date.text()) > 0:

            try:
                search_date_older = datetime.date(
                    int(self.older_date.text()[6:]),
                    int(self.older_date.text()[:2]),
                    int(self.older_date.text()[3:5]))
            except (TypeError, ValueError):
                self.date_error()
                return

            filtered_list = list(
                filter(lambda oil: search_date_older >= oil[7], filtered_list))

        # --------------------------------------
        # Get Stock Values and check for filters
        # --------------------------------------

        get_stock(filtered_list)

        if self.b1.isChecked():

            filtered_list = list(
                filter(lambda oil: oil[2] != "0 mL" or oil[3] != "0 mL",
                       filtered_list))

        if self.b2.isChecked():

            filtered_list = list(
                filter(lambda oil: oil[2] == "0 mL" and oil[3] == "0 mL",
                       filtered_list))

        # --------------------------------------
        # Finish and build file
        # --------------------------------------

        if len(filtered_list) == 0:
            self.error_window_no_matches()
            return

        if len(filtered_list) >= 100:
            x = self.too_many_oils()
            if x:
                pass
            else:
                return

        try:
            create_file(filtered_list,
                        "{}.xls".format(self.output_name.text()))

            self.older_date.setText("")
            self.newer_date.setText("")
            self.name_box.setText("")
            self.prd_box.setText("")
            self.output_name.setText("")
            self.b1.setChecked(False)
            self.b2.setChecked(False)
            return
        except EnvironmentError:
            self.output_error()
            self.output_name.setText("")
            return

    def error_window_no_matches(self):

        choice = QMessageBox.question(self, 'Error',
                                      "No oils matched your search",
                                      QMessageBox.Ok)
        if choice == QMessageBox.Ok:
            pass

    def date_error(self):

        choice = QMessageBox.question(self, 'Error',
                                      "Date must be in MM/DD/YYYY format",
                                      QMessageBox.Ok)
        if choice == QMessageBox.Ok:
            pass

    def output_error(self):

        choice = QMessageBox.question(self, 'Error', "Invalid output name",
                                      QMessageBox.Ok)
        if choice == QMessageBox.Ok:
            pass

    def too_many_oils(self):

        choice = QMessageBox.question(
            self, 'Error',
            "Over 100 oils match your search, are you sure you want to continue?",
            QMessageBox.Yes, QMessageBox.No)
        if choice == QMessageBox.Yes:
            return True
        if choice == QMessageBox.No:
            return False

    def close_application(self):
        sys.exit()
示例#26
0
class Login(QWidget):
    def __init__(self):
        super().__init__()

        auto_login = False
        try:
            with open(pickle_file, 'rb') as rb:
                data = pickle.load(rb)
            auto_login = data['auto_login']
            MsgWorker().send_msg(
                msg_lib.build_login_msg(data['name'], data['pwd']))
            self.do_after_login(from_auto=True)
        except Exception as ex:
            print(ex)

        if not auto_login:
            self.init_ui()

    def init_ui(self):
        QLabel('用户名:', self).move(120, 64)
        self.et_name = QLineEdit(self)
        self.et_name.move(180, 60)
        QLabel('密  码:', self).move(120, 104)
        self.et_pwd = QLineEdit(self)
        self.et_pwd.move(180, 100)
        self.et_pwd.setEchoMode(QLineEdit.Password)

        self.cb = QCheckBox(self)
        self.cb.setText('自动登录')
        self.cb.move(180, 140)

        btn = QPushButton("登录", self)
        btn.resize(80, 30)
        btn.move(150, 200)
        btn.clicked[bool].connect(self.click_login)
        btn = QPushButton("取消", self)
        btn.resize(80, 30)
        btn.move(260, 200)
        btn.clicked[bool].connect(self.click_cancel)

        self.resize(480, 280)
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

        self.setWindowTitle('登录')
        self.show()

    def click_login(self):
        name = self.et_name.text()
        if len(name) == 0:
            QMessageBox.information(self, '登录错误', "请输入用户名")
            # tkmsgbox.showerror('登录错误', '请输入用户名')
            return

        pwd = self.et_pwd.text()
        if len(pwd) == 0:
            QMessageBox.information(self, '登录错误', "请输入密码")
            # tkmsgbox.showerror('登录错误', '请输入密码')
            return

        MsgWorker().do_exit = self.click_cancel

        import hashlib
        md5 = hashlib.md5()
        md5.update(pwd.encode())
        md5_pwd = md5.hexdigest()

        self.login_name = name
        self.login_pwd = md5_pwd
        MsgWorker().send_msg(msg_lib.build_login_msg(name, md5_pwd))
        self.do_after_login()

    def do_after_login(self, from_auto=False):
        while MsgWorker().login_flag == 0:
            time.sleep(0.1)

        if MsgWorker().login_flag == 2:
            QMessageBox.information(self, '登录错误', "用户名或密码无效")
            # tkmsgbox.showerror('登录错误', '用户名或密码无效')
            return

        if not from_auto:
            with open(pickle_file, 'wb') as fw:
                if self.cb.isChecked():
                    pickle.dump(
                        {
                            'auto_login': True,
                            'name': self.login_name,
                            'pwd': self.login_pwd
                        }, fw)
                else:
                    pickle.dump({'auto_login': False}, fw)

        desktop = QApplication.desktop()
        frame_height = desktop.height() - 70
        frame_width = 160
        frame_left = desktop.width() - frame_width
        # self.withdraw()
        self.setVisible(False)

        main = Main(user=MsgWorker().user_info,
                    width=frame_width,
                    height=frame_height)
        main.setGeometry(frame_left, 30, frame_width, frame_height)
        main.show()

    def click_cancel(self):
        self.destroy()
示例#27
0
class BigTask(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300, 50, 1600, 950)

        self.toponym_text = QLineEdit(self)
        self.toponym_text.resize(500, 30)
        self.toponym_text.move(180, 910)
        self.toponym_text.setDisabled(True)

        self.btn1 = QPushButton('Начать набор текста', self)
        self.btn1.resize(150, 40)
        self.btn1.move(15, 905)
        self.btn1.clicked.connect(self.start_text)

        self.btn2 = QPushButton('Искать!', self)
        self.btn2.resize(150, 40)
        self.btn2.move(710, 905)
        self.btn2.clicked.connect(self.find_toponym)
        self.btn2.setDisabled(True)

        self.btn3 = QPushButton('Сброс поискового результата', self)
        self.btn3.resize(200, 40)
        self.btn3.move(1200, 905)
        self.btn3.clicked.connect(self.reset_result)

        self.label = QLabel(self)
        self.label.setText("")
        self.label.resize(110, 30)
        self.label.move(980, 910)

        self.label2 = QLabel(self)
        self.label2.setText("")
        self.label2.resize(110, 30)
        self.label2.move(1250, 100)

        self.statham = QLabel(self)
        self.statham.setText("")
        self.statham.resize(1200, 35)
        self.statham.move(50, 10)

        self.sorry = QLabel(self)
        self.sorry.setText("")
        self.sorry.resize(300, 320)
        self.sorry.move(1250, 300)
        pixmap = QPixmap('shrek.jpg')
        self.sorry.setPixmap(pixmap)
        self.sorry.hide()

        self.sorry_text = QLabel(self)
        self.sorry_text.setText("")
        self.sorry_text.resize(300, 30)
        self.sorry_text.move(1250, 250)

        self.address = QLabel(self)
        self.address.setText("")
        self.address.resize(300, 40)
        self.address.move(1250, 50)

        self.postcode = QCheckBox('Почтовый индекс', self)
        self.postcode.move(1250, 200)
        self.postcode.clicked.connect(self.find_toponym)

        # Перемещать центр карты на W, S, D, A вверх, вниз, вправо и влево соответственно
        self.start_longitude = 43.820637
        self.start_lattitude = 56.364506
        self.max_longitube = 180
        self.min_longitube = -180
        self.max_lattitude = 90
        self.min_lattitude = -90
        self.right_border = 43.824742
        self.up_border = 56.366784
        self.left_border = 43.816532
        self.down_border = 56.362227
        self.point = False

        # Масштаб меняется на PgUp/PgDown
        self.delta = 0.005
        self.dop_delta = ["0.005", "0.005"]

        # Слой меняется на кнопку L
        self.layer = "map"

        self.image = QLabel(self)
        self.image.move(0, 0)
        self.image.resize(1200, 900)
        self.make_image()

    def start_text(self):
        self.toponym_text.setDisabled(False)
        self.btn2.setDisabled(False)

    def mousePressEvent(self, QMouseEvent):
        self.toponym_text.setDisabled(True)
        self.btn2.setDisabled(True)

    def make_image(self):
        global map_file
        map_params = {
            "ll":
            ",".join([str(self.start_longitude),
                      str(self.start_lattitude)]),
            "spn": ','.join(self.dop_delta),
            "l": self.layer
        }
        if self.point:
            map_params[
                "pt"] = f"{self.point_longitude},{self.point_lattitude},pm2rdl1"
        map_api_server = "http://static-maps.yandex.ru/1.x/"
        response = requests.get(map_api_server, params=map_params)
        if self.layer == "map":
            map_file = "map.png"
        else:
            map_file = "map.jpg"
        with open(map_file, "wb") as file:
            file.write(response.content)
        self.pixmap = QPixmap(map_file)
        self.image.setPixmap(self.pixmap.scaled(1200, 900))

    def find_toponym(self):
        self.sorry_text.setText('')
        self.sorry.hide()
        toponym_to_find = self.toponym_text.text()
        if self.sender().text() == 'Почтовый индекс' and not toponym_to_find:
            return
        if not toponym_to_find:
            self.statham.setFont(QFont("Times", 20, QFont.Bold))
            self.statham.setText(
                'Я ОТКАЗЫВАЮСЬ работать, пока вы не введете адрес')
            self.pixmap = QPixmap('стэтхэм.jpg')
            self.image.setPixmap(self.pixmap.scaled(1100, 790))
            return
        geocoder_api_server = "http://geocode-maps.yandex.ru/1.x/"
        geocoder_params = {
            "apikey": "40d1649f-0493-4b70-98ba-98533de7710b",
            "geocode": toponym_to_find,
            "format": "json"
        }
        response = requests.get(geocoder_api_server, params=geocoder_params)
        json_response = response.json()
        found = json_response['response']['GeoObjectCollection'][
            'metaDataProperty']['GeocoderResponseMetaData']['found']
        if not response or found == '0':
            self.label.setText("Объект не найден")
        else:
            self.dop_delta = select_parameters(json_response)
            dop = json_response['response']["GeoObjectCollection"][
                "featureMember"][0]["GeoObject"]
            full_address = dop["metaDataProperty"]["GeocoderMetaData"][
                "text"].split()
            if self.postcode.isChecked():
                try:
                    full_address.append(
                        str(dop['metaDataProperty']['GeocoderMetaData']
                            ['AddressDetails']['Country']['AdministrativeArea']
                            ['SubAdministrativeArea']['Locality']
                            ['Thoroughfare']['Premise']['PostalCode']
                            ['PostalCodeNumber']))
                except:
                    self.sorry_text.setText(
                        'К сожалению, почтовый индекс не найден')
                    self.sorry.show()
            out = ''
            count = 0
            for part in full_address:
                if count + len(part) <= 47:
                    out += part + ' '
                    count += len(part)
                else:
                    out += '\n' + part + ' '
                    count = 0
            self.label2.setText("")
            self.address.setText(out)

            self.label.setText("")
            toponym = json_response["response"]["GeoObjectCollection"][
                "featureMember"][0]["GeoObject"]
            toponym_coordinates = toponym["Point"]["pos"]
            toponym_corners = toponym["boundedBy"]["Envelope"]
            self.start_longitude, self.start_lattitude = [
                float(i) for i in toponym_coordinates.split(" ")
            ]
            self.right_border, self.up_border = [
                float(i) for i in toponym_corners["upperCorner"].split(" ")
            ]
            self.left_border, self.down_border = [
                float(i) for i in toponym_corners["lowerCorner"].split(" ")
            ]
            self.point = True
            self.point_longitude, self.point_lattitude = self.start_longitude, self.start_lattitude
            if not self.sender().text() == 'Почтовый индекс':
                self.make_image()

    def reset_result(self):
        self.point = False
        self.make_image()
        self.toponym_text.clear()
        self.address.setText('')
        self.sorry_text.setText('')
        self.sorry.hide()

    def mousePressEvent(self, event):
        if 0 <= event.x() <= 1200 and 0 <= event.y() <= 900 and event.button(
        ) == Qt.LeftButton:
            y_in_px = float(self.dop_delta[1]) / 900
            x_in_px = float(self.dop_delta[0]) / 1200
            lattitude = self.start_lattitude + float(
                self.dop_delta[1]) / 2 - y_in_px * event.y()
            longitude = self.start_longitude - float(
                self.dop_delta[0]) / 2 + x_in_px * event.x()

            geocoder_api_server = "http://geocode-maps.yandex.ru/1.x/"
            geocoder_params = {
                "apikey": "40d1649f-0493-4b70-98ba-98533de7710b",
                "geocode": ",".join([str(longitude),
                                     str(lattitude)]),
                "format": "json"
            }
            response = requests.get(geocoder_api_server,
                                    params=geocoder_params)
            json_response = response.json()
            dop = json_response['response']["GeoObjectCollection"][
                "featureMember"][0]["GeoObject"]
            full_address = dop["metaDataProperty"]["GeocoderMetaData"]["text"]
            self.label2.setText("")
            self.make_image_address(full_address)

        elif 0 <= event.x() <= 1200 and 0 <= event.y() <= 900 and event.button(
        ) == Qt.RightButton:
            y_in_px = float(self.dop_delta[1]) / 900
            x_in_px = float(self.dop_delta[0]) / 1200
            lattitude = self.start_lattitude + float(
                self.dop_delta[1]) / 2 - y_in_px * event.y()
            longitude = self.start_longitude - float(
                self.dop_delta[0]) / 2 + x_in_px * event.x()

            search_api_server = "https://search-maps.yandex.ru/v1/"
            api_key = "dda3ddba-c9ea-4ead-9010-f43fbc15c6e3"

            start_pos = ",".join([str(longitude), str(lattitude)])

            search_params = {
                "apikey": api_key,
                "text": "магазин,аптека",
                "lang": "ru_RU",
                "ll": start_pos,
                "type": "biz"
            }

            response = requests.get(search_api_server, params=search_params)
            json_response = response.json()

            organization = json_response["features"][0]

            org_name = organization["properties"]["CompanyMetaData"]["name"]
            print(org_name)

            org_address = organization["properties"]["CompanyMetaData"][
                "address"]

            point = organization["geometry"]["coordinates"]

            if lonlat_distance(tuple(point),
                               (float(longitude), float(lattitude))) > 50:
                return
            self.label2.setText(org_name)
            self.make_image_address(org_address)

    def make_image_address(self, toponym_to_find):
        geocoder_api_server = "http://geocode-maps.yandex.ru/1.x/"
        geocoder_params = {
            "apikey": "40d1649f-0493-4b70-98ba-98533de7710b",
            "geocode": toponym_to_find,
            "format": "json"
        }
        response = requests.get(geocoder_api_server, params=geocoder_params)
        json_response = response.json()
        found = json_response['response']['GeoObjectCollection'][
            'metaDataProperty']['GeocoderResponseMetaData']['found']
        if not response or found == '0':
            self.label.setText("Объект не найден")
        else:
            self.dop_delta = select_parameters(json_response)
            dop = json_response['response']["GeoObjectCollection"][
                "featureMember"][0]["GeoObject"]
            full_address = dop["metaDataProperty"]["GeocoderMetaData"][
                "text"].split()
            if self.postcode.isChecked():
                try:
                    full_address.append(
                        str(dop['metaDataProperty']['GeocoderMetaData']
                            ['AddressDetails']['Country']['AdministrativeArea']
                            ['SubAdministrativeArea']['Locality']
                            ['Thoroughfare']['Premise']['PostalCode']
                            ['PostalCodeNumber']))
                except:
                    self.sorry_text.setText(
                        'К сожалению, почтовый индекс не найден')
                    self.sorry.show()
            out = ''
            count = 0
            for part in full_address:
                if count + len(part) <= 47:
                    out += part + ' '
                    count += len(part)
                else:
                    out += '\n' + part + ' '
                    count = 0
            self.address.setText(out)

        self.label.setText("")
        toponym = json_response["response"]["GeoObjectCollection"][
            "featureMember"][0]["GeoObject"]
        toponym_coordinates = toponym["Point"]["pos"]
        toponym_corners = toponym["boundedBy"]["Envelope"]
        self.start_longitude, self.start_lattitude = [
            float(i) for i in toponym_coordinates.split(" ")
        ]
        self.right_border, self.up_border = [
            float(i) for i in toponym_corners["upperCorner"].split(" ")
        ]
        self.left_border, self.down_border = [
            float(i) for i in toponym_corners["lowerCorner"].split(" ")
        ]
        self.point = True
        self.point_longitude, self.point_lattitude = self.start_longitude, self.start_lattitude
        self.make_image()

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_S or e.key() == 1067:
            self.start_lattitude -= float(self.dop_delta[0])
            if self.start_lattitude > self.max_lattitude - float(
                    self.dop_delta[0]) / 2:
                self.start_lattitude = self.max_lattitude - float(
                    self.dop_delta[0]) / 2
        elif e.key() == Qt.Key_W or e.key() == 1062:
            self.start_lattitude += float(self.dop_delta[0])
            if self.start_lattitude < self.min_lattitude + float(
                    self.dop_delta[0]) / 2:
                self.start_lattitude = self.min_lattitude + float(
                    self.dop_delta[0]) / 2
        elif e.key() == Qt.Key_D or e.key() == 1042:
            self.start_longitude += float(self.dop_delta[1]) * 2
            if self.start_longitude > self.max_longitube - float(
                    self.dop_delta[1]):
                self.start_longitude = self.max_longitube - float(
                    self.dop_delta[1])
        elif e.key() == Qt.Key_A or e.key() == 1060:
            self.start_longitude -= float(self.dop_delta[1]) * 2
            if self.start_longitude < self.min_longitube + float(
                    self.dop_delta[1]):
                self.start_longitude = self.min_longitube + float(
                    self.dop_delta[1])
        elif e.key() == Qt.Key_PageUp:
            self.delta = min(90, self.delta * 2)
            self.dop_delta = (str(min(90,
                                      float(self.dop_delta[0]) * 2)),
                              str(min(90,
                                      float(self.dop_delta[1]) * 2)))
        elif e.key() == Qt.Key_PageDown:
            self.delta = max(0.000001, self.delta / 2)
            self.dop_delta = (str(max(0.000001,
                                      float(self.dop_delta[0]) / 2)),
                              str(max(0.000001,
                                      float(self.dop_delta[1]) / 2)))
        elif e.key() == Qt.Key_L or e.key() == 1044:
            layers = ["map", "sat", "sat,skl"]
            self.layer = layers[(layers.index(self.layer) + 1) % 3]
        self.make_image()
示例#28
0
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        #新建4个复选框对象
        self.cb1 = QCheckBox('全选', self)
        self.cb2 = QCheckBox('你是', self)
        self.cb3 = QCheckBox('我的', self)
        self.cb4 = QCheckBox('宝贝', self)

        bt = QPushButton('提交', self)

        self.resize(300, 200)
        self.setWindowTitle('早点毕业吧--复选框')

        self.cb1.move(20, 20)
        self.cb2.move(30, 50)
        self.cb3.move(30, 80)
        self.cb4.move(30, 110)

        bt.move(20, 160)

        self.cb1.stateChanged.connect(self.changecb1)
        self.cb2.stateChanged.connect(self.changecb2)
        self.cb3.stateChanged.connect(self.changecb2)
        self.cb4.stateChanged.connect(self.changecb2)
        bt.clicked.connect(self.go)

        self.show()

    def go(self):
        if self.cb2.isChecked() and self.cb3.isChecked(
        ) and self.cb4.isChecked():
            QMessageBox.information(self, 'I Love U', '你是我的宝贝!')
        elif self.cb2.isChecked() and self.cb3.isChecked():
            QMessageBox.information(self, 'I Love U', '你是我的!')
        elif self.cb2.isChecked() and self.cb4.isChecked():
            QMessageBox.information(self, 'I Love U', '你是宝贝!')
        elif self.cb3.isChecked() and self.cb4.isChecked():
            QMessageBox.information(self, 'I Love U', '我的宝贝!')
        elif self.cb2.isChecked():
            QMessageBox.information(self, 'I Love U', '你是!')
        elif self.cb3.isChecked():
            QMessageBox.information(self, 'I Love U', '我的!')
        elif self.cb4.isChecked():
            QMessageBox.information(self, 'I Love U', '宝贝!')
        else:
            QMessageBox.information(self, 'I Love U', '貌似你没有勾选啊!')

    def changecb1(self):
        if self.cb1.checkState() == Qt.Checked:
            self.cb2.setChecked(True)
            self.cb3.setChecked(True)
            self.cb4.setChecked(True)
        elif self.cb1.checkState() == Qt.Unchecked:
            self.cb2.setChecked(False)
            self.cb3.setChecked(False)
            self.cb4.setChecked(False)
            """
isChecked()主要是判断复选框是否被选中,要是选中就返回True,否则返回False。
            """

    def changecb2(self):
        if self.cb2.isChecked() and self.cb3.isChecked(
        ) and self.cb4.isChecked():
            self.cb1.setCheckState(Qt.Checked)
        elif self.cb2.isChecked() or self.cb3.isChecked(
        ) or self.cb4.isChecked():
            self.cb1.setTristate()
            self.cb1.setCheckState(Qt.PartiallyChecked)
        else:
            self.cb1.setTristate(False)
            self.cb1.setCheckState(Qt.Unchecked)
示例#29
0
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

        self.cb1 = QCheckBox('全选', self)
        self.cb2 = QCheckBox('你是', self)
        self.cb3 = QCheckBox('我的', self)
        self.cb4 = QCheckBox('宝贝', self)

        self.cb1.move(20, 20)
        self.cb2.move(20, 40)
        self.cb3.move(20, 60)
        self.cb4.move(20, 80)

        bt = QPushButton('提交', self)
        bt.move(20, 100)

        self.cb1.stateChanged.connect(self.changecb1)
        self.cb2.stateChanged.connect(self.changecb2)
        self.cb3.stateChanged.connect(self.changecb2)
        self.cb4.stateChanged.connect(self.changecb2)
        bt.clicked.connect(self.go)

        self.show()

    def go(self):
        if self.cb2.isChecked() and self.cb3.isChecked(
        ) and self.cb4.isChecked():
            QMessageBox.information(self, 'I Love U', '你是我的宝贝!')
        elif self.cb2.isChecked() and self.cb3.isChecked():
            QMessageBox.information(self, 'I Love U', '你是我的!')
        elif self.cb2.isChecked() and self.cb4.isChecked():
            QMessageBox.information(self, 'I Love U', '你是宝贝!')
        elif self.cb3.isChecked() and self.cb4.isChecked():
            QMessageBox.information(self, 'I Love U', '我的宝贝!')
        elif self.cb2.isChecked():
            QMessageBox.information(self, 'I Love U', '你是!')
        elif self.cb3.isChecked():
            QMessageBox.information(self, 'I Love U', '我的!')
        elif self.cb4.isChecked():
            QMessageBox.information(self, 'I Love U', '宝贝!')
        else:
            QMessageBox.information(self, 'I Love U', '貌似你没有勾选啊!')

    def changecb1(self):
        if self.cb1.checkState() == Qt.Checked:
            self.cb2.setChecked(True)
            self.cb3.setChecked(True)
            self.cb4.setChecked(True)
        elif self.cb1.checkState() == Qt.Unchecked:
            self.cb2.setChecked(False)
            self.cb3.setChecked(False)
            self.cb4.setChecked(False)

    def changecb2(self):
        if self.cb2.isChecked() and self.cb3.isChecked(
        ) and self.cb4.isChecked():
            self.cb1.setCheckState(Qt.Checked)
        elif self.cb2.isChecked() or self.cb3.isChecked(
        ) or self.cb4.isChecked():
            self.cb1.setTristate()
            self.cb1.setCheckState(Qt.PartiallyChecked)
        else:
            self.cb1.setTristate(False)
            self.cb1.setCheckState(Qt.Unchecked)
示例#30
0
class Patcher(QMainWindow):
    def __init__(self):
        super().__init__()
        self.help_text_full = """The Patch Maker contains three major areas, the patch directory selection, the tree.json selection and the flatten button. Once you've filled out everything and you click the "Flatten" button the patch maker will create a "patch" folder next to the folder you've selected and using the tree.json you have provided will find all the files that have been modified since the last patch and copy them to that folder. The tree.json selection is optional but very useful, it will compare the files with the tree.json file you provide to figure out which files have been changed since the last patch so that you only have to upload the change files instead of the entire directory all over again. If you do not have a tree.json do not worry, the patch maker is perfectly capable of generating one on its own, just leave the area blank and the patch maker will generate a new tree.json. Steps to use the patch maker:<ol><li>Select the AOTR directory containing all the files for the next update.</li><li>Optionally, select the tree.json that was generated during the making of the previous patch.</li><li>Click flatten.<ul><li>If you have selected a valid tree.json then the patch maker will move over all the files that have been edited since the time that the selected tree.json was created</li><li>If you have not selected a tree.json, the patch maker will copy over everyfile that in the selected directory.</ul></ol>"""
        self.init_ui()

    def init_ui(self):
        label = QLabel("Select an directory to flatten:", self)
        label.move(25, 55)
        label.adjustSize()

        self.directory = QLineEdit(self)
        self.directory.resize(600, 30)
        self.directory.move(25, 80)

        self.pick_directory_btn = QPushButton("...", self)
        self.pick_directory_btn.resize(25, 25)
        self.pick_directory_btn.move(635, 85)
        self.pick_directory_btn.clicked.connect(self.pick_directory)

        label = QLabel("Select an optional tree.json:", self)
        label.move(25, 115)
        label.adjustSize()

        self.tree = QLineEdit(self)
        self.tree.resize(600, 30)
        self.tree.move(25, 140)

        self.pick_tree_btn = QPushButton("...", self)
        self.pick_tree_btn.resize(25, 25)
        self.pick_tree_btn.move(635, 145)
        self.pick_tree_btn.clicked.connect(self.pick_tree)

        self.flatten_btn = QPushButton("Flatten", self)
        self.flatten_btn.resize(250, 100)
        self.flatten_btn.move(225, 200)
        self.flatten_btn.clicked.connect(self.flatten_handler)
        self.flatten_btn.setEnabled(False)
        self.flatten_btn.setToolTip("Select an directory to flatten to unlock the button")

        self.check_btn = QPushButton("Check", self)
        self.check_btn.resize(250, 100)
        self.check_btn.move(225, 325)
        self.check_btn.clicked.connect(self.checker)
        self.check_btn.setEnabled(False)

        self.about_window = QMessageBox()
        self.about_window.setIcon(QMessageBox.Information)
        self.about_window.setText("About the AOTR Patch Maker")
        self.about_window.setInformativeText("The Patch Maker is a tool which \"flattens\" the Age of the Ring directory and prepares it for upload so that the launcher can work out which files to download more easily.")
        self.about_window.setStandardButtons(QMessageBox.Ok)
        self.about_window.setWindowTitle("About")
        self.about_window.buttonClicked.connect(self.about_window.close)

        self.help_window = QMessageBox()
        self.help_window.setIcon(QMessageBox.Information)
        self.help_window.setText("How to use the Patch Maker")
        self.help_window.setInformativeText(self.help_text_full)
        self.help_window.setStandardButtons(QMessageBox.Ok)
        self.help_window.setWindowTitle("About")
        self.help_window.buttonClicked.connect(self.help_window.close)

        label = QLabel("Version Number", self)
        label.move(50, 205)
        label.adjustSize()

        self.version = QLineEdit(self)
        self.version.resize(80, 30)
        self.version.move(50, 230)

        self.debug = QCheckBox("Debug?", self)
        self.debug.move(550, 230)

        bar = self.menuBar()
        bar.setStyleSheet("QMenuBar {background-color: white;}")
        about_act = bar.addAction('About')
        about_act.triggered.connect(self.about_window.show)
        help_act = bar.addAction('Help')
        help_act.triggered.connect(self.help_window.show)

        self.log = FlattenLog(self)

        self.setFixedSize(700, 450)
        self.setWindowTitle('Patch Maker')

        self.show()

    def flatten_handler(self):
        try:
            self.setEnabled(False)
            self.log.debug = self.debug.isChecked()
            reply = QMessageBox.warning(self, "Warning", "This will create a a flattened copy of this directory. Are you sure you wish to continue?", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
            if reply == QMessageBox.No:
                return
            
            if self.debug.isChecked():
                self.log.b.clear()
                self.log.show()
        
            self.flatten()
        except Exception as e:
            QMessageBox.critical(self, "Error", str(e), QMessageBox.Ok, QMessageBox.Ok)
        else:
            QMessageBox.information(self, "Done", "Finished flattening")
        finally:
            self.setEnabled(True)

    def pick_directory(self):
        text = str(QFileDialog.getExistingDirectory(self, f"Select flatten directory"))
        if text != "":
            self.directory.setText(text)
            self.flatten_btn.setEnabled(True)
            self.check_btn.setEnabled(True)  

    def pick_tree(self):
        text = str(QFileDialog.getOpenFileName(self, f"Select tree file")[0])
        self.tree.setText(text)

        if self.version.text() == "" and self.tree.text() != "":
            with open(text, "r") as f:
                l = json.load(f)

            self.version.setText(l["version"])

    def hash_file(self, path):
        hasher = hashlib.md5()
        with open(path, 'rb') as afile:
            buf = afile.read()
            hasher.update(buf)

        return hasher.hexdigest()

    def checker(self):
        self.log.b.clear()
        self.log.show()
        self.log.debug = True

        for path, _, files in os.walk(self.directory.text()):
            for name in files:
                QCoreApplication.processEvents()
                if name in ["desktop.ini"]:
                    continue

                if "(1)" in name or "(2)" in name or "(3)" in name:
                    file_path = os.path.join(path, name)
                    subdir_path = file_path.replace(f"{self.directory.text()}\\", '')
                    self.log.write(f"Duplicate file {subdir_path}\n")

        self.log.write("Done.")
        self.debug.isChecked()

    def flatten(self):
        QCoreApplication.processEvents()
        try:
            with open(self.tree.text(), "r") as f:
                old_tree = json.load(f)
        except FileNotFoundError:
            self.log.write("tree.json not specified, generating blank one\n")
            old_tree = {}

        tree = {"files": {}, "version": self.version.text() or old_tree["version"]}
        source_dir = os.path.join(self.directory.text(), '..', 'AgeoftheRingUpdate') 
        new_dir = os.path.join(source_dir, "source")
        try:
            self.log.write("Creating release directory one level up\n")
            os.mkdirs(new_dir)
        except FileExistsError as e:
            QMessageBox.critical(self, "Dir Error", str(e), QMessageBox.Ok, QMessageBox.Ok)
            return

        for path, _, files in os.walk(self.directory.text()):
            for name in files:
                QCoreApplication.processEvents()
                if name in ["desktop.ini"]:
                    continue

                file_path = os.path.join(path, name)
                subdir_path = file_path.replace(f"{self.directory.text()}\\", '')
                md5 = self.hash_file(file_path)
                try:
                    old_md5 = old_tree["files"][subdir_path]["hash"]
                except KeyError:
                    old_md5 = ""

                tree["files"][subdir_path] = {"name": name, "path": subdir_path, "hash": md5}
                self.log.write(f"{file_path}: Old '{old_md5}' vs '{md5}' New\n")
                if md5 != old_md5:
                    try:
                        new_path = os.path.join(new_dir, subdir_path.replace("\\", ".").lower())
                        shutil.copy(file_path, new_path)
                        self.log.write(f"Successfully moved {file_path} to {new_path}\n")
                    except shutil.Error:
                        QMessageBox.critical(self, "shutil Error", f"{str(e)}\n{name}")

        with open(os.path.join(source_dir, "tree.json"), "w+") as f:
            json.dump(tree, f, indent=4)
示例#31
0
class MainWindow(QWidget):
    """Окно графического интерфейса"""
    def __init__(self):
        super().__init__()

        self.sim = PendulumLearning(
            self
        )  # Объект с моделью и обучающейся системой управления маятником

        # Элементы интерфейса
        self.canvas_width = 800  # Ширина холста
        self.canvas_height = 675  # Длина холста
        self.canvas = Plotter(self.canvas_width,
                              self.canvas_height,
                              dpi=100,
                              parent=self)  # Холст с графиками
        # Кнопки
        self.start_button = QPushButton('Start', self)
        self.stop_button = QPushButton('Stop', self)
        self.restart_button = QPushButton('Restart', self)
        self.new_nn_button = QPushButton('New neural net', self)
        self.load_nn_button = QPushButton('Load neural net', self)
        self.save_nn_button = QPushButton('Save neural net', self)
        self.save_plots_button = QPushButton('Save plots', self)
        self.clear_button = QPushButton('Clear', self)
        # Надписи
        self.eps_start_label = QLabel('Initial probability\nof random action',
                                      self)
        self.eps_discount_label = QLabel(
            'Discount of probability\non each step', self)
        self.eps_final_label = QLabel('Final probability\nof random action',
                                      self)
        self.episode_length_label = QLabel('Episode length', self)
        self.batch_size_label = QLabel('Training batch\nsize', self)
        # Поля ввода чисел
        self.eps_start_spinbox = QDoubleSpinBox(self)
        self.eps_discount_spinbox = QDoubleSpinBox(self)
        self.eps_final_spinbox = QDoubleSpinBox(self)
        self.episode_length_spinbox = QSpinBox(self)
        self.batch_size_spinbox = QSpinBox(self)
        # Кнопки выбора обучающейся модели
        self.q_learning_rb = QRadioButton("Deep Q-learning", self)
        self.q_learning2_rb = QRadioButton("Q-learning, net with one output",
                                           self)
        self.actor_critic_rb = QRadioButton("Adaptive critic", self)
        self.actor_critic_DDPG_rb = QRadioButton("Adaptive critic (DDPG)",
                                                 self)
        # Чекбоксы
        self.eps_greedy_checkbox = QCheckBox("Use random actions", self)
        self.learning_checkbox = QCheckBox("Turn training on", self)
        self.endless_episode_checkbox = QCheckBox("Endless episode", self)
        # Вывод данных
        self.output_text_field = QTextBrowser(self)

        self.initUI()

    def initUI(self):
        """Формирование интерфейса"""
        size = (1300, 715)  # Размер окна
        position = (100, 100)  # Начальная позиция окна
        canvas_position = (20, 20)  # Верхний левый угол холста
        buttons_indent = 10  # Расстояние между кнопками
        spinbox_indent = 8  # Расстояние между полями выбора чисел
        labels_indent = 5  # Расстояние между надписями
        # Параметры поля выбора начальной вероятности выбора случайного действия
        eps_start_min = 0
        eps_start_max = 1
        eps_start_step = 0.1
        eps_start_default_value = 0.5
        # Параметры поля выбора шага уменьшения вероятности случайного действия
        eps_discount_min = 0
        eps_discount_max = 1
        eps_discount_step = 0.000001
        eps_discount_default_value = 0.00002
        eps_discount_decimals = 6
        # Параметры поля выбора конечной вероятности выбора случайного действия
        eps_final_min = 0
        eps_final_max = 1
        eps_final_step = 0.01
        eps_final_default_value = 0.05
        # Параметры поля выбора длины эпизода
        episode_length_min = 1
        episode_length_max = 2000
        episode_length_step = 100
        episode_length_default_value = 200
        # Параметры поля выбора размера пачки при обучении
        batch_size_min = 1
        batch_size_max = 300
        batch_size_step = 10
        batch_size_default_value = 50
        # Размер поля вывода данных
        text_field_size = (460, 170)

        buttons_left = canvas_position[
            0] + buttons_indent + self.canvas_width  # Координата левого края блока элементов управления
        buttons_up = canvas_position[
            1]  # Координата верхнего края блока элементов управления

        # Изменяем позицию и перемещаем окно
        self.resize(*size)
        self.move(*position)

        self.canvas.move(*canvas_position)

        # Кнопки старт, стоп, перезапуск
        button_up = buttons_up  # Верхняя позиция текущей кнопки
        self.start_button.resize(self.start_button.sizeHint())
        self.start_button.move(buttons_left, button_up)
        self.start_button.clicked.connect(self.start)

        buttons_distance = self.start_button.height(
        ) + buttons_indent  # Расстояние между верхними позициями кнопок
        spinbox_distance = self.eps_start_spinbox.height() + spinbox_indent
        button_up += buttons_distance

        self.stop_button.resize(self.start_button.sizeHint())
        self.stop_button.move(buttons_left, button_up)
        self.stop_button.clicked.connect(self.stop)
        button_up += buttons_distance

        self.restart_button.resize(self.start_button.sizeHint())
        self.restart_button.move(buttons_left, button_up)
        self.restart_button.clicked.connect(self.restart)

        # Элементы для настройки случайных действий
        # Координата левого края блока элементов для генерации случайной среды
        controls_left = buttons_left + self.start_button.width(
        ) + buttons_indent

        element_up = buttons_up  # Верхняя позиция текущего элемента управления
        self.eps_start_label.resize(self.eps_start_label.sizeHint())
        self.eps_start_label.move(controls_left, element_up)
        element_left = controls_left + self.eps_start_label.width(
        ) + buttons_indent
        self.eps_start_spinbox.move(element_left, element_up)
        self.eps_start_spinbox.setMinimum(eps_start_min)
        self.eps_start_spinbox.setMaximum(eps_start_max)
        self.eps_start_spinbox.setSingleStep(eps_start_step)
        self.eps_start_spinbox.setValue(eps_start_default_value)
        self.eps_start_spinbox.valueChanged.connect(self.change_start_eps)
        self.change_start_eps()
        element_up += spinbox_distance

        self.eps_final_label.resize(self.eps_final_label.sizeHint())
        self.eps_final_label.move(controls_left, element_up)
        element_left = controls_left + self.eps_final_label.width(
        ) + buttons_indent
        self.eps_final_spinbox.move(element_left, element_up)
        self.eps_final_spinbox.setMinimum(eps_final_min)
        self.eps_final_spinbox.setMaximum(eps_final_max)
        self.eps_final_spinbox.setSingleStep(eps_final_step)
        self.eps_final_spinbox.setValue(eps_final_default_value)
        self.eps_final_spinbox.valueChanged.connect(self.change_final_eps)
        self.change_final_eps()
        element_up += spinbox_distance

        self.eps_discount_label.resize(self.eps_discount_label.sizeHint())
        self.eps_discount_label.move(controls_left, element_up)
        element_left = controls_left + self.eps_discount_label.width(
        ) + buttons_indent
        self.eps_discount_spinbox.setDecimals(eps_discount_decimals)
        self.eps_discount_spinbox.resize(self.eps_discount_spinbox.sizeHint())
        self.eps_discount_spinbox.move(element_left, element_up)
        self.eps_discount_spinbox.setMinimum(eps_discount_min)
        self.eps_discount_spinbox.setMaximum(eps_discount_max)
        self.eps_discount_spinbox.setSingleStep(eps_discount_step)
        self.eps_discount_spinbox.setValue(eps_discount_default_value)
        self.eps_discount_spinbox.valueChanged.connect(
            self.change_eps_discount)
        self.change_eps_discount()
        element_up += spinbox_distance

        self.eps_greedy_checkbox.resize(self.eps_greedy_checkbox.sizeHint())
        self.eps_greedy_checkbox.move(controls_left, element_up)
        self.eps_greedy_checkbox.setChecked(True)
        self.eps_greedy_checkbox.stateChanged.connect(self.toggle_eps_greedy)
        self.toggle_eps_greedy()

        labels_distance = self.eps_greedy_checkbox.height() + labels_indent

        element_up += labels_distance

        button_up = max([element_up, button_up])
        self.q_learning_rb.move(buttons_left, button_up)
        self.q_learning_rb.setChecked(True)
        self.q_learning_rb.toggled.connect(self.select_learning_model)
        button_up += labels_distance
        self.q_learning2_rb.move(buttons_left, button_up)
        self.q_learning2_rb.toggled.connect(self.select_learning_model)
        button_up += labels_distance
        self.actor_critic_rb.move(buttons_left, button_up)
        self.actor_critic_rb.toggled.connect(self.select_learning_model)
        button_up += labels_distance
        self.actor_critic_DDPG_rb.move(buttons_left, button_up)
        self.actor_critic_DDPG_rb.toggled.connect(self.select_learning_model)
        self.select_learning_model()
        button_up += labels_distance

        self.learning_checkbox.move(buttons_left, button_up)
        self.learning_checkbox.setChecked(True)
        self.learning_checkbox.stateChanged.connect(self.toggle_learning)
        self.toggle_learning()

        button_up += labels_distance
        self.batch_size_label.resize(self.batch_size_label.sizeHint())
        self.batch_size_label.move(buttons_left, button_up)
        element_left = buttons_left + self.batch_size_label.width(
        ) + buttons_indent
        self.batch_size_spinbox.resize(self.batch_size_spinbox.sizeHint())
        self.batch_size_spinbox.move(element_left, button_up)
        self.batch_size_spinbox.setMinimum(batch_size_min)
        self.batch_size_spinbox.setMaximum(batch_size_max)
        self.batch_size_spinbox.setSingleStep(batch_size_step)
        self.batch_size_spinbox.setValue(batch_size_default_value)
        self.batch_size_spinbox.valueChanged.connect(self.change_batch_size)
        self.change_batch_size()
        button_up += spinbox_distance

        element_up = button_up

        self.new_nn_button.resize(self.save_nn_button.sizeHint())
        self.new_nn_button.move(buttons_left, button_up)
        self.new_nn_button.clicked.connect(self.new_nn)
        button_up += buttons_distance

        self.load_nn_button.resize(self.save_nn_button.sizeHint())
        self.load_nn_button.move(buttons_left, button_up)
        self.load_nn_button.clicked.connect(self.load_nn)
        button_up += buttons_distance

        self.save_nn_button.resize(self.save_nn_button.sizeHint())
        self.save_nn_button.move(buttons_left, button_up)
        self.save_nn_button.clicked.connect(self.save_nn)
        button_up += buttons_distance

        elements_left = buttons_left + self.save_nn_button.width(
        ) + buttons_indent

        self.save_plots_button.resize(self.save_plots_button.sizeHint())
        self.save_plots_button.move(elements_left, element_up)
        self.save_plots_button.clicked.connect(self.save_plots)
        element_up += buttons_distance

        self.clear_button.resize(self.save_plots_button.sizeHint())
        self.clear_button.move(elements_left, element_up)
        self.clear_button.clicked.connect(self.clear)
        element_up += buttons_distance

        self.episode_length_label.resize(self.episode_length_label.sizeHint())
        self.episode_length_label.move(buttons_left, button_up)
        element_left = buttons_left + self.episode_length_label.width(
        ) + buttons_indent
        self.episode_length_spinbox.resize(
            self.episode_length_spinbox.sizeHint())
        self.episode_length_spinbox.move(element_left, button_up)
        self.episode_length_spinbox.setMinimum(episode_length_min)
        self.episode_length_spinbox.setMaximum(episode_length_max)
        self.episode_length_spinbox.setSingleStep(episode_length_step)
        self.episode_length_spinbox.setValue(episode_length_default_value)
        self.episode_length_spinbox.valueChanged.connect(
            self.change_episode_length)
        self.change_episode_length()
        button_up += spinbox_distance

        self.endless_episode_checkbox.move(buttons_left, button_up)
        self.endless_episode_checkbox.setChecked(False)
        self.endless_episode_checkbox.stateChanged.connect(
            self.toggle_endless_episode)
        self.toggle_endless_episode()
        button_up += labels_distance

        self.output_text_field.resize(*text_field_size)
        self.output_text_field.move(buttons_left, button_up)
        self.output_text_field.setReadOnly(True)
        self.setWindowTitle('An Inverted Pendulum')
        self.show()

    def closeEvent(self, event):
        """Закрытие окна"""
        self.sim.exit()
        self.deleteLater()
        self.close()

    def start(self):
        """Запуск моделирования"""
        self.sim.start()

    def stop(self):
        """Остановка моделирования"""
        self.sim.stop()

    def restart(self):
        """Поместить маятник в случайную позицию"""
        self.sim.restart()

    def change_start_eps(self):
        """Изменить начальную вероятность случайного действия"""
        self.sim.set_eps(self.eps_start_spinbox.value())

    def change_final_eps(self):
        """Изменить конечную вероятность случайного действия"""
        self.sim.set_final_eps(self.eps_final_spinbox.value())

    def change_eps_discount(self):
        """Изменить шаг уменьшения вероятности случайного действия"""
        self.sim.set_eps_discount(self.eps_discount_spinbox.value())

    def select_learning_model(self):
        """Выбрать обучающуюся модель"""
        if self.q_learning_rb.isChecked():
            lm_number = 0
        elif self.q_learning2_rb.isChecked():
            lm_number = 1
        elif self.actor_critic_rb.isChecked():
            lm_number = 2
        else:
            lm_number = 3
        self.sim.choose_learning_model(lm_number)

    def toggle_eps_greedy(self):
        """Включить или отключить совершение случайных действий"""
        self.sim.set_eps_greedy(self.eps_greedy_checkbox.isChecked())

    def toggle_learning(self):
        """Производить ли обучение модели, или просто включить управление"""
        enable = self.learning_checkbox.isChecked()
        self.sim.is_learning = enable

    def save_plots(self):
        """Сохранить графики в файл"""
        file_dialogue = QFileDialog()
        file_dialogue.setFileMode(QFileDialog.AnyFile)
        file_dialogue.setAcceptMode(QFileDialog.AcceptSave)
        name_filters = ["PNG images (*.png)", "All files (*.*)"]
        file_dialogue.setNameFilters(name_filters)
        if file_dialogue.exec():
            filename = file_dialogue.selectedFiles()[0]
            try:
                self.canvas.figure.savefig(filename)
            except PermissionError as e:
                QMessageBox.warning(self, "Error", str(e))
                self.canvas.draw()
        file_dialogue.deleteLater()

    def change_batch_size(self):
        """Изменить размер пачки при обучении нейросетей"""
        self.sim.set_batch_size(self.batch_size_spinbox.value())

    def new_nn(self):
        """Создать новую нейросеть со случайными коэффициентами"""
        self.sim.new_nn()  # Создать новую нейросеть и очистить опыт
        self.change_start_eps()  # Обновить вероятность случайного действия

    def load_nn(self):
        """Загрузить нейросеть из файла"""
        file_dialogue = QFileDialog()
        file_dialogue.setFileMode(QFileDialog.ExistingFile)
        file_dialogue.setAcceptMode(QFileDialog.AcceptOpen)
        if self.actor_critic_rb.isChecked(
        ) or self.actor_critic_DDPG_rb.isChecked():
            name_filters = ["TensorFlow session (*.meta)"]
        else:
            name_filters = [
                "Hierarchical data format (*.hdf)", "All files (*.*)"
            ]
        file_dialogue.setNameFilters(name_filters)
        if file_dialogue.exec():
            filename = file_dialogue.selectedFiles()[0]
            try:
                self.sim.load_nn(filename)
            except OSError or FileNotFoundError or FileNotFoundError as e:
                QMessageBox.warning(self, "Error", str(e))
        file_dialogue.deleteLater()

    def save_nn(self):
        """Сохранить нейросеть в файл"""
        file_dialogue = QFileDialog()
        file_dialogue.setFileMode(QFileDialog.AnyFile)
        file_dialogue.setAcceptMode(QFileDialog.AcceptSave)
        if self.actor_critic_rb.isChecked(
        ) or self.actor_critic_DDPG_rb.isChecked():
            name_filters = ["TensorFlow session (*.*)"]
        else:
            name_filters = [
                "Hierarchical data format (*.hdf)", "All files (*.*)"
            ]
        file_dialogue.setNameFilters(name_filters)
        if file_dialogue.exec():
            filename = file_dialogue.selectedFiles()[0]
            try:
                self.sim.save_nn(filename)
            except PermissionError as e:
                QMessageBox.warning(self, "Error", str(e))
        file_dialogue.deleteLater()

    def change_episode_length(self):
        """Изменить длину эпизода - количества шагов перед случайным выбором новой позиции маятника"""
        episode_length = self.episode_length_spinbox.value()
        self.sim.max_ep_steps = episode_length

    def toggle_endless_episode(self):
        """Никогда не выбирать случайную позицию для маятника"""
        enable = self.endless_episode_checkbox.isChecked()
        self.sim.endless = enable

    def clear(self):
        """Очистить графики и поле с информацией об обучении"""
        self.canvas.clear()
        self.canvas.draw()
        self.output_text_field.clear()

    def paint_scene(self, thetas, omegas, moments, times, running_reward,
                    episode):
        """Рисовать графики"""
        self.canvas.clear()
        self.canvas.theta_plot.plot(times, thetas, 'b')
        self.canvas.omega_plot.plot(times, omegas, 'g')
        self.canvas.moment_plot.plot(times, moments, 'r')
        self.canvas.draw()
        eps = self.sim.get_eps()
        self.output_text_field.append(
            "Episode %d: running reward: %d, random probability: %-10.5g" %
            (episode, running_reward, eps))
示例#32
0
class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    #layout
    def initUI(self):

        #resize
        self.qle1 = QLineEdit(self)
        self.qle1.move(100, 20)
        self.qle1.resize(80, 25)
        self.width = 0
        self.qle1.setInputMask("0000")
        self.qle1.setAlignment(Qt.AlignCenter)
        self.qle1.textChanged[str].connect(self.setWidth)

        self.qle1_1 = QLineEdit(self)
        self.qle1_1.move(200, 20)
        self.qle1_1.resize(80, 25)
        self.height = 0
        self.qle1_1.setAlignment(Qt.AlignCenter)
        self.qle1_1.setInputMask("0000")
        self.qle1_1.textChanged[str].connect(self.setHeight)

        #rotate
        self.qle2 = QLineEdit(self)
        self.qle2.move(100, 50)
        self.qle2.resize(100, 25)
        self.qle2.setAlignment(Qt.AlignCenter)
        self.qle2.setInputMask("0000")
        self.qle2.textChanged[str].connect(self.setRotation)

        #hflip
        self.qle3 = QLineEdit(self)
        self.qle3.move(100, 170)
        self.qle3.resize(100, 25)

        #vflip
        self.qle4 = QLineEdit(self)
        self.qle4.move(300, 170)
        self.qle4.resize(100, 25)
        self.qle4.setAlignment(Qt.AlignCenter)
        self.qle4.textChanged[str].connect(self.getName)

        #rename
        self.qle5 = QLineEdit(self)
        self.qle5.move(100, 230)
        self.qle5.resize(350, 25)

        self.label0 = QLabel('x', self)
        self.label0.move(187, 25)

        self.label1 = QLabel('prefix', self)
        self.label1.move(130, 140)

        self.label2 = QLabel('suffix', self)
        self.label2.move(330, 140)

        self.label3 = QLabel('number', self)
        self.label3.move(220, 170)

        self.label4 = QLabel('PATH', self)
        self.label4.move(20, 230)

        self.btn1 = QPushButton('&RUN', self)
        self.btn1.move(300, 20)
        self.btn1.resize(80, 40)
        #self.btn1.setCheckable(True)
        self.btn1.clicked.connect(self.RunClicked)

        self.btn2 = QPushButton('&FileOpen', self)
        self.btn2.move(400, 20)
        self.btn2.resize(80, 40)
        #self.btn2.setCheckable(True)
        self.btn2.clicked.connect(self.OpenClicked)

        self.cb1 = QCheckBox('Resize', self)
        self.cb1.move(20, 20)
        self.cb1.stateChanged.connect(self.Check)

        self.cb2 = QCheckBox('rotate', self)
        self.cb2.move(20, 50)
        self.cb2.stateChanged.connect(self.Check)

        self.cb3 = QCheckBox('hflip', self)
        self.cb3.move(20, 80)
        self.cb3.stateChanged.connect(self.Check)

        self.cb4 = QCheckBox('vflip', self)
        self.cb4.move(20, 110)
        self.cb4.stateChanged.connect(self.Check)

        self.cb5 = QCheckBox('rename', self)
        self.cb5.move(20, 140)
        self.cb5.stateChanged.connect(self.Check)

        self.setWindowTitle('Type Here')
        self.setGeometry(700, 300, 500, 280)
        self.show()

    def OpenClicked(self):
        global fname
        fname = QFileDialog.getOpenFileName(self, "open File",
                                            "/home/ss/다운로드/mb7500/",
                                            "Images (*.png *.xpm *.jpg)")
        self.qle5.setText(fname[0])

    def RunClicked(self):
        #sender = self.sender()
        img1 = cv2.imread(fname[0])
        img2 = cv2.imread(fname[0])
        img3 = cv2.imread(fname[0])
        img4 = cv2.imread(fname[0])
        img5 = cv2.imread(fname[0])
        if self.cb1.isChecked() == 1:
            #img1 = cv2.imread(fname[0])
            img2 = cv2.resize(img1,
                              dsize=(self.width, self.height),
                              interpolation=cv2.INTER_LINEAR)
            #cv2.imwrite('resi_img.jpg',img2)
            #cv2.imshow("resi_img",img2)
            img5 = img4 = img3 = img2

        if self.cb2.isChecked() == 1:
            #img2 = cv2.imread(fname[0])
            #cv2.imshow("img",img2)
            h, w, c = img2.shape
            #print(self.rotation)
            #print(h)
            #print(w)
            M1 = cv2.getRotationMatrix2D((w / 2, h / 2), self.rotation, 1)
            img3 = cv2.warpAffine(img2, M1, (w, h))
            #cv2.imshow('rota_img', img3)
            cv2.waitKey(1000)
            #cv2.imwrite('rota_img.jpg', img3)
            img5 = img4 = img3

        if self.cb3.isChecked() == 1:
            #img3 = cv2.imread(fname[0])
            #cv2.imshow("img",img)
            img4 = cv2.flip(img3, 0)
            #cv2.imshow("hflip_img", img4)
            #cv2.imwrite("hflip_img.jpg", img4)
            img5 = img4

        if self.cb4.isChecked() == 1:
            #img4 = cv2.imread(fname[0])
            #cv2.imshow("img",img)
            img5 = cv2.flip(img4, 1)
            #cv2.imshow("vflip_img", img5)
            #cv2.imwrite("vflip_img.jpg", img5)

        if self.cb5.isChecked() == 1:
            print(self.newName)
            sp_fname = fname[0].split('/')
            #print(len(sp_fname))
            #print(sp_fname[:len(sp_fname)-1])
            #print(sp_fname[1])
            new_fname = ""
            for i in range(1, len(sp_fname) - 1):
                print(i)
                new_fname = new_fname + '/' + sp_fname[i]

            print(new_fname)
            new_fname = new_fname + '/' + self.newName + '.jpg'
            print(new_fname)
            os.rename(fname[0], new_fname)
            self.qle5.setText(new_fname)

        cv2.imshow("final_img", img5)
        cv2.imwrite('final_img.jpg', img5)

    def Check(self, text):
        sender = self.sender()
        if sender.isChecked() == True:
            print("Is checked")

    def setWidth(self):
        self.width = int(self.qle1.text())

    def setHeight(self):
        self.height = int(self.qle1_1.text())

    def setRotation(self):
        self.rotation = int(self.qle2.text())

    def getName(self):
        self.newName = self.qle4.text()
        #print(type(self.newName))
        print(self.newName)
示例#33
0
文件: mac.py 项目: Elizaveta-pl/d-19
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI(self)

    def initUI(self, Dialog):
        Dialog.resize(500, 300)

        self.btn = QPushButton(Dialog)
        self.btn.move(200, 250)
        self.btn.clicked.connect(self.check)

        self.check = QPlainTextEdit(Dialog)
        self.check.setGeometry(QtCore.QRect(280, 25, 200, 200))
        self.check.setObjectName("check")
        self.check.raise_()

        self.label = QLabel('Чек:', Dialog)
        self.label.setGeometry(QtCore.QRect(280, 5, 50, 20))

        self.cheez_burger = QCheckBox(self)
        self.cheez_burger.setObjectName('Чизбургер')
        self.cheez_burger.move(20, 20)

        self.gamburger = QCheckBox(self)
        self.gamburger.setObjectName('Гамбургер')
        self.gamburger.move(20, 50)

        self.fri = QCheckBox(self)
        self.fri.setObjectName('Картофель Фри')
        self.fri.move(20, 80)

        self.tea = QCheckBox(self)
        self.tea.setObjectName('Чай')
        self.tea.move(170, 20)

        self.coffee = QCheckBox(self)
        self.coffee.setObjectName('Кофе')
        self.coffee.move(170, 50)

        self.colla = QCheckBox(self)
        self.colla.setObjectName('Кока-Кола')
        self.colla.move(170, 80)

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

        self.show()

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Макдоналдс"))
        self.btn.setText(_translate("Dialog", "Заказать"))
        self.gamburger.setText(_translate("Dialog", "Гамбургер"))
        self.cheez_burger.setText(_translate("Dialog", "Чизбургер"))
        self.fri.setText(_translate("Dialog", "Картофель Фри"))
        self.tea.setText(_translate("Dialog", "Чай"))
        self.coffee.setText(_translate("Dialog", "Кофе"))
        self.colla.setText(_translate("Dialog", "Кока-Кола"))

    def check(self):
        self.check.clear()
        for button in self.findChildren(QCheckBox):
            if button.isChecked():
                print(button.isChecked())
                self.check.appendPlainText(button.objectName())
示例#34
0
 def chbx(self):
     chbx = QCheckBox(self)
     chbx.move(850, 655)
     chbx.clicked.connect(QCoreApplication.instance().quit)
示例#35
0
文件: gui.py 项目: ClementJ18/aoe
class SideFrame(QFrame):
    def __init__(self, parent, **args):
        super().__init__(parent)

        self.unit = units.Arbalests()
        self.terrain = terrains.Bridge()
        self.parent = parent
        self.name = args["name"]

        self.unit_construct()
        self.unit_set()

        self.terrain_construct()
        self.terrain_set()

    def unit_construct(self):
        self.UnitComboBox = QComboBox(self)
        QLabel(self.name, self).move(300, 35)
        self.UnitComboBox.addItems(self.parent.unit_list)
        self.UnitComboBox.activated[str].connect(self.unit_selected)
        self.UnitComboBox.move(395, 35)

        QLabel("Health", self).move(25, 100)
        self.health = QLineEdit(self)
        self.health.move(150, 100)
        self.health.textEdited.connect(
            lambda text: self.unit.set("health", int(text))
            if text.isdigit() else self.unit.set("health", 100))

        QLabel("Attack", self).move(25, 150)
        self.attack = QLineEdit(self)
        self.attack.move(150, 150)
        self.attack.textEdited.connect(
            lambda text: self.unit.set("attack", int(text))
            if text.isdigit() else self.unit.set("attack", 50))

        self.atk_upgrade = QCheckBox("Upgraded?", self)
        self.atk_upgrade.move(150, 185)
        self.atk_upgrade.stateChanged.connect(
            lambda state: self.unit.set("atk_upgrade", state == Qt.Checked))

        QLabel("Defense", self).move(25, 250)
        self.defense = QLineEdit(self)
        self.defense.move(150, 250)
        self.defense.textEdited.connect(
            lambda text: self.unit.set("defense", int(text))
            if text.isdigit() else self.unit.set("defense", 50))

        self.def_upgrade = QCheckBox("Upgraded?", self)
        self.def_upgrade.move(150, 285)
        self.def_upgrade.stateChanged.connect(
            lambda state: self.unit.set("def_upgrade", state == Qt.Checked))

        QLabel("Range", self).move(25, 350)
        self.range = QLineEdit(self)
        self.range.move(150, 350)
        self.range.textEdited.connect(
            lambda text: self.unit.set("range", int(text))
            if text.isdigit() else self.unit.set("range", 1))

        QLabel("Vision", self).move(450, 100)
        self.vision = QLineEdit(self)
        self.vision.move(575, 100)
        self.vision.textEdited.connect(
            lambda text: self.unit.set("vision", int(text))
            if text.isdigit() else self.unit.set("vision", 7))

        QLabel("Movement", self).move(450, 150)
        self.movement = QLineEdit(self)
        self.movement.move(575, 150)
        self.movement.textEdited.connect(
            lambda text: self.unit.set("movement", int(text))
            if text.isdigit() else self.unit.set("movement", 7))

        QLabel("Type", self).move(450, 200)
        self.type = QComboBox(self)
        self.type.addItems(self.parent.types)
        self.type.move(575, 200)
        self.type.activated[str].connect(
            lambda text: self.unit.set("type", objects.UnitType[text]))

        QLabel("Battles", self).move(450, 250)
        self.battles = QLineEdit(self)
        self.battles.move(575, 250)
        self.battles.textEdited.connect(
            lambda text: self.unit.set("battles", int(text))
            if text.isdigit() else self.unit.set("battles", 0))

        QLabel("Name", self).move(850, 100)
        self.c_name = QLineEdit(self)
        self.c_name.move(975, 100)
        self.c_name.textEdited.connect(
            lambda text: self.unit.set("name", text)
            if text.isalpha() else self.unit.set("name", self.unit.name))

        self.c_save = QPushButton("Save Unit", self)
        self.c_save.resize(self.c_save.sizeHint())
        self.c_save.move(1250, 100)
        self.c_save.clicked.connect(self.save_unit)

        self.unit_deleter = QPushButton("Delete Unit", self)
        self.unit_deleter.resize(self.unit_deleter.sizeHint())
        self.unit_deleter.move(1250, 150)
        self.unit_deleter.hide()
        self.unit_deleter.clicked.connect(self.remove_unit)

        self.abilities_btn = QPushButton("Ability Picker", self)
        self.abilities_btn.resize(self.abilities_btn.sizeHint())
        self.abilities_btn.move(1350, 350)
        self.abilities_btn.clicked.connect(self.init_picker)

    def unit_set(self):
        self.health.setText(str(self.unit.health))
        self.attack.setText(str(self.unit.attack))
        self.defense.setText(str(self.unit.defense))
        self.range.setText(str(self.unit.range))
        self.battles.setText(str(self.unit.battles))
        self.vision.setText(str(self.unit.vision))
        self.movement.setText(str(self.unit.movement))
        self.type.setCurrentIndex(self.parent.types.index(self.unit.type.name))
        self.atk_upgrade.setChecked(self.unit.atk_upgrade)
        self.def_upgrade.setChecked(self.unit.def_upgrade)
        self.c_name.setText(self.unit.name)
        if self.unit.name in self.parent.custom_units:
            self.unit_deleter.show()
        else:
            self.unit_deleter.hide()

    def init_picker(self):
        ability_picker = AbilityPicker(self)
        ability_picker.resize(800, 600)
        ability_picker.show()

    def terrain_construct(self):
        self.TerrainComboBox = QComboBox(self)
        QLabel("Terrain", self).move(300, 435)
        self.TerrainComboBox.addItems(self.parent.terrain_list)
        self.TerrainComboBox.activated[str].connect(self.terrain_selected)
        self.TerrainComboBox.move(400, 435)

        QLabel("Defense+", self).move(25, 500)
        self.tdefense = QLineEdit(self)
        self.tdefense.move(150, 500)
        self.tdefense.textEdited.connect(
            lambda text: self.terrain.set("def_bonus",
                                          float(text) / 100) if text.isdigit()
            else self.terrain.set("def_bonus", self.terrain.def_bonus))

        QLabel("Range+", self).move(25, 550)
        self.trange = QLineEdit(self)
        self.trange.move(150, 550)
        self.trange.textEdited.connect(lambda text: self.terrain.set(
            "rng_bonus", int(text)) if text.isdigit() else self.terrain.set(
                "rng_bonus", self.terrain.rng_bonus))

        QLabel("Vision+", self).move(25, 600)
        self.tvision = QLineEdit(self)
        self.tvision.move(150, 600)
        self.tvision.textEdited.connect(lambda text: self.terrain.set(
            "vis_bonus", int(text)) if text.isdigit() else self.terrain.set(
                "vis_bonus", self.terrain.vis_bonus))

        QLabel("Type", self).move(25, 650)
        self.ttype = QComboBox(self)
        self.ttype.addItems(self.parent.ttypes)
        self.ttype.move(150, 650)
        self.ttype.activated[str].connect(
            lambda text: self.terrain.set("type", objects.TerrainType[text]))

        QLabel("Movement", self).move(450, 500)
        self.tmovement = QLineEdit(self)
        self.tmovement.move(575, 500)
        self.tmovement.textEdited.connect(
            lambda text: self.terrain.set("mov_cost", int(text)) if text.
            isdigit() else self.terrain.set("mov_cost", self.terrain.mov_cost))

        QLabel("Vision", self).move(450, 550)
        self.tvis = QLineEdit(self)
        self.tvis.move(575, 550)
        self.tvis.textEdited.connect(
            lambda text: self.terrain.set("vis_cost", int(text)) if text.
            isdigit() else self.terrain.set("vis_cost", self.terrain.vis_cost))

        QLabel("Road?", self).move(450, 600)
        self.tsubtype = QCheckBox("", self)
        self.tsubtype.move(575, 600)
        self.tsubtype.stateChanged.connect(
            lambda state: self.terrain.set("sub_type", objects.TerrainSubType.
                                           road) if state == Qt.Checked else
            self.terrain.set("sub_type", objects.TerrainSubType.normal))

        QLabel("Name", self).move(850, 500)
        self.c_tname = QLineEdit(self)
        self.c_tname.move(975, 500)
        self.c_tname.textEdited.connect(
            lambda text: self.terrain.set("name", text)
            if text.isalpha() else self.terrain.set("name", self.terrain.name))

        self.c_tsave = QPushButton("Save Terrain", self)
        self.c_tsave.resize(self.c_save.sizeHint())
        self.c_tsave.move(1250, 500)
        self.c_tsave.clicked.connect(self.save_terrain)

        self.terrain_deleter = QPushButton("Delete Terrain", self)
        self.terrain_deleter.resize(self.terrain_deleter.sizeHint())
        self.terrain_deleter.move(1250, 550)
        self.terrain_deleter.hide()
        self.terrain_deleter.clicked.connect(self.remove_terrain)

    def terrain_set(self):
        self.tdefense.setText(str(self.terrain.def_bonus * 100))
        self.trange.setText(str(self.terrain.rng_bonus))
        self.tvision.setText(str(self.terrain.vis_bonus))
        self.tmovement.setText(str(self.terrain.mov_cost))
        self.tvis.setText(str(self.terrain.vis_cost))
        self.ttype.setCurrentIndex(
            self.parent.ttypes.index(self.terrain.type.name))
        self.tsubtype.setChecked(
            self.terrain.sub_type == objects.TerrainSubType.road)
        self.c_tname.setText(self.terrain.name)

        if self.unit.name in self.parent.custom_terrains:
            self.terrain_deleter.show()
        else:
            self.terrain_deleter.hide()

    def unit_selected(self, text):
        if text in dir(units):
            c = getattr(units, text)
            self.unit = c()
            self.unit_deleter.hide()
        elif text in self.parent.custom_units:
            u_dict = self.parent.custom_units[text].copy()
            u_dict["type"] = objects.UnitType[u_dict["type"]]
            self.unit = objects.Unit(**u_dict)
            self.unit.__class__.__name__ = self.unit.name
            self.unit_deleter.show()

        self.unit_set()

    def terrain_selected(self, text):
        if text in dir(terrains):
            c = getattr(terrains, text)
            self.terrain = c()
            self.terrain_deleter.hide()
        elif text in self.parent.custom_terrains:
            u_dict = self.parent.custom_terrains[text].copy()
            u_dict["type"] = objects.TerrainType[u_dict["type"]]
            u_dict["sub_type"] = objects.TerrainSubType[u_dict["sub_type"]]
            self.terrain = objects.Terrain(**u_dict)
            self.terrain.__class__.__name__ = self.terrain.name
            self.terrain_deleter.show()

        self.terrain_set()

    def save_unit(self):
        name = self.unit.name
        u_dict = self.unit.__dict__.copy()
        u_dict["type"] = u_dict["type"].name

        self.parent.custom_units[name] = u_dict
        self.parent.unit_list.append(name)
        self.UnitComboBox.addItem(name)
        self.UnitComboBox.setCurrentIndex(self.parent.unit_list.index(name))

        self.other.UnitComboBox.addItem(name)
        self.unit_deleter.show()

    def remove_unit(self):
        name = self.unit.name

        self.UnitComboBox.setCurrentIndex(0)
        self.UnitComboBox.removeItem(self.parent.unit_list.index(name))

        if self.other.unit.name == name:
            self.other.UnitComboBox.setCurrentIndex(0)
            self.other.UnitComboBox.removeItem(
                self.parent.unit_list.index(name))
            self.other.unit_selected("Arbalests")

        del self.parent.custom_units[name]
        self.parent.unit_list.remove(name)

        self.unit_selected("Arbalests")

    def save_terrain(self):
        name = self.terrain.name
        u_dict = self.terrain.__dict__.copy()
        u_dict["type"] = u_dict["type"].name
        u_dict["sub_type"] = u_dict["sub_type"].name

        self.parent.custom_terrains[name] = u_dict
        self.parent.terrain_list.append(name)
        self.TerrainComboBox.addItem(name)
        self.TerrainComboBox.setCurrentIndex(
            self.parent.terrain_list.index(name))

        self.other.TerrainComboBox.addItem(name)
        self.terrain_deleter.show()

    def remove_terrain(self):
        name = self.terrain.name

        self.TerrainComboBox.setCurrentIndex(0)
        self.TerrainComboBox.removeItem(self.parent.terrain_list.index(name))

        if self.other.terrain.name == name:
            self.other.TerrainComboBox.setCurrentIndex(0)
            self.other.TerrainComboBox.removeItem(
                self.parent.terrain_list.index(name))
            self.other.terrain_selected("Bridge")

        del self.parent.custom_terrains[name]
        self.parent.terrain_list.remove(name)

        self.terrain_selected("Bridge")
示例#36
0
    def initUI(self):
        # checkbox
        cb = QCheckBox('Show title', self)
        cb.move(20, 160)
        cb.toggle()
        cb.stateChanged.connect(self.changeTitle)

        # toggle button
        self.col = QColor(0, 0, 0)
        redb = QPushButton('Red', self)
        redb.setCheckable(True)
        redb.move(10, 10)
        redb.clicked[bool].connect(self.setColor)
        redb = QPushButton('Green', self)
        redb.setCheckable(True)
        redb.move(10, 60)
        redb.clicked[bool].connect(self.setColor)
        blueb = QPushButton('Blue', self)
        blueb.setCheckable(True)
        blueb.move(10, 110)
        blueb.clicked[bool].connect(self.setColor)
        self.square = QFrame(self)
        self.square.setGeometry(150, 20, 100, 100)
        self.square.setStyleSheet("QWidget { background-color: %s }" %
                                  self.col.name())

        # slider
        sld = QSlider(Qt.Horizontal, self)
        sld.setFocusPolicy(Qt.NoFocus)
        sld.setGeometry(30, 210, 100, 30)
        sld.valueChanged[int].connect(self.changeValue)

        # pixmap
        self.label = QLabel(self)
        self.label.setPixmap(QPixmap('web.png'))
        self.label.setGeometry(160, 210, 80, 30)

        # process bar
        self.pbar = QProgressBar(self)
        self.pbar.setGeometry(30, 260, 200, 25)
        self.btn = QPushButton('Start', self)
        self.btn.move(40, 310)
        self.btn.clicked.connect(self.doAction)
        self.timer = QBasicTimer()
        self.step = 0

        # calendar
        cal = QCalendarWidget(self)
        cal.setGridVisible(True)
        cal.move(300, 10)
        cal.clicked[QDate].connect(self.showDate)
        self.lbl = QLabel(self)
        date = cal.selectedDate()
        self.lbl.setText(date.toString())
        self.lbl.move(300, 260)

        # line edit
        self.lbl2 = QLabel(self)
        qle = QLineEdit(self)
        qle.move(300, 310)
        self.lbl2.move(480, 310)
        qle.textChanged[str].connect(self.onChanged)

        self.setGeometry(300, 300, 640, 480)
        self.setWindowTitle('QCheckBox')
        self.show()
示例#37
0
文件: gui.py 项目: ClementJ18/aoe
class GUI(QWidget):
    def __init__(self):
        super().__init__()
        self.unit_list = [
            'Arbalests', 'Archers', 'Axemen', 'Berserkers', 'Bombards',
            'Camels', 'Cavaliers', 'Champions', 'ChuKoNu', 'Crossbowmen',
            'EliteArchers', 'EliteAxemen', 'EliteBerserkers',
            'EliteJanissaries', 'EliteLongbowmen', 'EliteMameluks',
            'EliteMangudai', 'EliteMonks', 'ElitePikemen', 'EliteRaiders',
            'EliteSamurai', 'EliteSkirmishers', 'EliteTemplars',
            'ExpertSkirmishers', 'HandCanon', 'HeavyCamels',
            'HeavyHorseArchers', 'HeavyScorpions', 'HorseArchers',
            'Janissaries', 'Knights', 'LightCav', 'Longbowmen',
            'Longswordsmen', 'MaA', 'Mameluks', 'Mangudai', 'Milita', 'Monks',
            'Onager', 'Paladins', 'Pikemen', 'Raiders', 'Rams', 'Samurai',
            'Scorpions', 'ScoutCav', 'SiegeRams', 'Skirmishers', 'Spearmen',
            'Templars', 'Trebuchets', 'TwoHanded', 'Villager', 'WarElephants'
        ]
        self.terrain_list = [
            'Bridge', 'Desert', 'DesertRoad', 'Ford', 'Forest', 'Hill',
            'HillRoad', 'Mountain', 'MountainRoad', 'Plain', 'PlainRoad',
            'Swamp'
        ]
        self.types = ['cavalry', 'infantry', 'ranged', 'siege', 'structure']
        self.ttypes = [
            'bridge', 'desert', 'ford', 'forest', 'hill', 'mountain', 'plain',
            'structure', 'swamp'
        ]

        with open("custom_units.json", "r") as f:
            self.custom_units = json.load(f)

        self.unit_list += self.custom_units.keys()
        self.unit_list = sorted(self.unit_list)

        with open("custom_terrains.json", "r") as f:
            self.custom_terrains = json.load(f)

        self.terrain_list += self.custom_terrains.keys()
        self.terrain_list = sorted(self.terrain_list)

        with open("custom_abilities.json", "r") as f:
            self.custom_abilities = json.load(f)

        self.distance = 1
        self.debug = False

        self.initUI()

    def initUI(self):
        hbox = QHBoxLayout(self)

        self.left = SideFrame(self, name="Attacker")
        self.left.setFrameShape(QFrame.StyledPanel)

        self.right = SideFrame(self, name="Defender")
        self.right.setFrameShape(QFrame.StyledPanel)

        self.right.other = self.left
        self.left.other = self.right

        self.bottom = QFrame(self)
        self.bottom.setFrameShape(QFrame.StyledPanel)

        self.ability_creator = AbilityCreator(self.bottom)
        self.ability_creator.resize(800, 500)

        splitter1 = QSplitter(Qt.Horizontal)
        splitter1.addWidget(self.left)
        splitter1.addWidget(self.right)

        splitter2 = QSplitter(Qt.Vertical)
        splitter2.addWidget(splitter1)
        splitter2.addWidget(self.bottom)

        hbox.addWidget(splitter2)
        self.setLayout(hbox)

        splitter2.setSizes([400, 400])

        self.init_bottom()

        self.setGeometry(300, 300, 900, 900)
        self.setWindowTitle('AoE: Age of Kings Battle Simulator')
        self.showMaximized()
        self.setWindowIcon(QIcon("icon.png"))

        self.show()

    def init_bottom(self):
        self.fight_btn = QPushButton("Fight", self.bottom)
        self.fight_btn.resize(self.fight_btn.sizeHint())
        self.fight_btn.move(50, 50)
        self.fight_btn.clicked.connect(self.initiate)

        self.inv_btn = QPushButton("Inverse Units", self.bottom)
        self.inv_btn.resize(self.inv_btn.sizeHint())
        self.inv_btn.move(250, 50)
        self.inv_btn.clicked.connect(self.inverse_units)

        self.inv2_btn = QPushButton("Inverse Terrains", self.bottom)
        self.inv2_btn.resize(self.inv2_btn.sizeHint())
        self.inv2_btn.move(450, 50)
        self.inv2_btn.clicked.connect(self.inverse_terrain)

        QLabel("Distance", self.bottom).move(50, 150)
        self.dist_box = QComboBox(self.bottom)
        self.dist_box.addItems([str(x) for x in range(1, 7)])
        self.dist_box.activated[str].connect(
            lambda text: self.__setattr__("distance", int(text)))
        self.dist_box.move(150, 150)

        self.abilities_btn = QPushButton("Ability Creator", self.bottom)
        self.abilities_btn.resize(self.abilities_btn.sizeHint())
        self.abilities_btn.move(250, 150)
        self.abilities_btn.clicked.connect(lambda: self.ability_creator.show())

        self.b = QPlainTextEdit(self.bottom)
        self.b.setReadOnly(True)
        self.b.move(800, 50)
        self.b.resize(700, 500)
        sys.stdout = RedirectStream(self.b)

        self.inv2_btn = QPushButton("Clear", self.bottom)
        self.inv2_btn.resize(self.inv2_btn.sizeHint())
        self.inv2_btn.move(1350, 560)
        self.inv2_btn.clicked.connect(lambda: self.b.clear())

        self.debug_b = QCheckBox("Debug?", self.bottom)
        self.debug_b.move(650, 60)
        self.debug_b.stateChanged.connect(self.debug_checker)

        self.cmd = QPlainTextEdit(self.bottom)
        self.cmd.resize(700, 40)
        self.cmd.move(1550, 50)
        self.cmd.hide()

        self.cmd_run = QPushButton("Run", self.bottom)
        self.cmd_run.resize(self.cmd_run.sizeHint())
        self.cmd_run.move(1550, 110)
        self.cmd_run.clicked.connect(self.eval_code)
        self.cmd_run.hide()

    def debug_checker(self, state):
        self.__setattr__("debug", state == Qt.Checked)
        if state == Qt.Checked:
            self.cmd.show()
            self.cmd_run.show()
        else:
            self.cmd.hide()
            self.cmd_run.hide()

    def eval_code(self):
        try:
            eval(self.cmd.toPlainText())
        except Exception as e:
            print(e)
            traceback.format_exc()

    def closeEvent(self, event):
        reply = QMessageBox.question(
            self, 'Message', "Do you wish to save the changes you made?",
            QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel,
            QMessageBox.No)

        if reply == QMessageBox.Yes:
            with open("custom_units.json", "w") as f:
                json.dump(self.custom_units, f)

            with open("custom_terrains.json", "w") as f:
                json.dump(self.custom_terrains, f)

            with open("custom_abilities.json", "w") as f:
                json.dump(self.custom_abilities, f)

            event.accept()
        elif reply == QMessageBox.Cancel:
            event.ignore()
        else:
            event.accept()

    def battle(self, ctx):
        def priority_check():
            if "first strike" in ctx.attacker.abilities:
                return False

            if "first strike" in ctx.defender.abilities:
                return True

            if ctx.distance > 1:
                return False

            if "skirmish" in ctx.defender.abilities:
                return True

            if "anti-cavalry" in ctx.defender.abilities and ctx.attacker.type == objects.UnitType.cavalry:
                return True

            return False

        if priority_check():
            if ctx.distance <= ctx.defender.range:
                ctx.status = 1
                ctx.defender.fight(ctx, ctx.attacker)

            ctx.status = 0
            ctx.attacker.fight(ctx, ctx.defender)
        else:
            ctx.attacker.fight(ctx, ctx.defender)
            if ctx.distance <= ctx.defender.range:
                ctx.status = 1
                ctx.defender.fight(ctx, ctx.attacker)

            if "rapid fire" in ctx.attacker.abilities:
                ctx.attacker.fight(ctx, ctx.defender)

        if "zeal" in ctx.attacker.abilities and ctx.attacker.health > 0:
            ctx.attacker.health += 20 if ctx.attacker.health + 20 <= 100 else 100 - ctx.attacker.health

        if "zeal" in ctx.defender.abilities and ctx.defender.health > 0:
            ctx.defender.health += 20 if ctx.defender.health + 20 <= 100 else 100 - ctx.defender.health

        ctx.attacker.battles += 1
        ctx.defender.battles += 1

    def initiate(self):
        if self.left.unit.health == 0 or self.right.unit.health == 0:
            print("!One of the units is dead!\n")
            return

        ctx = objects.Context(attacker=self.left.unit,
                              defender=self.right.unit,
                              atk_terrain=self.left.terrain,
                              def_terrain=self.right.terrain,
                              distance=self.distance,
                              debug=self.debug,
                              custom_abilities=self.custom_abilities)

        print("[battle]")
        self.battle(ctx)

        print("[Final Stats]")
        self.left.unit = ctx.attacker
        self.right.unit = ctx.defender
        print(ctx.attacker)
        print("...")
        print(ctx.defender)

        print("")
        self.left.unit_set()
        self.right.unit_set()

    def inverse_units(self):
        self.right.UnitComboBox.setCurrentIndex(
            self.unit_list.index(self.left.unit.__class__.__name__))
        self.left.UnitComboBox.setCurrentIndex(
            self.unit_list.index(self.right.unit.__class__.__name__))

        self.left.unit, self.right.unit = self.right.unit, self.left.unit

        self.left.unit_set()
        self.right.unit_set()

    def inverse_terrain(self):
        self.right.TerrainComboBox.setCurrentIndex(
            self.terrain_list.index(self.left.terrain.name))
        self.left.TerrainComboBox.setCurrentIndex(
            self.terrain_list.index(self.right.terrain.name))

        self.left.terrain, self.right.terrain = self.right.terrain, self.left.terrain

        self.left.terrain_set()
        self.right.terrain_set()
示例#38
0
class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'WORD CHAIN'
        self.left = 100
        self.top = 100
        self.width = 800
        self.height = 600
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        # create textbox
        self.textbox = QTextEdit(self)
        self.textbox.move(20, 20)
        self.textbox.resize(600, 200)

        self.textbox_out = QTextEdit(self)
        self.textbox_out.move(20, 380)
        self.textbox_out.resize(600, 200)

        self.textbox_path = QTextEdit(self)
        self.textbox_path.move(630, 500)
        self.textbox_path.resize(150, 28)
        self.textbox_path.setPlainText("Input the path")

        # Create a button in the window
        self.button = QPushButton('check', self)
        self.button.move(650, 100)

        self.button_out = QPushButton('export', self)
        self.button_out.move(650, 460)
        # connect button to function on_click
        self.button.clicked.connect(self.on_click)
        self.button_out.clicked.connect(self.export)

        self.checkBox_w = QCheckBox('-w', self)
        self.checkBox_c = QCheckBox('-c', self)
        self.checkBox_h = QCheckBox('-h', self)
        self.checkBox_t = QCheckBox('-t', self)
        self.checkBox_n = QCheckBox('-n', self)
        self.checkBox_w.move(60, 290)
        self.checkBox_c.move(180, 290)
        self.checkBox_h.move(300, 290)
        self.checkBox_t.move(420, 290)
        self.checkBox_n.move(540, 290)

        self.checkBox_path = QCheckBox('path?', self)
        self.checkBox_path.move(666,140)

        self.textbox_h = QTextEdit(self)
        self.textbox_h.move(300, 320)
        self.textbox_h.resize(40, 27)

        self.textbox_t = QTextEdit(self)
        self.textbox_t.move(420, 320)
        self.textbox_t.resize(40, 27)

        self.textbox_n = QTextEdit(self)
        self.textbox_n.move(540, 320)
        self.textbox_n.resize(40, 27)

        self.show()

    @pyqtSlot()
    def on_click(self):
        textboxValue = self.textbox.toPlainText()
        command = "./test.exe"
        flag = 0
        if(self.checkBox_path.isChecked()):#path

            if(self.checkBox_h.isChecked()):
                command = command + " -h " + self.textbox_h.toPlainText()
            if (self.checkBox_t.isChecked()):
                command = command + " -t " + self.textbox_t.toPlainText()
            if (self.checkBox_n.isChecked()):
                command = command + " -n " + self.textbox_n.toPlainText()
            if (self.checkBox_w.isChecked()):
                command = command + " -w"
            if (self.checkBox_c.isChecked()):
                command = command + " -c"
            if(flag == 0):
                command = command + " " + textboxValue
                print(command)
                out = os.popen(command)
                self.textbox_out.setPlainText(out.read())

        else:#text
            f = open("input.txt","w")
            f.write(textboxValue)
            f.close()
            if (self.checkBox_h.isChecked()):
                command = command + " -h " + self.textbox_h.toPlainText()
            if (self.checkBox_t.isChecked()):
                command = command + " -t " + self.textbox_t.toPlainText()
            if (self.checkBox_n.isChecked()):
                command = command + " -n " + self.textbox_n.toPlainText()
            if (self.checkBox_w.isChecked()):
                command = command + " -w"
            if (self.checkBox_c.isChecked()):
                command = command + " -c"
            print(command)
            if (flag == 0):
                os.system(command + " input.txt")
                f = open("solution.txt","r")
                text = f.read()
                print(text)
                self.textbox_out.setPlainText(text)
    def export(self):
        if(self.textbox_path.toPlainText() == "Input the path"):
            self.textbox_out.setPlainText("Please input yore path!")
        else:
            f = open(self.textbox_path.toPlainText(),"w")
            f.write(self.textbox_out.toPlainText())
            f.close()
示例#39
0
 def initUI(self):
     cb = QCheckBox('Show title', self)
     cb.move(20,20)
     cb.toggle()
     cb.stateChanged.connect(self.changeTitle)
     
     self.col = QColor(0,0,0)
     
     redb = QPushButton('red', self)
     redb.setCheckable(True)
     redb.move(20, 60)
     
     redb.clicked[bool].connect(self.setColor)
     
     greenb = QPushButton('green', self)
     greenb.setCheckable(True)
     greenb.move(20, 110)
     
     greenb.clicked[bool].connect(self.setColor)
     
     blueb = QPushButton('blue', self)
     blueb.setCheckable(True)
     blueb.move(20, 160)
     
     blueb.clicked[bool].connect(self.setColor)
     
     self.square = QFrame(self)
     self.square.setGeometry(150, 60, 100, 100)
     self.square.setStyleSheet("QWidget { background-color: %s }" % self.col.name())
     
     sld = QSlider(Qt.Horizontal, self)
     sld.setFocusPolicy(Qt.NoFocus)
     sld.setGeometry(20, 250, 100, 30)
     sld.valueChanged[int].connect(self.changeValue)
     
     self.label = QLabel(self)
     self.label.setPixmap(QPixmap('mute.gif'))
     self.label.setGeometry(150, 200, 150, 150)
     
     
     self.pbar = QProgressBar(self)
     self.pbar.setGeometry(20, 380, 200, 25)
     
     self.pbtn = QPushButton('start', self)
     self.pbtn.move(30, 420)
     self.pbtn.clicked.connect(self.doAction)
     
     self.timer = QBasicTimer()
     self.step = 0
     
     
     cal = QCalendarWidget(self)
     cal.setGridVisible(True)
     cal.move(20, 510)
     cal.clicked[QDate].connect(self.showDate)
     
     self.lbl = QLabel(self)
     date = cal.selectedDate()
     self.lbl.setText(date.toString())
     self.lbl.move(230, 510)
     
     
     
     
     
     self.setGeometry(300, 30, 580, 670)
     self.setWindowTitle('QCheckBox')
     self.show()