def on_new_data(self, data: Dict):
        """ Replace existing data views with updated ones drawn from provided 
        dictionary.
        """

        self.clear()

        show = self.get_keys()

        for ii, (_, keys) in enumerate(show.items()):
            current_widget = QWidget()
            current_layout = FlowLayout()

            for key in keys:
                current_layout.addWidget(
                    CellFeatureView(key,
                                    get_feature(data, *["cell_record", key])))

            current_widget.setLayout(current_layout)
            self.central_layout.addWidget(current_widget)

            if ii < len(show) - 1:
                divider = QFrame()
                divider.setFrameStyle(QFrame.HLine)
                divider.setLineWidth(3)
                self.central_layout.addWidget(divider)
Esempio n. 2
0
class Example(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.button = QPushButton("Start", self)
        self.button.clicked.connect(self.doAnim)
        self.button.move(30, 30)

        self.frame = QFrame(self)
        self.frame.setFrameStyle(QFrame.Panel | QFrame.Raised)
        self.frame.setGeometry(150, 30, 100, 100)

        self.setGeometry(300, 300, 380, 300)
        self.setWindowTitle('Animation')
        self.show()

    def doAnim(self):

        self.anim = QPropertyAnimation(self.frame, b"geometry")
        self.anim.setDuration(10000)
        self.anim.setStartValue(QRect(150, 30, 100, 100))
        self.anim.setEndValue(QRect(150, 30, 200, 200))
        self.anim.start()
Esempio n. 3
0
    def create_gui(self):
        self.main_window.setWindowTitle("HC Stdout GUI")
        self.main_window.setMinimumWidth(500)

        top_frame = QFrame()
        top_frame.setFrameStyle(QFrame.StyledPanel)
        top_layout = QHBoxLayout()

        top_layout.addWidget(self.text_input)
        button = QPushButton("Send")
        # pay attention to "click" vs "clicked" to make this work right
        # connect the ENTER key signal to the button.click slot
        self.text_input.returnPressed.connect(button.click)
        # connect the button.clicked signal to my own slot
        button.clicked.connect(self.click_send)

        top_layout.addWidget(button)
        top_frame.setLayout(top_layout)

        main_frame = QFrame()
        main_layout = QVBoxLayout()
        main_layout.addWidget(top_frame)
        main_layout.addWidget(self.console_frame)
        main_frame.setLayout(main_layout)

        self.main_window.setCentralWidget(main_frame)
        self.main_window.show()
Esempio n. 4
0
class EditColorValue(QWidget):
    def __init__(self, value):
        super().__init__()

        self._val = value

        self._rootLayout = QHBoxLayout()

        self._colorLineEdit = QLineEdit()
        self._colorLineEdit.setAlignment(Qt.AlignRight)
        self._colorLineEdit.setReadOnly(True)
        self._rootLayout.addWidget(self._colorLineEdit)

        self._frame = QFrame()
        self._frame.setFrameStyle(QFrame.StyledPanel)
        self._frame.setFrameShadow(QFrame.Plain)
        self._frameLayout = QHBoxLayout()

        self._colorSelectBt = QPushButton()
        self._colorSelectBt.setFlat(True)
        self._colorSelectBt.clicked.connect(self._signal_colorSelectBt_clicked)

        self._frameLayout.setContentsMargins(0, 0, 0, 0)
        self._frameLayout.setSpacing(0)
        self._frameLayout.addWidget(self._colorSelectBt)
        self._frame.setMaximumHeight(
            self._colorSelectBt.minimumSizeHint().height() - 2)
        self._frame.setLayout(self._frameLayout)

        self._rootLayout.addWidget(self._frame)
        self._rootLayout.setContentsMargins(1, 1, 1, 1)
        self.setLayout(self._rootLayout)

        self._pull()

    def _updateWith(self, col):
        palette = self._colorSelectBt.palette()
        palette.setColor(QPalette.Button, col)
        self._colorSelectBt.setAutoFillBackground(True)
        self._colorSelectBt.setPalette(palette)
        self._colorSelectBt.update()
        self._colorLineEdit.setText("<{0}, {1}, {2}, {3}>".format(
            col.red(), col.green(), col.blue(), col.alpha()))

    def _signal_colorSelectBt_clicked(self):
        r, g, b, a = self._val.getVal()
        resColor = QColorDialog.getColor(QColor(r, g, b,
                                                a), self, "Select Color",
                                         QColorDialog.ShowAlphaChannel)
        if not resColor.isValid():
            return
        self._push(resColor)
        SendMessage(MsgOnLogicDataEdited(self._val))

    def _push(self, col):
        self._val.setVal(col.red(), col.green(), col.blue(), col.alpha())

    def _pull(self):
        r, g, b, a = self._val.getVal()
        self._updateWith(QColor(r, g, b, a))
Esempio n. 5
0
class MouseTracker(QWidget):

    global x, y
    x = 0
    y = 0

    def __init__(self):
        super().__init__()
        self.initUI()
        self.setMouseTracking(True)

    def initUI(self):
        global x, y
        self.setGeometry(300, 300, 500, 500)
        self.setWindowTitle('Mouse Tracker')
        #self.setRotation(60)
        self.label = QLabel(self)
        self.label.resize(200, 100)

        self.ellipse = QGraphicsEllipseItem(10, 20, 100, 60)
        self.ellipse.setTransformOriginPoint(QPointF(100 / 2 + 10,
                                                     60 / 2 + 20))
        self.ellipse.setRotation(-60)
        self.scene.addItem(self.ellipse)

        self.frame = QFrame(self)
        self.frame.setFrameStyle(QFrame.Panel | QFrame.Raised)
        self.frame.setGeometry(x, y, 100, 100)
        self.show()

    def mouseMoveEvent(self, event):
        global x, y
        x = event.x()
        y = event.y()
        self.frame.setGeometry(x, y, 100, 100)
Esempio n. 6
0
class Window(QMainWindow):
	def __init__(self):
		super().__init__()


		self.title = "PyQt5 Animation"
		self.top = 100
		self.left = 100
		self.width = 680
		self.height = 500
		self.InitWindow()


	def InitWindow(self):

		self.button = QPushButton("Start", self)
		self.button.move(30,30)
		self.button.clicked.connect(self.doAnimation)

		self.frame = QFrame(self)
		self.frame.setFrameStyle(QFrame.Panel | QFrame.Raised)
		self.frame.setGeometry(150,30,100,100)

		self.setWindowTitle(self.title)
		self.setGeometry(self.top, self.left, self.width, self.height)
		self.setWindowIcon(QtGui.QIcon('./icon/icon.png'))
		self.show()

	def doAnimation(self):
		self.anim = QPropertyAnimation(self.frame, b"geometry")
		self.anim.setDuration(10000)
		self.anim.setStartValue(QRect(0,0,100,150))
		self.anim.setEndValue(QRect(250,250,100,30))
		self.anim.start()
Esempio n. 7
0
    def create_time_graph(self):
        self.graph_layout = QVBoxLayout()

        graph = OneRMGraphCanvas("Horizontal Press", self.rm_history,
                                 self.current_year, self)

        combobox_layout = QHBoxLayout()
        self.lifts_combobox = QComboBox(self)
        self.lifts_combobox.addItems(list(self.preferred_lifts.values()))
        self.lifts_combobox.currentTextChanged.connect(
            lambda lift: self.change_exercise_graph(lift))

        self.change_year_combobox = QComboBox(self)
        self.change_year_combobox.addItems(list(self.rm_history.keys()))
        self.change_year_combobox.setCurrentText(self.current_year)
        self.change_year_combobox.currentTextChanged.connect(
            lambda year: self.change_graph_year(year))

        combobox_layout.addWidget(self.change_year_combobox)
        combobox_layout.addWidget(self.lifts_combobox)

        toolbar = NavigationToolbar(graph, self)
        toolbar.setStyleSheet("background-color: white;")

        self.graph_layout.addWidget(toolbar)
        self.graph_layout.addWidget(graph)
        self.graph_layout.addLayout(combobox_layout)

        framed_graph = QFrame(self)
        framed_graph.setFrameStyle(QFrame.Box)
        framed_graph.setLineWidth(3)
        framed_graph.setLayout(self.graph_layout)

        return framed_graph
Esempio n. 8
0
    def __init__(self, command, meta, value=None, *args, **kwargs):
        # print(command, value)
        super(CommandMultiSelect, self).__init__(*args, **kwargs)
        self.setMinimumWidth(250)
        self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum))
        self.inputs = []

        vl = VLayout()

        hl = HLayout(0)
        hl.addWidget(QLabel("<b>{}</b>".format(command)))
        hl.addStretch(1)
        hl.addWidget(CmdWikiUrl(command, "Wiki"))
        vl.addLayout(hl)

        desc = QLabel(meta['description'])
        desc.setWordWrap(True)
        vl.addWidget(desc)

        for i, val in enumerate(value):
            cb = QComboBox()
            for k, v in meta['parameters'].items():
                cb.addItem("{}: {} {}".format(k, v['description'], "(default)" if v.get("default") else ""), k)
            cb.setCurrentIndex(val)
            hl_input = HLayout(0)
            hl_input.addWidgets([QLabel("{}: ".format(i+1)), cb])

            self.inputs.append(cb)
            vl.addLayout(hl_input)

        line = QFrame()
        line.setFrameStyle(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)
        vl.addWidget(line)
        self.setLayout(vl)
Esempio n. 9
0
    def create_website_form(self, groupbox):
        """Populate the website chooser part of GUI
        
        Arguments:
            groupbox {QGroupBox} -- The parent Groupbox having website form
        """
        website_chooser_label = QLabel(WEBSITE_CHOOSER_LABEL)
        self.website_input = QComboBox(groupbox)

        self.website_input, self.website_url_map = self.configuration.populate_website_chooser(
            self.website_input)
        website_url_label = QLabel(WEBSITE_URL_LABEL)
        self.website_url_input = QLineEdit(groupbox)
        self.website_url_input.setText(self.website_url_map[str(
            self.website_input.currentText())])
        self.website_url_input.setDisabled(True)

        left_panel = QFrame(groupbox)
        left_panel.setFrameStyle(QFrame.StyledPanel)
        left_form = QFormLayout()
        left_form.setHorizontalSpacing(FORM_HORIZONTAL_SPACING)
        left_form.setVerticalSpacing(FORM_VERTICAL_SPACING)
        left_form.addRow(website_chooser_label, self.website_input)
        left_form.addRow(website_url_label, self.website_url_input)
        left_panel.setLayout(left_form)

        return left_panel
Esempio n. 10
0
    def create_login_form(self, groupbox):
        """Populate the login form of UI.
        
        Arguments:
            groupbox {QGroupBox} -- The parent Groupbox having login form
        """
        vbox = QVBoxLayout()

        username_label = QLabel(USERNAME_LABEL)
        self.username_input = QLineEdit(groupbox)
        password_label = QLabel(PASSWORD_LABEL)
        self.password_input = QLineEdit(groupbox)
        self.password_input.setEchoMode(QLineEdit.Password)
        self.login_btn = QPushButton(LOGIN_LABEL, groupbox)

        hbox_btn = QHBoxLayout()
        hbox_btn.addStretch(1)
        hbox_btn.addWidget(self.login_btn)

        right_panel = QFrame(groupbox)
        right_panel.setFrameStyle(QFrame.StyledPanel)
        right_form = QFormLayout()
        right_form.setHorizontalSpacing(FORM_HORIZONTAL_SPACING)
        right_form.setVerticalSpacing(FORM_VERTICAL_SPACING)
        right_form.addRow(username_label, self.username_input)
        right_form.addRow(password_label, self.password_input)

        vbox.addLayout(right_form)
        vbox.addStretch(1)
        vbox.addLayout(hbox_btn)
        right_panel.setLayout(vbox)

        return right_panel
Esempio n. 11
0
    def create_video_tree(self, groupbox):
        """Populate UI part which shows the lectures in a tree format.
        
        Arguments:
            groupbox {QGroupBox} -- The parent Groupbox having Course list
        """
        vbox = QVBoxLayout()

        right_panel = QFrame(groupbox)
        right_panel.setFrameStyle(QFrame.StyledPanel)

        root_folder_label = QLabel(ROOT_FOLDER_LABEL)
        self.root_folder_path_input = QLineEdit()
        self.root_folder_path_button = QPushButton(BROWSE_LABEL)
        hbox = QHBoxLayout()
        hbox.addWidget(root_folder_label)
        hbox.addWidget(self.root_folder_path_input)
        hbox.addWidget(self.root_folder_path_button)
        hbox.setSpacing(50)

        title_label = QLabel(COURSE_STRUCTURE_TITLE)
        self.course_structure = CourseStructure(self.application_context)

        vbox.addLayout(hbox)
        vbox.addWidget(title_label)
        vbox.addWidget(self.course_structure)
        right_panel.setLayout(vbox)

        return right_panel
Esempio n. 12
0
    def create_calculator(self):
        title_frame = QFrame()
        title_layout = QVBoxLayout()

        #calculator_label = QLabel("Calculate your body fat", self)
        #calculator_label.setFont(QFont("Ariel", 15))
        #calculator_label.setFixedHeight(70)

        #title_layout.addWidget(calculator_label)
        #title_frame.setLayout(title_layout)

        calculator_frame = QFrame()
        calculator_frame.setObjectName("frameObj")
        calculator_frame.setFrameStyle(QFrame.Box)
        calculator_frame.setLineWidth(3)
        calculator_frame.setStyleSheet("""#frameObj {color: #322d2d;}""")
        calculator_frame.setMaximumWidth(600)
        calculator_frame.setMaximumHeight(350)

        form_layout = self.create_form_metric(
        ) if self.units == "metric" else self.create_form_imperial()
        calculator_frame.setLayout(form_layout)

        wrapper_layout = QVBoxLayout()
        #wrapper_layout.addWidget(title_frame)
        wrapper_layout.addWidget(calculator_frame)
        return wrapper_layout
Esempio n. 13
0
 def __init__(self, items: t_.Sequence[str], parent=None):
     super().__init__(parent=parent)
     # self.setFrameStyle(QFrame.Panel)
     self._bGroup = QButtonGroup(self)
     l = QHBoxLayout(self)
     for i, itemName in enumerate(items):
         b = QPushButton(itemName, parent=self)
         b.setCheckable(True)  # Toggleable
         self._bGroup.addButton(b, id=i)
         l.addWidget(b)
     self._selectedButtonId = self._bGroup.id(self._bGroup.buttons()[0])
     self._bGroup.buttons()[0].click(
     )  # Make sure at least one button is selected.
     self._bGroup.buttonClicked.connect(self._buttonSelected)
     l.setSpacing(1)  # Move buttons close together
     l.setContentsMargins(0, 0, 0, 0)
     w = QFrame(self)
     w.setFrameStyle(QFrame.Box)
     w.setLayout(l)
     scrollArea = QScrollArea(parent=self)
     scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
     scrollArea.setStyleSheet("""QScrollBar:horizontal {
          height:10px;     
      }""")
     scrollArea.setWidget(w)
     scrollArea.setFixedHeight(10 + w.height())
     ll = QHBoxLayout()
     ll.setContentsMargins(0, 0, 0, 0)
     ll.addWidget(scrollArea)
     self.setLayout(ll)
Esempio n. 14
0
class MouseTracker(QWidget):

    global x, y
    x = 0
    y = 0

    def __init__(self):
        super().__init__()
        self.initUI()
        self.setMouseTracking(True)

    def initUI(self):
        global x, y
        self.setGeometry(300, 300, 500, 500)
        self.setWindowTitle('Mouse Tracker')
        self.label = QLabel(self)
        self.label.resize(200, 100)

        self.frame = QFrame(self)
        self.frame.setFrameStyle(QFrame.Panel | QFrame.Raised)
        self.frame.setGeometry(x, y, 100, 100)
        self.show()

    def mouseMoveEvent(self, event):
        global x, y
        x = event.x()
        y = event.y()
        self.frame.setGeometry(x, y, 100, 100)
Esempio n. 15
0
class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.s = self
        self.setWindowTitle("Динамический label")
        self.setGeometry(0, 0, 400, 300)
        self.button = QPushButton("создать label", self)
        self.button.clicked.connect(self.run)
        self.button.setGeometry(200, 100, 100, 20)
        self.panel = QVBoxLayout(self)
        #self.panel.addWidget(self.button)

        self.frame = QFrame(self)
        self.frame.setMinimumSize(200, 300)
        self.frame.setFrameStyle(QFrame.Box)
        self.frame.setLayout(self.panel)

        #self.panel.setGeometry(self.rect())
        #self.setLayout(self.panel)
        #self.run()

    def run(self):
        spacerItem = QSpacerItem(20, 55)
        self.panel.insertSpacerItem(0, spacerItem)
        label = QLabel('This is label')
        #label.setGeometry(100, 100, 100, 20)
        #self.panel.addWidget(spacerItem)
        self.panel.addWidget(label)
        #self.panel.insertWidget(1, label)
        self.panel.addStretch()
Esempio n. 16
0
    def __init__(self, command, meta, value=None, *args, **kwargs):
        super(PulseTime, self).__init__(*args, **kwargs)
        self.setMinimumWidth(250)
        self.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum))
        self.inputs = []

        vl = VLayout()

        hl = HLayout(0)
        hl.addWidget(QLabel("<b>{}</b>".format(command)))
        hl.addStretch(1)
        hl.addWidget(CmdWikiUrl(command, "Wiki"))
        vl.addLayout(hl)

        desc = QLabel(meta['description'])
        desc.setWordWrap(True)
        vl.addWidget(desc)

        vl_groups = VLayout(0)
        for k in sorted(list(value.keys())):
            sb = SpinBox(minimum=int(meta['parameters']['min']),
                         maximum=int(meta['parameters']['max']))
            sb.setValue(value[k])
            hl_group = HLayout(0)
            hl_group.addWidgets([QLabel(k), sb])
            vl_groups.addLayout(hl_group)
            self.inputs.append(sb)
        vl.addLayout(vl_groups)

        line = QFrame()
        line.setFrameStyle(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)
        vl.addWidget(line)
        self.setLayout(vl)
Esempio n. 17
0
 def _init_grid(self):
     self.grid = QGridLayout()
     self.row = 0
     frame = QFrame(self)
     frame.setFrameStyle(QFrame.Panel)
     frame.setLayout(self.grid)
     self.current_layout.addWidget(frame)
Esempio n. 18
0
def separator(orient='V'):
    line = QFrame()
    if orient == 'V':
        line.setFrameStyle(5)
    if orient == 'H':
        line.setFrameStyle(4)
    return line
Esempio n. 19
0
    def finalise(self):     # cette fonction est a appeler une fois tout le contenu ajoute.
        line = QFrame(self)#, -1, size=(20,-1), style=wx.LI_HORIZONTAL)
        line.setFrameStyle(QFrame.HLine)
        self.sizer.addWidget(line)

        self.box = QHBoxLayout()

        ##if wx.Platform != "__WXMSW__":
            ##btn = wx.ContextHelpButton(self)
            ##self.box.Add(btn)

        btn = QPushButton(" Créer " if self.objet else "Enregistrer", clicked=self.accept)
        btn.setWhatsThis("Créer l'objet." if self.objet else "Enregistrer les modifications.")
        ##btn.SetDefault()
        #XXX: Action à ajouter !!
        self.box.addWidget(btn)

        btn = QPushButton("Annuler", clicked=self.close)
        btn.setWhatsThis("Quitter sans rien changer.")
        self.box.addWidget(btn)

        self.sizer.addLayout(self.box)

        self.setLayout(self.sizer)
        if self.objet:
            self.champs['nom'].setFocus()
Esempio n. 20
0
class MainWindow(QWidget):
    # class constructor
    def __init__(self):
        # call QWidget constructor
        super().__init__()
        self.ui = Ui_Form()
        self.ui.setupUi(self)

        self.frame = QFrame(self)
        self.frame.setFrameStyle(QFrame.Panel | QFrame.Raised)
        self.frame.setGeometry(150, 30, 100, 100)

        # create a timer
        self.timer = QTimer()
        # set timer timeout callback function
        self.timer.timeout.connect(self.viewCam)
        # set control_bt callback clicked  function
        self.ui.control_bt.clicked.connect(self.controlTimer)
        self.ui.control_bt.clicked.connect(self.animation)

    # view camera
    def viewCam(self):
        # read image in BGR format
        ret, image = self.cap.read()
        # convert image to RGB format
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
        # get image infos
        height, width, channel = image.shape
        step = channel * width
        # create QImage from image
        qImg = QImage(image.data, width, height, step, QImage.Format_RGB888)
        # show image in img_label
        self.ui.image_label.setPixmap(QPixmap.fromImage(qImg))

    # start/stop timer
    def controlTimer(self):
        # if timer is stopped
        if not self.timer.isActive():
            # create video capture
            self.cap = cv2.VideoCapture(0)
            # start timer
            self.timer.start(20)
            # update control_bt text
            self.ui.control_bt.setText("Stop")
        # if timer is started
        else:
            # stop timer
            self.timer.stop()
            # release video capture
            self.cap.release()
            # update control_bt text
            self.ui.control_bt.setText("Start")

    def animation(self):
        self.anim = QPropertyAnimation(self.frame, b"geometry")
        self.anim.setDuration(1000)
        self.anim.setStartValue(QRect(0, 0, 100, 30))
        self.anim.setEndValue(QRect(250, 250, 100, 30))
        self.anim.start()
Esempio n. 21
0
    def __init__(self, parent=None):
        super(FindAndReplaceDlg, self).__init__(parent)

        findLabel = QLabel("Find &what:")
        self.findLineEdit = QLineEdit()
        #Remove auto capitalization
        self.findLineEdit.setInputMethodHints(Qt.ImhNoAutoUppercase)
        findLabel.setBuddy(self.findLineEdit)
        replaceLabel = QLabel("Replace w&ith:")
        self.replaceLineEdit = QLineEdit()
        #Remove auto capitalization
        self.replaceLineEdit.setInputMethodHints(Qt.ImhNoAutoUppercase)
        replaceLabel.setBuddy(self.replaceLineEdit)
        self.caseCheckBox = QCheckBox("&Case sensitive")
        self.wholeCheckBox = QCheckBox("Wh&ole words")
        moreFrame = QFrame()
        moreFrame.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken)
        self.backwardsCheckBox = QCheckBox("Search &Backwards")
        self.regexCheckBox = QCheckBox("Regular E&xpression")
        line = QFrame()
        line.setFrameStyle(QFrame.VLine | QFrame.Sunken)
        self.findButton = QPushButton("&Find")
        self.replaceButton = QPushButton("&Replace")
        self.replaceAllButton = QPushButton("&ReplaceAll")

        self.findButton.setFocusPolicy(Qt.NoFocus)
        self.replaceButton.setFocusPolicy(Qt.NoFocus)
        self.replaceAllButton.setFocusPolicy(Qt.NoFocus)

        gridLayout = QGridLayout()
        leftLayout = QVBoxLayout()
        gridLayout.addWidget(findLabel, 0, 0)
        gridLayout.addWidget(self.findLineEdit, 0, 1)
        gridLayout.addWidget(replaceLabel, 1, 0)
        gridLayout.addWidget(self.replaceLineEdit, 1, 1)
        gridLayout.addWidget(self.caseCheckBox, 2, 0)
        gridLayout.addWidget(self.wholeCheckBox, 2, 1)
        gridLayout.addWidget(self.backwardsCheckBox, 3, 0)
        gridLayout.addWidget(self.regexCheckBox, 3, 1)
        leftLayout.addLayout(gridLayout)
        buttonLayout = QVBoxLayout()
        buttonLayout.addWidget(self.findButton)
        buttonLayout.addWidget(self.replaceButton)
        buttonLayout.addWidget(self.replaceAllButton)
        buttonLayout.addStretch()
        mainLayout = QHBoxLayout()
        mainLayout.addLayout(leftLayout)
        mainLayout.addWidget(line)
        mainLayout.addLayout(buttonLayout)
        self.setLayout(mainLayout)

        mainLayout.setSizeConstraint(QLayout.SetFixedSize)

        self.findLineEdit.textEdited.connect(self.updateUi)
        self.findButton.clicked.connect(self.findClicked)
        self.replaceButton.clicked.connect(self.replaceClicked)
        self.replaceAllButton.clicked.connect(self.replaceAllClicked)
        self.updateUi()
        self.setWindowTitle("Find and Replace")
Esempio n. 22
0
    def whiteQFrame():
        infoFrame = QFrame()
        infoFrame.setFrameStyle(QFrame.Box | QFrame.Raised)
        infoFrame.setStyleSheet(
            '.QFrame {margin-right: 10px; margin-bottom: 10px;background-color: white; border-radius: 5px; border: 1px solid #E1E4E7;}'
        )

        return infoFrame
Esempio n. 23
0
    def __init__(self, inputDict):
        super(OtherDialog, self).__init__()

        self.setWindowTitle('Other configurations')

        mltpl = inputDict['multiple']
        thrshld = inputDict['threshold']
        msk = inputDict['mask']

        vbox = QVBoxLayout()
        self.setLayout(vbox)

        label = QLabel("(*) Only meant for image inserted by template")
        vbox.addWidget(label)

        hline = QFrame()
        hline.setFrameStyle(hline.HLine)
        hline.setLineWidth(1)
        vbox.addWidget(hline)

        formLayout = QFormLayout()
        vbox.addLayout(formLayout)

        self.multiple = QCheckBox()
        self.multiple.setChecked(mltpl)
        formLayout.addRow("Multiple Match (*):", self.multiple)

        self.threshold = QDoubleSpinBox()
        self.threshold.setDecimals(1)
        self.threshold.setRange(0, 1)
        self.threshold.setSingleStep(0.1)
        self.threshold.setValue(thrshld)
        formLayout.addRow("Threshold (*):", self.threshold)

        hbox = QHBoxLayout()

        colorBtn = QPushButton("Select")
        colorBtn.clicked.connect(self.colorBtn_clicked)
        hbox.addWidget(colorBtn)

        _, red, _, green, _, blue = msk.split(',')
        self.backgroundColor = ("background-color: rgb(" + red + "," + green +
                                "," + blue + ")")
        self.borderColor = "border: 1px solid black"

        self.frame = QFrame()
        self.frame.setStyleSheet(self.borderColor + ";" + self.backgroundColor)
        hbox.addWidget(self.frame)

        formLayout.addRow("Image background color:", hbox)

        self.btns = QDialogButtonBox()
        self.btns.setStandardButtons(QDialogButtonBox.Cancel
                                     | QDialogButtonBox.Ok)
        vbox.addWidget(self.btns)

        self.btns.accepted.connect(self.accept)
        self.btns.rejected.connect(self.reject)
Esempio n. 24
0
 def _createStatePlotWidget(self):
     self._statePlotWidget = QWidget()
     self._statePlotFigure = Figure()
     self._statePlotCanvas = FigureCanvas(self._statePlotFigure)
     self._statePlotCanvas.setSizePolicy(QSizePolicy.Expanding,
                                         QSizePolicy.Expanding)
     self._statePlotCanvas.updateGeometry()
     self._statePlotCanvas.setParent(self._statePlotWidget)
     self._statePlotFigure.set_canvas(self._statePlotCanvas)
     self._statePlotFigure.subplots_adjust(hspace=0.5)
     self._statePlotAxes = self._statePlotFigure.add_subplot(
         2, 1, 1, title='State plot')
     self._state_plot, = self._statePlotAxes.plot([], [], label='state')
     self._activationParamAxes = self._statePlotFigure.add_subplot(
         2, 1, 2, title='H-H activation parameters vs time')
     self._activationParamAxes.set_xlabel('Time (ms)')
     #for axis in self._plotFigure.axes:
     #    axis.autoscale(False)
     self._stateplot_xvar_label = QLabel('Variable on X-axis')
     self._stateplot_xvar_combo = QComboBox()
     self._stateplot_xvar_combo.addItems(['V', 'm', 'n', 'h'])
     self._stateplot_xvar_combo.setCurrentText('V')
     self._stateplot_xvar_combo.setEditable(False)
     self._stateplot_xvar_combo.currentIndexChanged[str].connect(
         self._statePlotXSlot)
     self._stateplot_yvar_label = QLabel('Variable on Y-axis')
     self._stateplot_yvar_combo = QComboBox()
     self._stateplot_yvar_combo.addItems(['V', 'm', 'n', 'h'])
     self._stateplot_yvar_combo.setCurrentIndex(2)
     self._stateplot_yvar_combo.setEditable(False)
     self._stateplot_yvar_combo.currentIndexChanged[str].connect(
         self._statePlotYSlot)
     self._statePlotNavigator = NavigationToolbar(self._statePlotCanvas,
                                                  self._statePlotWidget)
     frame = QFrame()
     frame.setFrameStyle(QFrame.StyledPanel + QFrame.Raised)
     layout = QHBoxLayout()
     layout.addWidget(self._stateplot_xvar_label)
     layout.addWidget(self._stateplot_xvar_combo)
     layout.addWidget(self._stateplot_yvar_label)
     layout.addWidget(self._stateplot_yvar_combo)
     frame.setLayout(layout)
     self._closeStatePlotAction = QAction('Close', self)
     self._closeStatePlotAction.triggered.connect(
         self._statePlotWidget.close)
     self._closeStatePlotButton = QToolButton()
     self._closeStatePlotButton.setDefaultAction(self._closeStatePlotAction)
     layout = QVBoxLayout()
     layout.addWidget(frame)
     layout.addWidget(self._statePlotCanvas)
     layout.addWidget(self._statePlotNavigator)
     layout.addWidget(self._closeStatePlotButton)
     self._statePlotWidget.setLayout(layout)
     # Setting the close event so that when the help window is
     # closed the ``State plot`` button becomes unchecked
     self._statePlotWidget.closeEvent = lambda event: self._showStatePlotAction.setChecked(
         False)
Esempio n. 25
0
    def initUI(self):
        QToolTip.setFont(QFont('SansSerif', 10))
        self.setToolTip('This is a <b>QWidget</b> widget.')
        #quitBtn = QPushButton('Quit', self)
        #quitBtn.clicked.connect(self.quitBtnEvent())
        #quitBtn.clicked.connect(QCoreApplication.instance().quit)
        #quitBtn.setToolTip('This is a <b>QPushButton</b> widget.')
        #quitBtn.resize(quitBtn.sizeHint())

        exitAction = QAction(QIcon('application-exit-4.png'), '&Exit', self)
        exitAction.setShortcut('Alt+F4')
        exitAction.setStatusTip('Exit Application')
        exitAction.triggered.connect(qApp.quit)

        menuBar = QMenuBar()
        fileMenu = menuBar.addMenu('&File')
        fileMenu.addAction(exitAction)
        fileMenu.resize(fileMenu.sizeHint())

        toolBar = QToolBar(self)
        toolBar.addAction(exitAction)
        #toolBar.resize(toolBar.sizeHint())
        toolBar.setFixedHeight(60)

        hozLine = QFrame()
        hozLine.setFrameStyle(QFrame.HLine)
        #hozLine.setSizePolicy(QSizePolicy.Minimum,QSizePolicy.Expanding)

        statusBar = QStatusBar(self)
        statusBar.showMessage('Ready')

        grid = QGridLayout()
        lbl_1 = QLabel('1,1')
        lbl_2 = QLabel('1,2')
        lbl_3 = QLabel('2,1')
        lbl_4 = QLabel('2,2')
        grid.addWidget(lbl_1, 1, 1)
        grid.addWidget(lbl_2, 1, 2)
        grid.addWidget(lbl_3, 2, 1)
        grid.addWidget(lbl_4, 2, 2)

        vbox = QVBoxLayout()
        vbox.addWidget(menuBar)
        vbox.addWidget(hozLine)
        vbox.addWidget(toolBar)
        # vbox.addWidget(hozLine)
        vbox.addLayout(grid)
        vbox.addStretch(1)
        vbox.addWidget(statusBar)

        self.setLayout(vbox)

        self.setGeometry(300, 300, 500, 500)
        self.setWindowTitle('Photos')
        self.setWindowIcon(QIcon('camera-photo-5.png'))
        self.center()
        self.show()
Esempio n. 26
0
    def __init__(self, command, meta, value=None, *args, **kwargs):
        super(Interlock, self).__init__(*args, **kwargs)
        self.setMinimumWidth(250)
        self.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum))
        self.input = None
        self.groups = []

        vl = VLayout()

        hl = HLayout(0)
        hl.addWidget(QLabel("<b>{}</b>".format(command)))
        hl.addStretch(1)
        hl.addWidget(CmdWikiUrl(command, "Wiki"))
        vl.addLayout(hl)

        desc = QLabel(meta['description'])
        desc.setWordWrap(True)
        vl.addWidget(desc)

        self.input = QComboBox()

        user_data = ["OFF", "ON"]
        for k, v in meta['parameters'].items():
            self.input.addItem(
                "{} {}".format(v['description'],
                               "(default)" if v.get("default") else ""),
                user_data[int(k)])

        if value and value.get("Interlock", "OFF") == "OFF":
            self.input.setCurrentIndex(0)
        else:
            self.input.setCurrentIndex(1)
        vl.addWidget(self.input)

        vl_groups = VLayout(0)
        for i in range(4):
            le = QLineEdit()
            le.setAlignment(Qt.AlignCenter)
            group_value = value.get("Groups", [])
            if group_value:
                group_value_list = group_value.split(" ")
                if i < len(group_value_list):
                    group_value = group_value_list[i]
                    le.setText(group_value)
            hl_group = HLayout(0)
            hl_group.addWidgets([QLabel("Group {}".format(i + 1)), le])
            vl_groups.addLayout(hl_group)
            self.groups.append(le)
        vl.addLayout(vl_groups)

        line = QFrame()
        line.setFrameStyle(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)
        vl.addWidget(line)
        self.setLayout(vl)
Esempio n. 27
0
    def create_frame_top(self):
        frame = QFrame()
        frame.setFrameStyle(QFrame.StyledPanel)

        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(QLabel(self.txt_top))

        frame.setLayout(layout)
        return frame
Esempio n. 28
0
    def create_progression(self):
        frame = QFrame()
        progression_layout = QVBoxLayout()

        frame.setLayout(progression_layout)

        self.table = QTableWidget(7, 5)
        self.table.setEditTriggers(QTableWidget.NoEditTriggers)
        self.table.verticalHeader().setVisible(False)

        table_items = {
            "table_headers": ["Set", "%", "Weight", "Reps", "Rest"],
            "sets": ["1", "2", "3", "4", "5", "6", "7", "8"],
            "percentages":
            ["~30%-50%", "~60%", "~70%", "~80%", "~90%", "~100%", "~102%"],
            "weight": [""] * 7,
            "number_of_reps": ["8", "5", "3", "1", "1", "1", "1"],
            "rest": [
                "~2 min", "~2 min", "~3 min", "~3 min", "~5 min", "~5-15 min",
                "~5-15 min"
            ]
        }

        for key, value in table_items.items():
            for i, item in enumerate(value):
                if key == "table_headers":
                    self.table.setHorizontalHeaderItem(i,
                                                       QTableWidgetItem(item))
                    self.table.horizontalHeader().setSectionResizeMode(
                        i, QHeaderView.Stretch)
                else:
                    _item = QTableWidgetItem(item)
                    _item.setTextAlignment(Qt.AlignCenter)
                    _item.setFlags(Qt.ItemIsEnabled)
                    if key == "sets": self.table.setItem(i, 0, _item)
                    elif key == "percentages": self.table.setItem(i, 1, _item)
                    elif key == "weight": self.table.setItem(i, 2, _item)
                    elif key == "number_of_reps":
                        self.table.setItem(i, 3, _item)
                    elif key == "rest":
                        self.table.setItem(i, 4, _item)

        for i in range(7):
            self.table.verticalHeader().setSectionResizeMode(
                i, QHeaderView.Stretch)

        grid = QGridLayout()
        grid_frame = QFrame()
        grid_frame.setObjectName("graphObj")
        grid_frame.setFrameStyle(QFrame.Box)
        grid_frame.setLineWidth(3)
        grid_frame.setStyleSheet("""#graphObj {color: #322d2d;}""")
        grid.addWidget(self.table, 1, 0, 1, 1)
        grid_frame.setLayout(grid)
        return grid_frame
Esempio n. 29
0
class LEDColorWidget(QFrame):
    def __init__(self, parent=None, color=QColor("#00FF00"), title=None):
        QFrame.__init__(self, parent)
        self.color = color
        self.title = title
        self.icon = None
        self.textbox_r = None
        self.textbox_g = None
        self.textbox_b = None

        self.initUI()

    def initUI(self):
        self.setFrameStyle(QFrame.StyledPanel)

        text_frame = QWidget()
        #text_frame.setFrameStyle(QFrame.StyledPanel)
        text_layout = QGridLayout()

        text_layout.addWidget(QLabel(self.title), 0, 0)
        self.icon = QFrame()
        self.icon.setFrameStyle(QFrame.StyledPanel)
        self.icon.setMinimumSize(10, 10)
        if self.color is not None:
            self.icon.setStyleSheet("background-color: " + self.color.name())
        else:
            self.icon.setStyleSheet("background-color: #FF0000")

        text_layout.addWidget(self.icon, 0, 1)

        text_layout.addWidget(QLabel("Red"), 1, 0)
        text_layout.addWidget(QLabel("txt"), 1, 1)
        text_layout.addWidget(QLabel("Green"), 2, 0)
        text_layout.addWidget(QLabel("txt"), 2, 1)
        text_layout.addWidget(QLabel("Blue"), 3, 0)
        text_layout.addWidget(QLabel("txt"), 3, 1)

        text_frame.setLayout(text_layout)

        outer_layout = QVBoxLayout()
        outer_layout.addWidget(text_frame)

        button = QPushButton("Choose Color")
        button.clicked.connect(self.button_click)
        outer_layout.addWidget(button)

        self.setLayout(outer_layout)

    def button_click(self):
        c = QColorDialog.getColor()
        if c is not None and c.isValid():
            print("color chosen", c.name())
            self.color = c
            self.icon.setStyleSheet("background-color: " + c.name())
Esempio n. 30
0
class Start_Window(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(settings.START_WINDOW_WIDTH,
                    settings.START_WINDOW_HEIGHT)  #Устанавливаем размер окна

        self.work_frame = QFrame(self)

        self.create_evening_game_button = QPushButton("Создать игровой вечер")
        self.date_edit = QDateTimeEdit()
        self.ask_date_label = QLabel("Введите дату игрового вечера")

        self.customise()

    def move_to_center(self):
        # Перенесем окошко в центр
        form_rectangle = self.frameGeometry()
        window_center = QDesktopWidget().availableGeometry().center()
        form_rectangle.moveCenter(window_center)
        self.move(form_rectangle.topLeft())

    def customise(self):
        """Метод настраивает виджеты для работы"""
        self.setWindowTitle("Mafia-Driver")  #Название программы
        self.work_frame.setFrameStyle(QFrame.Box)

        self.move_to_center()

        #Внесем текущую дату с компьютера
        now_date = QDate.currentDate()
        now_time = QTime.currentTime()

        self.date_edit.setDate(now_date)
        self.date_edit.setTime(now_time)

        #Перенесем фрейм в центр
        form_horizontalLayout = QHBoxLayout(self)
        form_horizontalLayout.setContentsMargins(settings.START_WINDOW_SHIFT,
                                                 settings.START_WINDOW_SHIFT,
                                                 settings.START_WINDOW_SHIFT,
                                                 settings.START_WINDOW_SHIFT)

        form_horizontalLayout.addWidget(self.work_frame)

        #Настроим макет и виджеты внутри фрейма
        work_frame_horizontallLayout = QHBoxLayout()
        work_frame_veritcallLayout = QVBoxLayout(self.work_frame)

        work_frame_horizontallLayout.addWidget(self.date_edit)
        work_frame_horizontallLayout.addWidget(self.ask_date_label)

        work_frame_veritcallLayout.addLayout(work_frame_horizontallLayout)
        work_frame_veritcallLayout.addWidget(self.create_evening_game_button)
Esempio n. 31
0
    def create_frame_central(self):
        frame = QFrame()
        frame.setFrameStyle(QFrame.StyledPanel)

        layout = QHBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        # layout.addStretch(1)
        layout.addWidget(SpaceFrame(self.main_window, self.controller))
        # layout.addStretch(1)

        frame.setLayout(layout)
        return frame
Esempio n. 32
0
    def create_frame_right(self):
        frame = QFrame()
        frame.setFrameStyle(QFrame.StyledPanel)

        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.addWidget(StarListFrame(self.main_window, self.controller))
        layout.addWidget(ShipListFrame(self.main_window, self.controller))
        layout.addStretch(1)

        frame.setLayout(layout)
        return frame
Esempio n. 33
0
 def _load_ui(self):
     main_layout = QVBoxLayout(self)
     main_layout.addWidget(QLabel(translations.TR_SESSIONS_DIALOG_BODY))
     main_hbox = QHBoxLayout()
     # Session list
     session_layout = QVBoxLayout()
     self._session_list = QTreeWidget()
     self._session_list.setHeaderLabels(["Session", "Last Modified"])
     session_layout.addWidget(self._session_list)
     # Content frame
     content_frame = QFrame()
     content_frame.hide()
     frame_layout = QVBoxLayout(content_frame)
     content_frame.setFrameStyle(QFrame.StyledPanel | QFrame.Sunken)
     session_layout.addWidget(content_frame)
     frame_layout.setContentsMargins(0, 0, 0, 0)
     self._content_list = QTreeWidget()
     self._content_list.setHeaderHidden(True)
     frame_layout.addWidget(self._content_list)
     # Separator line
     line_frame = QFrame()
     line_frame.setFrameStyle(QFrame.VLine | QFrame.Sunken)
     # Buttons
     btn_layout = QVBoxLayout()
     btn_create = QPushButton(translations.TR_SESSIONS_BTN_CREATE)
     btn_activate = QPushButton(translations.TR_SESSIONS_BTN_ACTIVATE)
     btn_update = QPushButton(translations.TR_SESSIONS_BTN_UPDATE)
     btn_delete = QPushButton(translations.TR_SESSIONS_BTN_DELETE)
     btn_details = QPushButton(translations.TR_SESSIONS_BTN_DETAILS)
     btn_details.setCheckable(True)
     # Add buttons to layout
     btn_layout.addWidget(btn_create)
     btn_layout.addWidget(btn_activate)
     btn_layout.addWidget(btn_update)
     btn_layout.addWidget(btn_delete)
     btn_layout.addStretch()
     btn_layout.addWidget(btn_details)
     # Add widgets and layouts to the main layout
     main_layout.addLayout(main_hbox)
     main_hbox.addLayout(session_layout)
     main_hbox.addWidget(line_frame)
     main_hbox.addLayout(btn_layout)
     main_hbox.setSizeConstraint(QLayout.SetFixedSize)
     btn_details.toggled[bool].connect(content_frame.setVisible)
     # Connections
     self._session_list.itemSelectionChanged.connect(
         self.load_session_content)
     btn_activate.clicked.connect(self.open_session)
     btn_update.clicked.connect(self.save_session)
     btn_create.clicked.connect(self.create_session)
     btn_delete.clicked.connect(self.delete_session)
Esempio n. 34
0
 def _createStatePlotWidget(self):        
     self._statePlotWidget = QWidget()
     self._statePlotFigure = Figure()
     self._statePlotCanvas = FigureCanvas(self._statePlotFigure)
     self._statePlotCanvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
     self._statePlotCanvas.updateGeometry()
     self._statePlotCanvas.setParent(self._statePlotWidget)
     self._statePlotFigure.set_canvas(self._statePlotCanvas)
     self._statePlotFigure.subplots_adjust(hspace=0.5)
     self._statePlotAxes = self._statePlotFigure.add_subplot(2,1,1, title='State plot')
     self._state_plot, = self._statePlotAxes.plot([], [], label='state')
     self._activationParamAxes = self._statePlotFigure.add_subplot(2,1,2, title='H-H activation parameters vs time')
     self._activationParamAxes.set_xlabel('Time (ms)')
     #for axis in self._plotFigure.axes:
     #    axis.autoscale(False)
     self._stateplot_xvar_label = QLabel('Variable on X-axis')
     self._stateplot_xvar_combo = QComboBox()
     self._stateplot_xvar_combo.addItems(['V', 'm', 'n', 'h'])
     self._stateplot_xvar_combo.setCurrentText('V')
     self._stateplot_xvar_combo.setEditable(False)
     self._stateplot_xvar_combo.currentIndexChanged[str].connect( self._statePlotXSlot )
     self._stateplot_yvar_label = QLabel('Variable on Y-axis')
     self._stateplot_yvar_combo = QComboBox()
     self._stateplot_yvar_combo.addItems(['V', 'm', 'n', 'h'])
     self._stateplot_yvar_combo.setCurrentIndex(2)
     self._stateplot_yvar_combo.setEditable(False)
     self._stateplot_yvar_combo.currentIndexChanged[str].connect(self._statePlotYSlot)
     self._statePlotNavigator = NavigationToolbar(self._statePlotCanvas, self._statePlotWidget)
     frame = QFrame()
     frame.setFrameStyle(QFrame.StyledPanel + QFrame.Raised)
     layout = QHBoxLayout()
     layout.addWidget(self._stateplot_xvar_label)
     layout.addWidget(self._stateplot_xvar_combo)
     layout.addWidget(self._stateplot_yvar_label)
     layout.addWidget(self._stateplot_yvar_combo)
     frame.setLayout(layout)
     self._closeStatePlotAction = QAction('Close', self)
     self._closeStatePlotAction.triggered.connect(self._statePlotWidget.close)
     self._closeStatePlotButton = QToolButton()
     self._closeStatePlotButton.setDefaultAction(self._closeStatePlotAction)
     layout = QVBoxLayout()
     layout.addWidget(frame)
     layout.addWidget(self._statePlotCanvas)
     layout.addWidget(self._statePlotNavigator)
     layout.addWidget(self._closeStatePlotButton)
     self._statePlotWidget.setLayout(layout)  
     # Setting the close event so that when the help window is
     # closed the ``State plot`` button becomes unchecked
     self._statePlotWidget.closeEvent = lambda event: self._showStatePlotAction.setChecked(False)
Esempio n. 35
0
 def _createHelpMessage(self):
     if hasattr(self, '_helpWindow'):
         return
     self._helpWindow = QWidget()
     self._helpWindow.setWindowFlags(QtCore.Qt.Window)
     layout = QVBoxLayout()
     self._helpWindow.setLayout(layout)
     self._helpMessageArea = QScrollArea()
     self._helpMessageText = QTextBrowser()
     self._helpMessageText.setOpenExternalLinks(True)
     self._helpMessageArea.setWidget(self._helpMessageText)
     layout.addWidget(self._helpMessageText)
     self._squidGuiPath = os.path.dirname(os.path.abspath(__file__))
     self._helpBaseURL = os.path.join(self._squidGuiPath,'help.html')
     self._helpMessageText.setSource(QtCore.QUrl(self._helpBaseURL))
     self._helpMessageText.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
     self._helpMessageArea.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
     self._helpMessageText.setMinimumSize(800, 600)
     self._closeHelpAction = QAction('Close', self)
     self._closeHelpAction.triggered.connect(self._helpWindow.close)        
     # Setting the close event so that the ``Help`` button is
     # unchecked when the help window is closed
     self._helpWindow.closeEvent = lambda event: self._helpAction.setChecked(False)
     self._helpTOCAction = QAction('Help running demo', self)
     self._helpTOCAction.triggered.connect( self._jumpToHelpTOC)                
     # This panel is for putting two buttons using horizontal
     # layout
     panel = QFrame()
     panel.setFrameStyle(QFrame.StyledPanel + QFrame.Raised)
     layout.addWidget(panel)
     layout = QHBoxLayout()
     panel.setLayout(layout)
     self._helpAction = QAction('Help running', self)
     self._helpAction.triggered.connect(self._showRunningHelp)
     self._helpBiophysicsAction = QAction('Help biophysics', self)
     self._helpBiophysicsAction.triggered.connect(self._showBioPhysicsHelp)
     self._helpTOCButton = QToolButton()
     self._helpTOCButton.setDefaultAction(self._helpTOCAction)
     self._helpBiophysicsButton = QToolButton()
     self._helpBiophysicsButton.setDefaultAction(self._helpBiophysicsAction)
     layout.addWidget(self._helpTOCButton)
     layout.addWidget(self._helpBiophysicsButton)
     self._closeHelpButton = QToolButton()
     self._closeHelpButton.setDefaultAction(self._closeHelpAction)
     layout.addWidget(self._closeHelpButton)
Esempio n. 36
0
    def _initialize(self):
        """Delayed initialization of the widget for quicker start of application
        """
        # central widget
        wdg = QWidget(self)
        self.setWidget(wdg)

        # vertical layout
        vertLayout = QVBoxLayout(wdg)
        vertLayout.setContentsMargins(0, 0, 0, 0)
        vertLayout.setSpacing(3)

        # combo
        self._comboBox = ComboBox(self)
        vertLayout.addWidget(self._comboBox)

        # hline
        hline = QFrame(self)
        hline.setFrameStyle(QFrame.HLine | QFrame.Sunken)
        vertLayout.addWidget(hline)

        # files view
        self._tree = Tree(self)
        vertLayout.addWidget(self._tree)

        # cd up button
        self._aCdUp = QAction(QIcon(':enkiicons/go-up.png'),
                              self.tr("Up"),
                              self)
        self.titleBarWidget().addAction(self._aCdUp)
        self._aCdUp.triggered.connect(self.moveUp)

        # redirirect focus proxy
        self.setFocusProxy(self._tree)

        self._smartRecents = SmartRecents(self)
        self._smartHistory = SmartHistory(self)

        self.setCurrentPath(core.project().path() or _getCurDir())
        core.actionManager().action('mNavigation/mFileBrowser').setVisible(True)
Esempio n. 37
0
class ParameterContainer(QWidget, object):
    """Container to hold Parameter Widgets."""

    def __init__(
            self,
            parameters=None,
            description_text='',
            extra_parameters=None,
            parent=None,
            vertical=True):
        """Constructor

        .. versionadded:: 2.2

        :param parameters: List of Parameter Widget
        :type parameters: list

        :param description_text: Text for description of the parameter
            container.
        :type description_text: str

        """
        super().__init__(parent)
        # attributes
        if not parameters:
            self.parameters = []
        else:
            self.parameters = parameters
        self.description_text = description_text
        self.extra_parameters = extra_parameters
        self.parent = parent
        self.validators = []
        self.validators_kwargs = []

        # UI
        if vertical:
            self.vertical_layout = QVBoxLayout()
        else:
            self.vertical_layout = QHBoxLayout()
        self.widget = QWidget()
        self.description_label = QLabel()
        self.description_label.setWordWrap(True)
        self.scroll_area = QScrollArea()
        self.group_frame = QFrame()
        self.qt5_parameter_factory = Qt5ParameterFactory()
        self.main_layout = QGridLayout()

# NOTES(IS) : These functions are commented since the architecture is not
    #  ready yet.
    # def register_widget(self, parameter, parameter_widget):
    #     """Register new custom widget.
    #
    #     :param parameter:
    #     :type parameter: GenericParameter
    #
    #     :param parameter_widget:
    #     :type parameter_widget: GenericParameterWidget
    #     """
    #     self.qt5_parameter_factory.register_widget(
    # parameter, parameter_widget)
    #
    # def remove_widget(self, parameter):
    #     """Register new custom widget.
    #
    #     :param parameter:
    #     :type parameter: GenericParameter
    #     """
    #     if parameter.__name__ in self.dict_widget.keys():
    #         self.dict_widget.pop(parameter.__name__)

    def get_parameters(self, validate=True):
        """Return list of parameters from the current state of widget.

        :param validate: If true, run validator, else no.
        :type validate: bool

        :returns: List of parameter
        :rtype: list
        """
        if validate:
            validation_result = self.validate()
            if not validation_result['valid']:
                raise InvalidValidationException(validation_result['message'])

        parameter_widgets = self.get_parameter_widgets()

        parameters = []

        for widget_item in parameter_widgets:
            parameter_widget = widget_item.widget()

            parameter = parameter_widget.get_parameter()
            parameters.append(parameter)

        # returns based on the object type of self.parameters
        if isinstance(self.parameters, list):
            return parameters
        else:
            # just return single parameter
            return parameters[0]

    def get_parameter_widgets(self):
        """Return list of parameter widgets from the current state of widget.

        :returns: List of parameter widget
        :rtype: list
        """

        parameter_widgets = [self.vertical_layout.itemAt(i) for i in range(
            self.vertical_layout.count())]

        return parameter_widgets

    def setup_ui(self, must_scroll=True):
        """Setup the UI of this parameter container.
        """
        # Vertical layout to place the parameter widgets
        self.vertical_layout.setContentsMargins(0, 0, 0, 0)
        self.vertical_layout.setSpacing(0)

        # Widget to hold the vertical layout
        self.widget = QWidget()
        self.widget.setLayout(self.vertical_layout)

        # Label for description
        self.description_label.setText(self.description_text)

        self.group_frame.setLineWidth(0)
        self.group_frame.setFrameStyle(QFrame.NoFrame)
        vlayout = QVBoxLayout()
        vlayout.setContentsMargins(0, 0, 0, 0)
        vlayout.setSpacing(0)
        self.group_frame.setLayout(vlayout)

        if must_scroll:
            vlayout.addWidget(self.scroll_area)
            self.scroll_area.setWidgetResizable(True)
            self.scroll_area.setWidget(self.widget)
        else:
            vlayout.addWidget(self.widget)

        # Main layout of the container
        if self.description_text:
            self.main_layout.addWidget(self.description_label)
        self.main_layout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(self.main_layout)

        self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.MinimumExpanding)

        if not isinstance(self.parameters, list):
            parameters = [self.parameters]
        else:
            parameters = self.parameters

        if len(parameters) == 0:
            self.set_empty_parameters()
            return

        self.main_layout.addWidget(self.group_frame)

        self.qt5_parameter_factory = Qt5ParameterFactory()
        if self.extra_parameters is not None:
            for extra_parameter in self.extra_parameters:
                if (type(extra_parameter) == tuple and
                        len(extra_parameter) == 2):
                    self.qt5_parameter_factory.register_widget(
                        extra_parameter[0], extra_parameter[1])

        for parameter in parameters:
            parameter_widget = self.qt5_parameter_factory.get_widget(parameter)
            parameter_widget.setAutoFillBackground(True)
            self.vertical_layout.addWidget(parameter_widget)

        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)

    def set_description(self, description):
        """Set description of the parameter container.

        :param description: A new description fot the parameter container.
        :type description: str
        """
        self.description_text = description
        self.description_label.setText(self.description_text)

    def set_empty_parameters(self):
        """Update UI if there is no parameters in the container.
        """
        new_description = self.description_text
        new_description += '\n'
        new_description += 'But, currently there is no parameters available.'
        self.description_label.setText(new_description)

    def add_validator(self, validator, **kwargs):
        """Add validator for this parameter container.

        :param validator: validator function for this parameter container.
        :type validator: function
        """
        validator.parent = self
        self.validators.append(validator)
        if kwargs:
            self.validators_kwargs.append(kwargs)
        else:
            self.validators_kwargs.append({})

    def validate(self):
        """Validate of all rule for all parameter in this container.

        :return: True if all valid, False
        :rtype: dict
        """
        for i in range(len(self.validators)):
            validator = self.validators[i]
            validator_kwargs = self.validators_kwargs[i]
            validation_result = validator(self, **validator_kwargs)
            if not validation_result['valid']:
                return validation_result

        return {
            'valid': True,
            'message': ''
        }

    def get_parameter_by_guid(self, parameter_guid):
        """Return a parameter based on its uuid

        :param parameter_guid: The parameter uuid
        :type parameter_guid: str

        :returns: The parameter or None if not exist
        :rtype: GenericParameter, None
        """
        parameters = self.get_parameters(validate=False)
        for parameter in parameters:
            if parameter.guid == parameter_guid:
                return parameter
        return None

    def get_parameter_widget_by_guid(self, parameter_guid):
        """Return a parameter widget based on its uuid

        :param parameter_guid: The parameter uuid
        :type parameter_guid: str

        :returns: The parameter widget or None if not exist
        :rtype: GenericParameterWidget, None
        """
        parameter_widgets = self.get_parameter_widgets()
        for parameter_widget in parameter_widgets:
            if (parameter_widget.widget().get_parameter().guid ==
                    parameter_guid):
                return parameter_widget.widget()
        return None
Esempio n. 38
0
    def __init__(self, settings):
        super(QWidget, self).__init__()
        self._layout = QBoxLayout(QBoxLayout.TopToBottom)
        self.setLayout(self._layout)
        self.settings = settings
        self.metrics = QFontMetrics(QApplication.font())

        self.characters = self.settings.get_value('characters', None)
        if self.characters is None:
            self.characters = {}

        # select or add new character
        widget = QWidget()
        layout = QBoxLayout(QBoxLayout.LeftToRight)
        widget.setLayout(layout)
        label = QLabel("Select Character To Edit:")
        layout.addWidget(label, 0)
        combo = QComboBox()
        self._combo_character = combo
        self._combo_character.currentIndexChanged.connect(self._combo_changed)
        layout.addWidget(combo, 1)
        label = QLabel(" or ")
        layout.addWidget(label, 0)
        button = QPushButton("Add New")
        button.clicked.connect(self._new_character_mode_on)
        self._add_button = button
        layout.addWidget(button, 0)
        self._layout.addWidget(widget, 1)

        # start of frame
        frame = QFrame()
        frame.setFrameShadow(QFrame.Sunken)
        frame.setFrameStyle(QFrame.Box)

        frame_layout = QBoxLayout(QBoxLayout.TopToBottom)
        frame.setLayout(frame_layout)

        # name and level
        widget = QWidget()
        layout = QBoxLayout(QBoxLayout.LeftToRight)
        widget.setLayout(layout)
        label = QLabel("Name:")
        layout.addWidget(label, 0)
        text = QLineEdit()
        text.setMaxLength(20)
        text.setMinimumWidth(self.metrics.width("8888888888888888888888"))
        self._name = text
        self._name.textChanged.connect(self._name_changed)
        layout.addWidget(text, 1)
        label = QLabel("Level:")
        layout.addWidget(label, 0)
        text = QLineEdit()
        text.setMaxLength(3)
        text.setMinimumWidth(self.metrics.width("88888"))
        self._level = text
        self._level.editingFinished.connect(self._level_editing_finished)
        layout.addWidget(text, 1)
        frame_layout.addWidget(widget, 1)

        # logfile
        widget = QWidget()
        layout = QBoxLayout(QBoxLayout.LeftToRight)
        widget.setLayout(layout)
        label = QLabel("Log File:")
        layout.addWidget(label, 0)
        text = QLineEdit()
        text.setEnabled(False)
        self._log_file = text
        layout.addWidget(text, 1)
        button = QPushButton("Browse...")
        self._button_browse = button
        self._button_browse.clicked.connect(self._get_log_file)
        layout.addWidget(button, 0)
        frame_layout.addWidget(widget, 1)

        # delete or save buttons
        widget = QWidget()
        layout = QBoxLayout(QBoxLayout.LeftToRight)
        widget.setLayout(layout)
        button = QPushButton("Save")
        button.clicked.connect(self._save_new)
        layout.addWidget(button, 0, Qt.AlignRight)
        button = QPushButton("Delete")
        self._button_delete = button
        self._button_delete.clicked.connect(self._button_delete_clicked)
        layout.addWidget(button, 0, Qt.AlignRight)
        frame_layout.addWidget(widget, 0, Qt.AlignRight)

        # end of frame
        self._layout.addWidget(frame, 1)

        # spacing at bottom of window
        widget = QWidget()
        self._layout.addWidget(widget, 1)

        # setup
        self._new_character_mode_off()
        self._update_combo_character()
        if self.settings.get_value('general', 'eq_directory') is not None:
            log_directory = os.path.join(self.settings.get_value('general', 'eq_directory'), 'logs/')
            self._log_directory = log_directory
            if os.path.exists(log_directory):
                self._log_files = [log.lower() for log in os.listdir(log_directory) if 'eqlog' in log[:5]]
Esempio n. 39
0
    def __initUI__(self):
        self.setWindowTitle('Weather Stations Browser')
        self.setWindowIcon(icons.get_icon('master'))
        self.setWindowFlags(Qt.Window)

        now = datetime.now()

        # ---- Tab Widget Search

        # ---- Proximity filter groupbox

        label_Lat = QLabel('Latitude :')
        label_Lat2 = QLabel('North')

        self.lat_spinBox = QDoubleSpinBox()
        self.lat_spinBox.setAlignment(Qt.AlignCenter)
        self.lat_spinBox.setSingleStep(0.1)
        self.lat_spinBox.setValue(0)
        self.lat_spinBox.setMinimum(0)
        self.lat_spinBox.setMaximum(180)
        self.lat_spinBox.setSuffix(u' °')
        self.lat_spinBox.valueChanged.connect(self.proximity_grpbox_toggled)

        label_Lon = QLabel('Longitude :')
        label_Lon2 = QLabel('West')

        self.lon_spinBox = QDoubleSpinBox()
        self.lon_spinBox.setAlignment(Qt.AlignCenter)
        self.lon_spinBox.setSingleStep(0.1)
        self.lon_spinBox.setValue(0)
        self.lon_spinBox.setMinimum(0)
        self.lon_spinBox.setMaximum(180)
        self.lon_spinBox.setSuffix(u' °')
        self.lon_spinBox.valueChanged.connect(self.proximity_grpbox_toggled)

        self.radius_SpinBox = QComboBox()
        self.radius_SpinBox.addItems(['25 km', '50 km', '100 km', '200 km'])
        self.radius_SpinBox.currentIndexChanged.connect(
                self.search_filters_changed)

        prox_search_grid = QGridLayout()
        row = 0
        prox_search_grid.addWidget(label_Lat, row, 1)
        prox_search_grid.addWidget(self.lat_spinBox, row, 2)
        prox_search_grid.addWidget(label_Lat2, row, 3)
        row += 1
        prox_search_grid.addWidget(label_Lon, row, 1)
        prox_search_grid.addWidget(self.lon_spinBox, row, 2)
        prox_search_grid.addWidget(label_Lon2, row, 3)
        row += 1
        prox_search_grid.addWidget(QLabel('Search Radius :'), row, 1)
        prox_search_grid.addWidget(self.radius_SpinBox, row, 2)

        prox_search_grid.setColumnStretch(0, 100)
        prox_search_grid.setColumnStretch(4, 100)
        prox_search_grid.setRowStretch(row+1, 100)
        prox_search_grid.setHorizontalSpacing(20)
        prox_search_grid.setContentsMargins(10, 10, 10, 10)  # (L, T, R, B)

        self.prox_grpbox = QGroupBox("Proximity filter :")
        self.prox_grpbox.setCheckable(True)
        self.prox_grpbox.setChecked(False)
        self.prox_grpbox.toggled.connect(self.proximity_grpbox_toggled)
        self.prox_grpbox.setLayout(prox_search_grid)

        # ---- Province filter

        prov_names = ['All']
        prov_names.extend(self.PROV_NAME)
        self.prov_widg = QComboBox()
        self.prov_widg.addItems(prov_names)
        self.prov_widg.setCurrentIndex(0)
        self.prov_widg.currentIndexChanged.connect(self.search_filters_changed)

        layout = QGridLayout()
        layout.addWidget(self.prov_widg, 2, 1)
        layout.setColumnStretch(2, 100)
        layout.setVerticalSpacing(10)

        prov_grpbox = QGroupBox("Province filter :")
        prov_grpbox.setLayout(layout)

        # ---- Data availability filter

        # Number of years with data

        self.nbrYear = QSpinBox()
        self.nbrYear.setAlignment(Qt.AlignCenter)
        self.nbrYear.setSingleStep(1)
        self.nbrYear.setMinimum(0)
        self.nbrYear.setValue(3)
        self.nbrYear.valueChanged.connect(self.search_filters_changed)

        subgrid1 = QGridLayout()
        subgrid1.addWidget(self.nbrYear, 0, 0)
        subgrid1.addWidget(QLabel('years of data between'), 0, 1)

        subgrid1.setHorizontalSpacing(10)
        subgrid1.setContentsMargins(0, 0, 0, 0)  # (L, T, R, B)
        subgrid1.setColumnStretch(2, 100)

        # Year range

        self.minYear = QSpinBox()
        self.minYear.setAlignment(Qt.AlignCenter)
        self.minYear.setSingleStep(1)
        self.minYear.setMinimum(1840)
        self.minYear.setMaximum(now.year)
        self.minYear.setValue(1840)
        self.minYear.valueChanged.connect(self.minYear_changed)

        label_and = QLabel('and')
        label_and.setAlignment(Qt.AlignCenter)

        self.maxYear = QSpinBox()
        self.maxYear.setAlignment(Qt.AlignCenter)
        self.maxYear.setSingleStep(1)
        self.maxYear.setMinimum(1840)
        self.maxYear.setMaximum(now.year)
        self.maxYear.setValue(now.year)
        self.maxYear.valueChanged.connect(self.maxYear_changed)

        subgrid2 = QGridLayout()
        subgrid2.addWidget(self.minYear, 0, 0)
        subgrid2.addWidget(label_and, 0, 1)
        subgrid2.addWidget(self.maxYear, 0, 2)

        subgrid2.setHorizontalSpacing(10)
        subgrid2.setContentsMargins(0, 0, 0, 0)  # (L, T, R, B)
        subgrid2.setColumnStretch(4, 100)

        # Subgridgrid assembly

        grid = QGridLayout()

        grid.addWidget(QLabel('Search for stations with at least'), 0, 0)
        grid.addLayout(subgrid1, 1, 0)
        grid.addLayout(subgrid2, 2, 0)

        grid.setVerticalSpacing(5)
        grid.setRowStretch(0, 100)
        # grid.setContentsMargins(0, 0, 0, 0)  # (L, T, R, B)

        self.year_widg = QGroupBox("Data Availability filter :")
        self.year_widg.setLayout(grid)

        # ---- Toolbar

        self.btn_addSta = btn_addSta = QPushButton('Add')
        btn_addSta.setIcon(icons.get_icon('add2list'))
        btn_addSta.setIconSize(icons.get_iconsize('small'))
        btn_addSta.setToolTip('Add selected found weather stations to the '
                              'current list of weather stations.')
        btn_addSta.clicked.connect(self.btn_addSta_isClicked)

        btn_save = QPushButton('Save')
        btn_save.setIcon(icons.get_icon('save'))
        btn_save.setIconSize(icons.get_iconsize('small'))
        btn_save.setToolTip('Save current found stations info in a csv file.')
        btn_save.clicked.connect(self.btn_save_isClicked)

        self.btn_fetch = btn_fetch = QPushButton('Fetch')
        btn_fetch.setIcon(icons.get_icon('refresh'))
        btn_fetch.setIconSize(icons.get_iconsize('small'))
        btn_fetch.setToolTip("Updates the climate station database by"
                             " fetching it again from the ECCC ftp server.")
        btn_fetch.clicked.connect(self.btn_fetch_isClicked)

        toolbar_grid = QGridLayout()
        toolbar_widg = QWidget()

        for col, btn in enumerate([btn_addSta, btn_save, btn_fetch]):
            toolbar_grid.addWidget(btn, 0, col+1)

        toolbar_grid.setColumnStretch(toolbar_grid.columnCount(), 100)
        toolbar_grid.setSpacing(5)
        toolbar_grid.setContentsMargins(0, 30, 0, 0)  # (L, T, R, B)

        toolbar_widg.setLayout(toolbar_grid)

        # ---- Left Panel

        panel_title = QLabel('<b>Weather Station Search Criteria :</b>')

        left_panel = QFrame()
        left_panel_grid = QGridLayout()

        left_panel_grid.addWidget(panel_title, 0, 0)
        left_panel_grid.addWidget(self.prox_grpbox, 1, 0)
        left_panel_grid.addWidget(prov_grpbox, 2, 0)
        left_panel_grid.addWidget(self.year_widg, 3, 0)
        left_panel_grid.setRowStretch(4, 100)
        left_panel_grid.addWidget(toolbar_widg, 5, 0)

        left_panel_grid.setVerticalSpacing(20)
        left_panel_grid.setContentsMargins(0, 0, 0, 0)   # (L, T, R, B)
        left_panel.setLayout(left_panel_grid)

        # ----- Main grid

        # Widgets

        vLine1 = QFrame()
        vLine1.setFrameStyle(StyleDB().VLine)

        # Grid

        main_layout = QGridLayout(self)

        main_layout.addWidget(left_panel, 0, 0)
        main_layout.addWidget(vLine1, 0, 1)
        main_layout.addWidget(self.station_table, 0, 2)
        main_layout.addWidget(self.waitspinnerbar, 0, 2)

        main_layout.setContentsMargins(10, 10, 10, 10)  # (L,T,R,B)
        main_layout.setRowStretch(0, 100)
        main_layout.setHorizontalSpacing(15)
        main_layout.setVerticalSpacing(5)
        main_layout.setColumnStretch(col, 100)
Esempio n. 40
0
    def etiquette(self):
        select = self.canvas.select
        etiquette = select.etiquette if select.etiquette is not None else select
        old = {'mode': etiquette.style("mode"), 'texte': etiquette.texte}

        # ----------------
        # Cas particuliers
        # ----------------

        if isinstance(select, Champ):
            if select.style('choix'):
                choix = select.style('choix')
                try:
                    index = choix.index(select.texte)
                except ValueError:
                    index = 0
                text, ok = QInputDialog.getItem(self.canvas, "Choisir une valeur",
                                "Réponse :", choix, index, False)
            else:
                text, ok = QInputDialog.getText(self.canvas, "Éditer le champ",
                            "Réponse :", QLineEdit.Normal, select.texte)
            if ok:
                select.label(text)
            return

        # -----------
        # Cas général
        # -----------

        dlg = QDialog(self.canvas)
        dlg.setWindowTitle("Changer la légende de l'objet (texte quelconque)")

        sizer = QVBoxLayout()
        sizer.addWidget(QLabel("Note: le code LATEX doit etre entre $$. Ex: $\\alpha$"))

        dlg.text = QTextEdit(dlg)
        dlg.text.setPlainText(etiquette.texte)
        dlg.setMinimumSize(300, 50)
        sizer.addWidget(dlg.text)

        dlg.cb = QCheckBox("Interpréter la formule", dlg)
        dlg.cb.setChecked(select.mode_affichage == 'formule')
        sizer.addWidget(dlg.cb)

        line = QFrame(self)
        line.setFrameStyle(QFrame.HLine)
        sizer.addWidget(line)

        box = QHBoxLayout()
        btn = QPushButton('OK')
        btn.clicked.connect(dlg.accept)
        box.addWidget(btn)
        box.addStretch(1)
        btn = QPushButton("Annuler")
        btn.clicked.connect(dlg.reject)
        box.addWidget(btn)
        sizer.addLayout(box)

        dlg.setLayout(sizer)
        dlg.setWindowModality(Qt.WindowModal)

        while True:
            ok = dlg.exec_()
            if ok:
                try:
                    nom = select.nom
                    txt = repr(dlg.text.toPlainText())
                    mode = repr('formule' if dlg.cb.isChecked() else 'texte')
                    self.executer("%s.label(%s, %s)" %(nom, txt, mode))
                except:
                    # Au cas où une formule incorrecte fasse buguer l'affichage (?)
                    etiquette.texte = old['texte']
                    etiquette.style(mode=old['mode'])
                    print_error()
                    continue
            else:
                etiquette.texte = old['texte']
                etiquette.style(mode=old['mode'])
            break
Esempio n. 41
0
class SplendorWindow(QWidget):
    def __init__(self):
        super(SplendorWindow, self).__init__()
        self.setWindowTitle("Splendor")
        self.resize(950, 670)

        self.board = SplendorBoard()
        layout = QGridLayout()
        self.game_table = SplendorTable()
        layout_cards = QGridLayout()
        layout_chips = QGridLayout()
        layout_lords = QGridLayout()
        scoreLcd = QLCDNumber(2)
        scoreLcd.setSegmentStyle(QLCDNumber.Filled)

        layout.addWidget(self.createLabel("Name: "), 0, 0)
        layout.addWidget(self.createLabel("Sandy"), 0, 1)
        layout.addWidget(self.createLabel("Score: "), 0, 2)
        layout.addWidget(scoreLcd, 0, 3)

        self.frame_cards = QFrame()
        self.frame_cards.setFrameStyle(QFrame.Box | QFrame.Raised)
        self.frame_cards.setLayout(layout_cards)

        self.frame_chips = QFrame()
        self.frame_chips.setFrameStyle(QFrame.Box | QFrame.Raised)
        frame_lords = QFrame()
        frame_lords.setFrameStyle(QFrame.Box | QFrame.Raised)

        layout.addWidget(self.frame_cards, 2, 0, 4, 5)
        layout.addWidget(self.frame_chips, 2, 6, 4, 2)
        #layout.addWidget(frame_lords, 2, 10)

        self.frame_chips.setLayout(layout_chips)
        frame_lords.setLayout(layout_lords)

        for r in (0, 4, 8):
            row = self.game_table.state[int(r / 4)]
            bord_line_cards = []
            indent = 0
            for i in range(4):
                card = row[i]
                bord_line_cards.append(self.createCardSelector(card, self.frame_cards))

                layout_cards.addWidget(self.createCard(card, self.frame_cards), 0 + r, indent, 3, 2)
                layout_cards.addWidget(bord_line_cards[i], 3 + r, indent)
                indent += 2
        self.setLayout(layout)

        rr = 0
        for r in (0, 2, 4):
            row = self.game_table.state[int(r / 2)]
            bord_line_chips = []
            indent = 0
            for i in range(2):
                chip = row[4 + i]
                bord_line_chips.append(self.createChipSelector(chip, self.frame_chips))

                layout_chips.addWidget(self.createChip(chip, self.frame_chips), 0 + rr, 0, 4, 2)
                layout_chips.addWidget(bord_line_chips[i], 2 + rr, 0)
                rr += 2
        self.setLayout(layout)

    def customEvent(self, event):
        if event.type() is NotifyParent.idType:
            print("NotifyParent")

    def mousePressEvent1(self, event):
        print("Main Widget Mouse Press")
        super(QWidget, self).mousePressEvent(event)

    def createLabel(self, text):
        lbl = QLabel(text)
        lbl.setAlignment(Qt.AlignHCenter | Qt.AlignTop)
        lbl.setFrameStyle(QFrame.Box | QFrame.Raised)

        return lbl

    def createCard(self, card, parent):
        btn = ColourLabel(card, parent)
        return btn

    def createChip(self, chip, parent):
        btn = ColourChip(chip, parent)
        return btn

    def createCardSelector(self, card, parent):
        btn = QRadioButton(None, parent)
        btn.setChecked(False)
        btn.setAutoExclusive(True)
        return btn

    def createChipSelector(slef, chip, parent):
        btn = QCheckBox(parent)
        btn.setChecked(False)
        return btn
Esempio n. 42
0
    def __init_scalesTabWidget__(self):

        class QRowLayout(QGridLayout):
            def __init__(self, items, parent=None):
                super(QRowLayout, self).__init__(parent)

                for col, item in enumerate(items):
                    self.addWidget(item, 0, col)

                self.setContentsMargins(0, 0, 0, 0)
                self.setColumnStretch(0, 100)

        # ---- Time axis properties

        # Generate the widgets :

        self.date_start_widget = QDateEdit()
        self.date_start_widget.setDisplayFormat('01 / MM / yyyy')
        self.date_start_widget.setAlignment(Qt.AlignCenter)
        self.date_start_widget.dateChanged.connect(self.layout_changed)

        self.date_end_widget = QDateEdit()
        self.date_end_widget.setDisplayFormat('01 / MM / yyyy')
        self.date_end_widget.setAlignment(Qt.AlignCenter)
        self.date_end_widget.dateChanged.connect(self.layout_changed)

        self.time_scale_label = QComboBox()
        self.time_scale_label.setEditable(False)
        self.time_scale_label.setInsertPolicy(QComboBox.NoInsert)
        self.time_scale_label.addItems(['Month', 'Year'])
        self.time_scale_label.setCurrentIndex(0)
        self.time_scale_label.currentIndexChanged.connect(self.layout_changed)

        self.dateDispFreq_spinBox = QSpinBox()
        self.dateDispFreq_spinBox.setSingleStep(1)
        self.dateDispFreq_spinBox.setMinimum(1)
        self.dateDispFreq_spinBox.setMaximum(100)
        self.dateDispFreq_spinBox.setValue(
            self.hydrograph.date_labels_pattern)
        self.dateDispFreq_spinBox.setAlignment(Qt.AlignCenter)
        self.dateDispFreq_spinBox.setKeyboardTracking(False)
        self.dateDispFreq_spinBox.valueChanged.connect(self.layout_changed)

        # Setting up the layout :

        widget_time_scale = QFrame()
        widget_time_scale.setFrameStyle(0)
        grid_time_scale = QGridLayout()

        GRID = [[QLabel('From :'), self.date_start_widget],
                [QLabel('To :'), self.date_end_widget],
                [QLabel('Scale :'), self.time_scale_label],
                [QLabel('Date Disp. Pattern:'),
                 self.dateDispFreq_spinBox]]

        for i, ROW in enumerate(GRID):
            grid_time_scale.addLayout(QRowLayout(ROW), i, 1)

        grid_time_scale.setVerticalSpacing(5)
        grid_time_scale.setContentsMargins(10, 10, 10, 10)

        widget_time_scale.setLayout(grid_time_scale)

        # ----- Water level axis properties

        # Widget :

        self.waterlvl_scale = QDoubleSpinBox()
        self.waterlvl_scale.setSingleStep(0.05)
        self.waterlvl_scale.setMinimum(0.05)
        self.waterlvl_scale.setSuffix('  m')
        self.waterlvl_scale.setAlignment(Qt.AlignCenter)
        self.waterlvl_scale.setKeyboardTracking(False)
        self.waterlvl_scale.valueChanged.connect(self.layout_changed)
        self.waterlvl_scale.setFixedWidth(100)

        self.waterlvl_max = QDoubleSpinBox()
        self.waterlvl_max.setSingleStep(0.1)
        self.waterlvl_max.setSuffix('  m')
        self.waterlvl_max.setAlignment(Qt.AlignCenter)
        self.waterlvl_max.setMinimum(-1000)
        self.waterlvl_max.setMaximum(1000)
        self.waterlvl_max.setKeyboardTracking(False)
        self.waterlvl_max.valueChanged.connect(self.layout_changed)
        self.waterlvl_max.setFixedWidth(100)

        self.NZGridWL_spinBox = QSpinBox()
        self.NZGridWL_spinBox.setSingleStep(1)
        self.NZGridWL_spinBox.setMinimum(1)
        self.NZGridWL_spinBox.setMaximum(50)
        self.NZGridWL_spinBox.setValue(self.hydrograph.NZGrid)
        self.NZGridWL_spinBox.setAlignment(Qt.AlignCenter)
        self.NZGridWL_spinBox.setKeyboardTracking(False)
        self.NZGridWL_spinBox.valueChanged.connect(self.layout_changed)
        self.NZGridWL_spinBox.setFixedWidth(100)

        self.datum_widget = QComboBox()
        self.datum_widget.addItems(['Ground Surface', 'Sea Level'])
        self.datum_widget.currentIndexChanged.connect(self.layout_changed)

        # Layout :

        subgrid_WLScale = QGridLayout()

        GRID = [[QLabel('Minimum :'), self.waterlvl_max],
                [QLabel('Scale :'), self.waterlvl_scale],
                [QLabel('Grid Divisions :'), self.NZGridWL_spinBox],
                [QLabel('Datum :'), self.datum_widget]]

        for i, ROW in enumerate(GRID):
            subgrid_WLScale.addLayout(QRowLayout(ROW), i, 1)

        subgrid_WLScale.setVerticalSpacing(5)
        subgrid_WLScale.setContentsMargins(10, 10, 10, 10)  # (L, T, R, B)

        WLScale_widget = QFrame()
        WLScale_widget.setFrameStyle(0)
        WLScale_widget.setLayout(subgrid_WLScale)

        # ---- Weather Axis

        # Widgets :

        self.Ptot_scale = QSpinBox()
        self.Ptot_scale.setSingleStep(5)
        self.Ptot_scale.setMinimum(5)
        self.Ptot_scale.setMaximum(500)
        self.Ptot_scale.setValue(20)
        self.Ptot_scale.setSuffix('  mm')
        self.Ptot_scale.setAlignment(Qt.AlignCenter)

        self.qweather_bin = QComboBox()
        self.qweather_bin.setEditable(False)
        self.qweather_bin.setInsertPolicy(QComboBox.NoInsert)
        self.qweather_bin.addItems(['day', 'week', 'month'])
        self.qweather_bin.setCurrentIndex(1)

        # Layout :

        layout = QGridLayout()

        GRID = [[QLabel('Precip. Scale :'), self.Ptot_scale],
                [QLabel('Resampling :'), self.qweather_bin]]

        for i, row in enumerate(GRID):
            layout.addLayout(QRowLayout(row), i, 1)

        layout.setVerticalSpacing(5)
        layout.setContentsMargins(10, 10, 10, 10)  # (L,T,R,B)
        layout.setRowStretch(i+1, 100)

        widget_weather_scale = QFrame()
        widget_weather_scale.setFrameStyle(0)
        widget_weather_scale.setLayout(layout)

        # ---- ASSEMBLING TABS

        tabscales = QTabWidget()
        tabscales.addTab(widget_time_scale, 'Time')
        tabscales.addTab(WLScale_widget, 'Water Level')
        tabscales.addTab(widget_weather_scale, 'Weather')

        return tabscales
Esempio n. 43
0
    def __init__(self):
        super(SplendorWindow, self).__init__()
        self.setWindowTitle("Splendor")
        self.resize(950, 670)

        self.board = SplendorBoard()
        layout = QGridLayout()
        self.game_table = SplendorTable()
        layout_cards = QGridLayout()
        layout_chips = QGridLayout()
        layout_lords = QGridLayout()
        scoreLcd = QLCDNumber(2)
        scoreLcd.setSegmentStyle(QLCDNumber.Filled)

        layout.addWidget(self.createLabel("Name: "), 0, 0)
        layout.addWidget(self.createLabel("Sandy"), 0, 1)
        layout.addWidget(self.createLabel("Score: "), 0, 2)
        layout.addWidget(scoreLcd, 0, 3)

        self.frame_cards = QFrame()
        self.frame_cards.setFrameStyle(QFrame.Box | QFrame.Raised)
        self.frame_cards.setLayout(layout_cards)

        self.frame_chips = QFrame()
        self.frame_chips.setFrameStyle(QFrame.Box | QFrame.Raised)
        frame_lords = QFrame()
        frame_lords.setFrameStyle(QFrame.Box | QFrame.Raised)

        layout.addWidget(self.frame_cards, 2, 0, 4, 5)
        layout.addWidget(self.frame_chips, 2, 6, 4, 2)
        #layout.addWidget(frame_lords, 2, 10)

        self.frame_chips.setLayout(layout_chips)
        frame_lords.setLayout(layout_lords)

        for r in (0, 4, 8):
            row = self.game_table.state[int(r / 4)]
            bord_line_cards = []
            indent = 0
            for i in range(4):
                card = row[i]
                bord_line_cards.append(self.createCardSelector(card, self.frame_cards))

                layout_cards.addWidget(self.createCard(card, self.frame_cards), 0 + r, indent, 3, 2)
                layout_cards.addWidget(bord_line_cards[i], 3 + r, indent)
                indent += 2
        self.setLayout(layout)

        rr = 0
        for r in (0, 2, 4):
            row = self.game_table.state[int(r / 2)]
            bord_line_chips = []
            indent = 0
            for i in range(2):
                chip = row[4 + i]
                bord_line_chips.append(self.createChipSelector(chip, self.frame_chips))

                layout_chips.addWidget(self.createChip(chip, self.frame_chips), 0 + rr, 0, 4, 2)
                layout_chips.addWidget(bord_line_chips[i], 2 + rr, 0)
                rr += 2
        self.setLayout(layout)
Esempio n. 44
0
    def __init__(self, parent):
        MyMiniFrame.__init__(self, parent, "Représenter une suite")
        ##self.SetExtraStyle(wx.WS_EX_BLOCK_EVENTS )
        self.parent = parent
        self._param_ = self.parent._param_
        ##p = self.panel = QWidget(self)

        self.sizer = sizer = QVBoxLayout()
        sizer.addWidget(QLabel("Choisissez le mode de génération de la suite :"))
        self.mode = QComboBox()
        self.mode.addItems(["u(n+1)=f(u(n))", "u(n)=f(n)"])
        self.mode.setCurrentIndex(0)
        self.mode.currentIndexChanged.connect(self.EvtChoixMode)
        sizer.addWidget(self.mode)

        f = QHBoxLayout()
        f.addWidget(QLabel("Choisissez la fonction f :"))
        self.fonction = QComboBox()
        self.fonction.addItems(["Y" + str(i+1) for i in range(self.parent.nombre_courbes)])
        self.fonction.setCurrentIndex(0)
        self.fonction.currentIndexChanged.connect(self.EvtChoixFonction)
        f.addWidget(self.fonction)
        sizer.addLayout(f)

        start = QHBoxLayout()
        start.addWidget(QLabel("Commencer pour n ="))
        self.n0 = QSpinBox()
        self.n0.setRange(0, 1000000)
        self.n0.setValue(0)
        start.addWidget(self.n0)
        sizer.addLayout(start)

        terme = QHBoxLayout()
        self.label_init = QLabel("Terme initial :")
        terme.addWidget(self.label_init)
        self.un0 =  QLineEdit("1")
        self.un0.setMinimumWidth(100)
        terme.addWidget(self.un0)
        sizer.addLayout(terme)

        ligne = QFrame()
        ligne.setFrameStyle(QFrame.HLine|QFrame.Raised)
        ##sizer.addWidget(wx.StaticLine(p, -1, style=wx.LI_HORIZONTAL), 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)

        nbr = QHBoxLayout()
        nbr.addWidget(QLabel("Construire les"))
        self.termes = QSpinBox()
        self.termes.setRange(0, 100)
        self.termes.setValue(5)
        nbr.addWidget(self.termes)
        nbr.addWidget(QLabel("premiers termes."))
        sizer.addLayout(nbr)

        ligne = QFrame()
        ligne.setFrameStyle(QFrame.HLine|QFrame.Raised)

        sizer.addWidget(ligne)

        #p.SetSizer(sizer)
        boutons = QHBoxLayout()
        fermer = QPushButton("Fermer")
        boutons.addWidget(fermer)
        lancer = QPushButton("Créer")
        boutons.addWidget(lancer)
        fermer.clicked.connect(self.close)
        lancer.clicked.connect(self.Creer)
        sizer.addLayout(boutons)

        self.setLayout(sizer)
Esempio n. 45
0
    def __init__(self, compare_frame_controller: CompareFrameController,
                 generator_tab_controller: GeneratorTabController,
                 project_manager: ProjectManager, parent):
        super().__init__(parent)

        self.project_manager = project_manager
        self.compare_frame_controller = compare_frame_controller
        self.generator_tab_controller = generator_tab_controller
        self.proto_analyzer = compare_frame_controller.proto_analyzer

        self.simulator_config = SimulatorConfiguration(self.project_manager)
        self.sim_expression_parser = SimulatorExpressionParser(self.simulator_config)
        SimulatorItem.simulator_config = self.simulator_config
        SimulatorItem.expression_parser = self.sim_expression_parser

        self.ui = Ui_SimulatorTab()
        self.ui.setupUi(self)
        util.set_splitter_stylesheet(self.ui.splitter)
        util.set_splitter_stylesheet(self.ui.splitterLeftRight)

        self.ui.splitter.setSizes([self.width() / 0.7, self.width() / 0.3])

        self.ui.treeProtocols.setHeaderHidden(True)
        self.tree_model = self.generator_tab_controller.tree_model
        self.ui.treeProtocols.setModel(self.tree_model)

        self.participant_table_model = ParticipantTableModel(project_manager.participants)
        self.ui.tableViewParticipants.setModel(self.participant_table_model)
        self.participant_table_model.update()

        self.simulator_message_field_model = SimulatorMessageFieldModel(self)
        self.ui.tblViewFieldValues.setModel(self.simulator_message_field_model)
        self.ui.tblViewFieldValues.setItemDelegateForColumn(1, ComboBoxDelegate(ProtocolLabel.DISPLAY_FORMATS,
                                                                                parent=self.ui.tblViewFieldValues))
        self.ui.tblViewFieldValues.setItemDelegateForColumn(2, ComboBoxDelegate(SimulatorProtocolLabel.VALUE_TYPES,
                                                                                parent=self.ui.tblViewFieldValues))
        self.ui.tblViewFieldValues.setItemDelegateForColumn(3, ProtocolValueDelegate(controller=self,
                                                                                     parent=self.ui.tblViewFieldValues))
        self.project_manager.reload_field_types()
        self.update_field_name_column()

        self.simulator_message_table_model = SimulatorMessageTableModel(self.project_manager, self)
        self.ui.tblViewMessage.setModel(self.simulator_message_table_model)

        self.ui.ruleCondLineEdit.setValidator(RuleExpressionValidator(self.sim_expression_parser, is_formula=False))
        self.completer_model = QStringListModel([])
        self.ui.ruleCondLineEdit.setCompleter(QCompleter(self.completer_model, self.ui.ruleCondLineEdit))
        self.ui.ruleCondLineEdit.setToolTip(self.sim_expression_parser.rule_condition_help)

        self.simulator_scene = SimulatorScene(mode=0, simulator_config=self.simulator_config)
        self.simulator_scene.tree_root_item = compare_frame_controller.proto_tree_model.rootItem
        self.ui.gvSimulator.setScene(self.simulator_scene)
        self.ui.gvSimulator.setAlignment(Qt.AlignLeft | Qt.AlignTop)
        self.ui.gvSimulator.proto_analyzer = compare_frame_controller.proto_analyzer

        self.__active_item = None

        self.ui.listViewSimulate.setModel(SimulatorParticipantListModel(self.simulator_config))
        self.ui.spinBoxNRepeat.setValue(self.project_manager.simulator_num_repeat)
        self.ui.spinBoxTimeout.setValue(self.project_manager.simulator_timeout_ms)
        self.ui.spinBoxRetries.setValue(self.project_manager.simulator_retries)
        self.ui.comboBoxError.setCurrentIndex(self.project_manager.simulator_error_handling_index)

        # place save/load button at corner of tab widget
        frame = QFrame(parent=self)
        frame.setLayout(QHBoxLayout())
        frame.setFrameStyle(frame.NoFrame)
        self.ui.btnSave = QToolButton(self.ui.tab)
        self.ui.btnSave.setIcon(QIcon.fromTheme("document-save"))
        frame.layout().addWidget(self.ui.btnSave)

        self.ui.btnLoad = QToolButton(self.ui.tab)
        self.ui.btnLoad.setIcon(QIcon.fromTheme("document-open"))
        frame.layout().addWidget(self.ui.btnLoad)
        frame.layout().setContentsMargins(0, 0, 0, 0)
        self.ui.tabWidget.setCornerWidget(frame)

        self.ui.splitterLeftRight.setSizes([0.2 * self.width(), 0.8 * self.width()])

        self.create_connects()
Esempio n. 46
0
class TetrisMainWindow(QMainWindow):
    """ The main tetris game window.
    """
    def __init__(self, parent=None):
        super(TetrisMainWindow, self).__init__(parent)
        self.setWindowTitle('PyQtris v%s' % pyqtris_version)

        self.setWindowIcon(QIcon(get_icon_pixmap()))

        self.figurebank = self.make_figure_bank()

        self.create_main_frame()
        self.create_menu()
        self.create_status_bar()

        self.timer = QTimer()
        self.timer_interval = 1000
        self.timer.timeout.connect(self.on_timer)
#        self.connect(self.timer, SIGNAL('timeout()'), self.on_timer)
        self.timer.start(self.timer_interval)

        self.init_highscores()
        self.restart_game()

    def on_restart(self):
        if self.state == GameState.gameover:
            self.restart_game()
        else:
            saved_state = self.state
            self.pause_game()

            reply = QMessageBox.question(self,
                'Restart confirmation',
                'Are you sure you want to restart the game?',
                QMessageBox.Yes | QMessageBox.No)

            if reply == QMessageBox.Yes:
                self.restart_game()
            else:
                self.set_game_state(saved_state)

    def on_pause(self):
        if self.state == GameState.paused:
            self.resume_game()
        elif self.state == GameState.running:
            self.pause_game()

    def on_about(self):
        saved_state = self.state
        self.pause_game()

        dialog = aboutdialog.AboutDialog(self)
        dialog.exec_()

        self.set_game_state(saved_state)

    def on_highscores(self):
        saved_state = self.state
        self.pause_game()
        self.show_highscores()
        self.set_game_state(saved_state)

    def set_game_state(self, state):
        if state == GameState.paused:
            self.pause_game()
        elif state == GameState.running:
            self.resume_game()
        elif state == GameState.gameover:
            self.state = GameState.gameover
            self.status_text.setText('Game over!')
            self.timer.stop()
        else:
            assert False

    def pause_game(self):
        self.state = GameState.paused
        self.status_text.setText('Paused')
        self.pause_button.setText('Resume')
        self.timer.stop()

    def resume_game(self):
        self.state = GameState.running
        self.status_text.setText('Playing')
        self.pause_button.setText('Pause')
        self.timer.start(self.timer_interval)

    def game_over(self):
        self.state = GameState.gameover

        self.status_text.setText('Game over!')
        self.timer.stop()

        if self.game_score > self.highscores.lowest_score():
            text, ok = QInputDialog.getText(self,
                "High score!",
                'Your name:')

            if ok and not text.isEmpty():
                self.highscores.add_score(text, self.game_score)
                self.save_highscores()
                self.show_highscores()

    def restart_game(self):
        self.game_level = 1
        self.game_lines = 0
        self.game_score = 0
        self.timer_interval = 1000

        self.resume_game()
        self.update_stats()

        self.board_widget.restart(self.figurebank.get_random())
        self.preview_figure = self.figurebank.get_random()
        self.preview_widget.set_figure(self.preview_figure)
        self.timer.start(self.timer_interval)

    def on_timer(self):
        if self.state == GameState.running:
            result = self.board_widget.timer_tick(self.preview_figure)
            num_rows = len(result.completed_rows)

            if result.state == 'gameover':
                self.game_over()
            elif result.state == 'newfigure':
                old_line_count = self.game_lines
                self.game_lines += num_rows
                score_bonus = result.drop_height + num_rows ** 2 * 30
                score_bonus = int(score_bonus * (1 + 0.1 * (self.game_level - 1)))
                self.game_score += score_bonus

                self.preview_figure = self.figurebank.get_random()
                self.preview_widget.set_figure(self.preview_figure)

                if num_rows > 0 and old_line_count % 10 + num_rows >= 10:
                    self.game_level += 1
                    self.timer_interval = 1000 - self.game_level * 100
                    if self.timer_interval < 100:
                        self.timer_interval = 100
                    self.timer.stop()
                    self.timer.start(self.timer_interval)

            self.update_stats()

    def update_stats(self):
        self.level_text.setText(str(self.game_level))
        self.lines_text.setText(str(self.game_lines))
        self.score_text.setText(str(self.game_score))

    def create_main_frame(self):
        self.board_widget = MainTetrisWidget(self,
            nrows=20,
            ncols=10,
            blocksize=25,
            startfigure=self.figurebank.get_random())
        self.board_widget.setFocus()

        self.control_panel = QFrame(self)
        self.control_panel.setFrameStyle(QFrame.Panel | QFrame.Sunken)
        self.control_panel.setFocusPolicy(Qt.NoFocus)

        self.populate_control_panel()

        main_layout = QHBoxLayout()
        main_layout.addWidget(self.board_widget)
        main_layout.addWidget(self.control_panel)
        main_layout.setSizeConstraint(QLayout.SetFixedSize)

        main_frame = QWidget()
        main_frame.setLayout(main_layout)
        self.setCentralWidget(main_frame)

    def populate_control_panel(self):
        self.preview_widget = TetrisPreviewWidget(
            self.control_panel,
            nrows=7,
            ncols=7,
            blocksize=10)

        # preview_group is the group-box for titling the preview
        # widget. preview_box is its internal layout.
        # finally, preview_layout is used to add stretchers around
        # the group box (to keep it slim)
        #
        preview_group = QGroupBox('Preview')
        preview_box = QHBoxLayout()
        preview_box.addWidget(self.preview_widget)
        preview_group.setLayout(preview_box)
        preview_layout = QHBoxLayout()
        preview_layout.addStretch()
        preview_layout.addWidget(preview_group)
        preview_layout.addStretch()

        text_layout = QGridLayout()

        level_label = StatsLabel('Level')
        self.level_text = StatsLabel('1', True)
        lines_label = StatsLabel('Lines')
        self.lines_text = StatsLabel('0', True)
        score_label = StatsLabel('Score')
        self.score_text = StatsLabel('0', True)

        text_layout.addWidget(level_label, 0, 0)
        text_layout.addWidget(self.level_text, 0, 1)
        text_layout.addWidget(lines_label, 1, 0)
        text_layout.addWidget(self.lines_text, 1, 1)
        text_layout.addWidget(score_label, 2, 0)
        text_layout.addWidget(self.score_text, 2, 1)

        self.pause_button = SizedButton('&Pause', QSize(90, 40))
        self.pause_button.setFocusPolicy(Qt.NoFocus)
        self.pause_button.clicked.connect(self.on_pause)
        #self.connect(self.pause_button, SIGNAL('clicked()'), self.on_pause)

        self.restart_button = SizedButton('&New game', QSize(90, 40))
        self.restart_button.setFocusPolicy(Qt.NoFocus)
        self.restart_button.clicked.connect(self.on_restart)
        #self.connect(self.restart_button, SIGNAL('clicked()'), self.on_restart)

        button_layout = QHBoxLayout()
        button_layout.addWidget(self.pause_button)
        button_layout.addSpacing(40)
        button_layout.addWidget(self.restart_button)

        vbox = QVBoxLayout()
        vbox.addSpacing(15)
        vbox.addLayout(preview_layout)
        vbox.addSpacing(40)
        vbox.addLayout(text_layout)
        vbox.addSpacing(40)
        vbox.addLayout(button_layout)
        vbox.addStretch()

        hbox = QHBoxLayout()
        hbox.addStretch()
        hbox.addLayout(vbox)
        hbox.addStretch()

        self.control_panel.setLayout(hbox)

    def create_status_bar(self):
        self.status_text = QLabel('Playing')
        self.statusBar().addWidget(self.status_text, 1)

    def create_menu(self):
        self.game_menu = self.menuBar().addMenu("&Game")
        self.help_menu = self.menuBar().addMenu("&Help")

        new_game_action = self.create_action("&New",
            shortcut='Ctrl+N', slot=self.on_restart,
            tip='New game')
        pause_game_action = self.create_action("&Pause",
            shortcut='Ctrl+P', slot=self.on_pause,
            tip='Pause game')
        highscores_action = self.create_action("&High Scores",
            shortcut='Ctrl+H', slot=self.on_highscores,
            tip='Pause game')
        quit_action = self.create_action("&Quit",
            shortcut='Ctrl+Q', slot=self.close,
            tip='Quit')

        about_action = self.create_action("&About",
            shortcut='F1', slot=self.on_about,
            tip='About PyQtris')

        self.add_actions(self.game_menu,
            (   new_game_action, pause_game_action, None,
                highscores_action, None, quit_action))

        self.add_actions(self.help_menu, (about_action,))

    def add_actions(self, target, actions):
        for action in actions:
            if action is None:
                target.addSeparator()
            else:
                target.addAction(action)

    def create_action(self, text, slot=None, shortcut=None,
                      icon=None, tip=None, checkable=False,
                      signal="triggered()"):
        action = QAction(text, self)
        if icon is not None:
            action.setIcon(QIcon(":/%s.png" % icon))
        if shortcut is not None:
            action.setShortcut(shortcut)
        if tip is not None:
            action.setToolTip(tip)
            action.setStatusTip(tip)
#        if slot is not None:
#            action.connect(slot)
##            self.connect(action, SIGNAL(signal), slot)
        if checkable:
            action.setCheckable(True)
        return action

    def make_figure_bank(self):
        # The standard 7 Tetris figures, in the orientation
        # in which they appear from the top of the screen
        #

        #  oo
        # oO
        S = Figure([(0,0), (-1,0), (0,-1), (-1,1)], color=QColor(122, 197, 205))

        # oo
        #  Oo
        Z = Figure([(0,0), (0,1), (-1,-1), (-1,0)], color=QColor(0, 205, 0))

        # oOo
        #  o
        T = Figure([(0,0), (0,1), (0,-1), (1,0)], color=QColor(238, 238, 0))

        # oOoo
        #
        I = Figure([(0,0), (0,-1), (0,1), (0,2)], color=QColor(238, 118, 33))

        # oo
        # Oo
        O = Figure([(0,0), (-1,0), (-1,1), (0,1)], rotatable=False, color=QColor(238, 44, 44))

        # oOo
        # o
        L = Figure([(0,0), (0,-1), (0,1), (1,-1)], color=QColor(0, 0, 225))

        # oOo
        #   o
        J = Figure([(0,0), (0,-1), (0,1), (1,1)], color=QColor(148, 0, 211))

        return FigureBank([S, Z, T, I, O, L, J])

    def keyPressEvent(self, event):
        if self.state == GameState.running:
            self.board_widget.keyPressEvent(event)

    HS_FILENAME = 'pyqtris_highscores'

    def init_highscores(self):
        self.highscores = HighScores(10)

        if os.path.exists(self.HS_FILENAME):
            self.highscores.load_from_file(self.HS_FILENAME)

    def save_highscores(self):
        self.highscores.save_to_file(self.HS_FILENAME)

    def show_highscores(self):
        dialog = HighscoresDialog(self.highscores.get_list(), self)
        dialog.exec_()
Esempio n. 47
0
class BRFViewer(QWidget):
    """
    Window that is used to show all the results produced with for the
    currently selected water level dataset.
    """

    def __init__(self, wldset=None, parent=None):
        super(BRFViewer, self).__init__(parent)
        self.__save_ddir = None

        self.setWindowTitle('BRF Results Viewer')
        self.setWindowIcon(icons.get_icon('master'))
        self.setWindowFlags(Qt.Window |
                            Qt.CustomizeWindowHint |
                            Qt.WindowMinimizeButtonHint |
                            Qt.WindowCloseButtonHint)

        self.__initGUI__()
        self.set_wldset(wldset)

    def __initGUI__(self):

        # ---- Navigator

        self.btn_prev = QToolButtonNormal(icons.get_icon('go_previous'))
        self.btn_prev.clicked.connect(self.navigate_brf)

        self.btn_next = QToolButtonNormal(icons.get_icon('go_next'))
        self.btn_next.clicked.connect(self.navigate_brf)

        self.current_brf = QSpinBox()
        self.current_brf.setRange(0, 99)
        self.current_brf.setAlignment(Qt.AlignCenter)
        self.current_brf.setButtonSymbols(QAbstractSpinBox.NoButtons)
        self.current_brf.setCorrectionMode(
                QAbstractSpinBox.CorrectToNearestValue)
        self.current_brf.valueChanged.connect(self.navigate_brf)
        self.current_brf.setValue(0)

        self.total_brf = QLabel('/ 0')

        # ---- Language button

        self.btn_language = LangToolButton()
        self.btn_language.setToolTip(
            "Set the language of the text shown in the graph.")
        self.btn_language.sig_lang_changed.connect(self.plot_brf)
        self.btn_language.setIconSize(icons.get_iconsize('normal'))

        # ---- Toolbar

        # Generate the buttons :

        self.btn_del = QToolButtonNormal(icons.get_icon('delete_data'))
        self.btn_del.setToolTip('Delete current BRF results')
        self.btn_del.clicked.connect(self.del_brf)

        self.btn_del_all = QToolButtonNormal(icons.get_icon('close_all'))
        self.btn_del_all.setToolTip(
            'Delete all BRF results for the current water level dataset.')
        self.btn_del_all.clicked.connect(self.del_all_brf)

        self.btn_save = btn_save = QToolButtonNormal(icons.get_icon('save'))
        btn_save.setToolTip('Save current BRF graph as...')
        btn_save.clicked.connect(self.select_savefig_path)

        self.btn_export = QToolButtonNormal(icons.get_icon('export_data'))
        self.btn_export.setToolTip('Export data to file.')
        self.btn_export.clicked.connect(self.select_export_brfdata_filepath)

        self.btn_copy = QToolButtonNormal('copy_clipboard')
        self.btn_copy.setToolTip('Copy figure to clipboard as image.')
        self.btn_copy.clicked.connect(self.copyfig_to_clipboard)

        self.btn_setp = QToolButtonNormal(icons.get_icon('page_setup'))
        self.btn_setp.setToolTip('Show graph layout parameters...')
        self.btn_setp.clicked.connect(self.toggle_graphpannel)

        # Generate the layout :

        self.tbar = myqt.QFrameLayout()

        buttons = [btn_save, self.btn_copy, self.btn_export, self.btn_del,
                   self.btn_del_all, VSep(), self.btn_prev, self.current_brf,
                   self.total_brf, self.btn_next, VSep(), self.btn_setp,
                   self.btn_language]

        for btn in buttons:
            if isinstance(btn, QLayout):
                self.tbar.addLayout(btn, 1, self.tbar.columnCount())
            else:
                self.tbar.addWidget(btn, 1, self.tbar.columnCount())

        row = self.tbar.columnCount()
        self.tbar.addWidget(HSep(), 0, 0, 1, row+1)
        self.tbar.setColumnStretch(row, 100)
        self.tbar.setContentsMargins(10, 0, 10, 10)  # (l, t, r, b)

        # ---- Graph Canvas

        self.fig_frame = QFrame()
        self.fig_frame.setFrameStyle(StyleDB().frame)
        self.fig_frame.setObjectName("figframe")
        self.fig_frame.setStyleSheet("#figframe {background-color:white;}")

        self.brf_canvas = FigureCanvasQTAgg(BRFFigure())

        fflay = QGridLayout(self.fig_frame)
        fflay.setContentsMargins(0, 0, 0, 0)   # (left, top, right, bottom)
        fflay.addWidget(self.tbar, 1, 0)
        fflay.addWidget(self.brf_canvas, 0, 0)

        # ---- Graph Options Panel

        self.graph_opt_panel = BRFOptionsPanel()
        self.graph_opt_panel.sig_graphconf_changed.connect(self.plot_brf)

        # ---- Main Layout

        ml = QGridLayout(self)

        ml.addWidget(self.fig_frame, 0, 2)
        ml.addWidget(self.graph_opt_panel, 0, 3)

        ml.setColumnStretch(1, 100)

    @property
    def savedir(self):
        """Return a path where figures and files are saved by default."""
        if self.__save_ddir is None or not osp.exists(self.__save_ddir):
            try:
                savedir = self.wldset.dirname
            except AttributeError:
                savedir = osp.dirname(__rootdir__)
            finally:
                return savedir
        else:
            return self.__save_ddir

    # ---- Toolbar Handlers
    def toggle_graphpannel(self):
        if self.graph_opt_panel.isVisible() is True:
            # Hide the panel.
            self.graph_opt_panel.setVisible(False)
            self.btn_setp.setAutoRaise(True)
            self.btn_setp.setToolTip('Show graph layout parameters...')

            w = self.size().width() - self.graph_opt_panel.size().width()
            self.setFixedWidth(w)
        else:
            # Show the panel.
            self.graph_opt_panel.setVisible(True)
            self.btn_setp.setAutoRaise(False)
            self.btn_setp.setToolTip('Hide graph layout parameters...')

            w = self.size().width() + self.graph_opt_panel.size().width()
            self.setFixedWidth(w)

    def navigate_brf(self):
        if self.sender() == self.btn_prev:
            cur_num = self.current_brf.value() - 1
        elif self.sender() == self.btn_next:
            cur_num = self.current_brf.value() + 1
        elif self.sender() == self.current_brf:
            cur_num = self.current_brf.value()
        self.current_brf.setValue(cur_num)

        self.update_brfnavigate_state()

    def del_brf(self):
        """Delete the graph and data of the currently selected result."""
        index = self.current_brf.value()-1
        name = self.wldset.get_brfname_at(index)
        self.wldset.del_brf(name)
        self.update_brfnavigate_state()

    def del_all_brf(self):
        """Delete all the graphs and BRF results for the current dataset."""
        msg = ("Do you want to delete all BRF results that were evaluated "
               "for dataset <i>{}</i>?"
               "<br><br>"
               "All data will be lost permanently."
               ).format(self.wldset.name)
        btn = QMessageBox.Yes | QMessageBox.No
        reply = QMessageBox.question(self, 'Delete all BRF results', msg, btn)

        if reply == QMessageBox.Yes:
            for name in self.wldset.saved_brf():
                self.wldset.del_brf(name)
            self.update_brfnavigate_state()

    def new_brf_added(self):
        self.current_brf.setMaximum(self.wldset.brf_count())
        self.current_brf.setValue(self.wldset.brf_count())
        self.update_brfnavigate_state()

    def update_brfnavigate_state(self):
        count = self.wldset.brf_count()
        self.total_brf.setText('/ %d' % count)

        self.current_brf.setMinimum(min(count, 1))
        self.current_brf.setMaximum(count)
        curnt = self.current_brf.value()

        self.tbar.setEnabled(count > 0)
        self.btn_prev.setEnabled(curnt > 1)
        self.btn_next.setEnabled(curnt < count)
        self.btn_del.setEnabled(count > 0)

        self.plot_brf()

    def select_savefig_path(self):
        """
        Opens a dialog to select a file path where to save the brf figure.
        """
        ddir = osp.join(self.savedir, 'brf_%s' % self.wldset['Well'])

        dialog = QFileDialog()
        fname, ftype = dialog.getSaveFileName(
                self, "Save Figure", ddir, '*.pdf;;*.svg')
        ftype = ftype.replace('*', '')
        if fname:
            if not osp.samefile(osp.dirname(ddir), osp.dirname(fname)):
                self.__save_ddir = osp.dirname(fname)
            if not fname.endswith(ftype):
                fname = fname + ftype
            self.save_brf_fig(fname)

    def save_brf_fig(self, fname):
        """Saves the current BRF figure to fname."""
        self.brf_canvas.figure.savefig(fname)

    def copyfig_to_clipboard(self):
        """Saves the current BRF figure to the clipboard."""
        buf = io.BytesIO()
        self.save_brf_fig(buf)
        QApplication.clipboard().setImage(QImage.fromData(buf.getvalue()))
        buf.close()

    def select_export_brfdata_filepath(self):
        """
        Open a dialog to select a file path where to save the brf data.
        """
        fname = 'brf_' + self.wldset['Well']
        if self.wldset['Well ID']:
            fname += '_%s' % self.wldset['Well ID']
        ddir = osp.join(self.savedir, fname)

        dialog = QFileDialog()
        fname, ftype = dialog.getSaveFileName(
                self, "Export Data", ddir, "*.xlsx;;*.xls;;*.csv")
        ftype = ftype.replace('*', '')
        if fname:
            if not osp.samefile(osp.dirname(ddir), osp.dirname(fname)):
                self.__save_ddir = osp.dirname(fname)
            if not fname.endswith(ftype):
                fname = fname + ftype
            self.export_brf_data(fname)

    def export_brf_data(self, fname):
        """Export the current BRF data to to file."""
        self.wldset.export_brf_to_csv(fname, self.current_brf.value()-1)

    # ---- Others
    def set_wldset(self, wldset):
        self.wldset = wldset
        self.setEnabled(wldset is not None)
        if wldset is not None:
            self.update_brfnavigate_state()

    def plot_brf(self):
        self.brf_canvas.figure.set_language(self.btn_language.language)
        if self.wldset.brf_count() == 0:
            self.brf_canvas.figure.empty_BRF()
        else:
            name = self.wldset.get_brfname_at(self.current_brf.value()-1)
            databrf = self.wldset.get_brf(name)
            well = self.wldset['Well']

            msize = self.graph_opt_panel.markersize
            draw_line = self.graph_opt_panel.draw_line

            ymin = self.graph_opt_panel.ymin
            ymax = self.graph_opt_panel.ymax
            yscale = self.graph_opt_panel.yscale

            xmin = self.graph_opt_panel.xmin
            xmax = self.graph_opt_panel.xmax
            xscale = self.graph_opt_panel.xscale
            time_units = self.graph_opt_panel.time_units

            date0 = databrf.date_start.strftime(format='%d/%m/%y %H:%M')
            date1 = databrf.date_end.strftime(format='%d/%m/%y %H:%M')
            self.brf_canvas.figure.plot_BRF(
                databrf['Lag'].values, databrf['SumA'].values,
                databrf['sdA'].values, date0, date1, well, msize, draw_line,
                [ymin, ymax], [xmin, xmax], time_units, xscale, yscale)
        self.brf_canvas.draw()

    def show(self):
        super(BRFViewer, self).show()
        qr = self.frameGeometry()
        if self.parentWidget():
            parent = self.parentWidget()

            wp = parent.frameGeometry().width()
            hp = parent.frameGeometry().height()
            cp = parent.mapToGlobal(QPoint(wp/2, hp/2))
        else:
            cp = QDesktopWidget().availableGeometry().center()

        qr.moveCenter(cp)
        self.move(qr.topLeft())
        self.fig_frame.setFixedSize(self.fig_frame.size())
        self.setFixedSize(self.size())

        self.raise_()
        if self.windowState() == Qt.WindowMinimized:
            # Window is minimised. Restore it.
            self.setWindowState(Qt.WindowNoState)