Exemplo n.º 1
0
    def __init__(self, lis, form, title="", parent=None):
        self.title = title
        self.lis = lis
        self.form = form

        self.widget = QtWidgets.QWidget(parent)  # create a new widget
        self.lay = QtWidgets.QVBoxLayout(
            self.widget)  # attach layout to that widget
        self.label = QtWidgets.QLabel(self.title, self.widget)

        self.subwidget = QtWidgets.QWidget(self.widget)
        self.sublay = QtWidgets.QHBoxLayout(self.subwidget)

        self.lay.addWidget(self.label)
        self.lay.addWidget(self.subwidget)

        self.subwidget.setSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                     QtWidgets.QSizePolicy.Expanding)
        self.lis.widget.setSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                      QtWidgets.QSizePolicy.Minimum)
        self.lis.widget.setMaximumWidth(100)

        # get widget from List and set its parent to widget
        self.lis.widget.setParent(self.subwidget)
        self.form.widget.setParent(self.subwidget)
        # add List's internal widget to widget's layout
        self.sublay.addWidget(self.lis.widget)
        self.sublay.addWidget(self.form.widget)
        self.lis.widget.currentItemChanged.connect(
            self.form.chooseForm_slot)  # connections between list and the form
        self.form.signals.modified.connect(self.lis.update_slot)
        self.modified = self.form.signals.modified  # shorthand
Exemplo n.º 2
0
    def __init__(self, def_pixmap=None, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.signals = self.Signals()
        self.pre = "NLineCrossingVideoWidget : "
        self.lay = QtWidgets.QVBoxLayout(self)
        self.canvas = NLineCrossingCanvasWidget(self.signals,
                                                def_pixmap,
                                                parent=self)
        self.lay.addWidget(self.canvas)
        # WARNING: the numerical constants are reversed between min/max...!
        self.canvas.setSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                  QtWidgets.QSizePolicy.Minimum)
        self.buttons = QtWidgets.QWidget(self)
        self.lay.addWidget(self.buttons)

        self.button1 = QtWidgets.QPushButton("Set 1", self.buttons)
        self.linedef1 = QtWidgets.QSpinBox(self.buttons)
        self.cbutton1 = QtWidgets.QPushButton("Clear 1", self.buttons)

        self.button2 = QtWidgets.QPushButton("Set 2", self.buttons)
        self.linedef2 = QtWidgets.QSpinBox(self.buttons)
        self.cbutton2 = QtWidgets.QPushButton("Clear 2", self.buttons)

        self.label1 = QtWidgets.QLabel("Min object size:")
        self.sizedef = QtWidgets.QSpinBox(self.buttons)

        self.linedef1.setRange(4, 60)
        self.linedef2.setRange(4, 60)
        self.sizedef.setRange(0, 200 * 200)
        self.sizedef.setValue(50 * 100)  # a nice predefined value
        self.sizedef.setSingleStep(500)

        for b in [
                self.buttons, self.button1, self.linedef1, self.button2,
                self.linedef2
        ]:
            b.setSizePolicy(QtWidgets.QSizePolicy.Maximum,
                            QtWidgets.QSizePolicy.Maximum)

        self.button_lay = QtWidgets.QHBoxLayout(self.buttons)
        self.button_lay.addWidget(self.button1)
        self.button_lay.addWidget(self.cbutton1)
        self.button_lay.addWidget(self.linedef1)
        self.button_lay.addWidget(self.button2)
        self.button_lay.addWidget(self.cbutton2)
        self.button_lay.addWidget(self.linedef2)
        self.button_lay.addWidget(self.label1)
        self.button_lay.addWidget(self.sizedef)

        self.button1.clicked.connect(lambda: self.canvas.define_line_slot(0))
        self.button2.clicked.connect(lambda: self.canvas.define_line_slot(1))

        self.cbutton1.clicked.connect(lambda: self.canvas.clear_line_slot(0))
        self.cbutton2.clicked.connect(lambda: self.canvas.clear_line_slot(1))

        self.linedef1.valueChanged.connect(
            lambda i: self.canvas.set_line_width_slot(0, i))
        self.linedef2.valueChanged.connect(
            lambda i: self.canvas.set_line_width_slot(1, i))
        self.sizedef.valueChanged.connect(self.canvas.set_object_size_slot)
Exemplo n.º 3
0
    def makeWidget(self):
        super().makeWidget()

        self.button_row = QtWidgets.QWidget(self.widget)
        self.button_lay = QtWidgets.QHBoxLayout(self.button_row)
        self.lay.addWidget(self.button_row)

        self.reset_button = QtWidgets.QPushButton("Reset", self.button_row)
        self.save_button = QtWidgets.QPushButton("Save", self.button_row)
        self.button_lay.addWidget(self.reset_button)
        self.button_lay.addWidget(self.save_button)
        self.save_button.setEnabled(False)
        # row class instance => column (blocksize)=> corresponding widget
        # ValkkaFSConfigRow has "blocksize" widget that is QSpinBox
        self.row_instance["blocksize"].widget.valueChanged.connect(
            self.mod_slot)
        self.row_instance["n_blocks"].widget.valueChanged.connect(
            self.mod_slot)
        # should fix cutemongoforms: SpinBoxIntegerColumn should have
        # getNotifySignal implemented..
        st = (
            "- Recording streams is experimental; please report bugs\n"
            "- Modifying & saving the new parameters will clear all your recordings\n"
        )
        self.info_label = QtWidgets.QLabel(st, self.widget)
        self.lay.addWidget(self.info_label)

        self.reset_button.clicked.connect(self.row_instance.clear)
        self.save_button.clicked.connect(self.save_slot)
Exemplo n.º 4
0
    def makeWidget(self):
        """Subclassed from Row : custom form.  Add a total disk space field.
        """
        self.widget = FormWidget()
        self.lay = QtWidgets.QGridLayout(self.widget)

        cc = 0
        # self.placeWidget(cc, "record"); cc+=1
        self.placeWidget(cc, "blocksize")
        cc += 1
        self.placeWidget(cc, "n_blocks")
        cc += 1

        self.label_total_size = QtWidgets.QLabel("Total Size (MB)",
                                                 self.widget)
        self.label_total_size_value = QtWidgets.QLabel("", self.widget)
        self.placeWidgetPair(
            cc, (self.label_total_size, self.label_total_size_value))
        cc += 1

        #self.placeWidget(cc, "fs_flavor"); cc+=1
        #self.placeWidget(cc, "partition_uuid"); cc+=1

        self.connectNotifications()

        def fs_size_changed():
            total_size_mb = self["blocksize"].getValue(
            ) * self["n_blocks"].getValue()
            self.label_total_size_value.setText(str(total_size_mb))

        """
        def block_device_slot():
            self["partition_uuid"].updateWidget()
            n_devs = self["partition_uuid"].widget.count() # QComboBox.count()
            if n_devs < 1:
                self["fs_flavor"]["file"].setChecked(True)
        """
        self["blocksize"].widget.valueChanged.connect(fs_size_changed)
        self["n_blocks"].widget.valueChanged.connect(fs_size_changed)
        # self["fs_flavor"]["valkkafs"].clicked.connect(block_device_slot)

        fs_size_changed()
        # block_device_slot()
        """
Exemplo n.º 5
0
 def getWidget(self):
     """Some ideas for your widget:
     - Textual information (alert, license place number)
     - Check boxes : if checked, send e-mail to your mom when the analyzer spots something
     - .. or send an sms to yourself
     - You can include the cv2.imshow window to the widget to see how the analyzer proceeds
     """
     widget = QtWidgets.QLabel("nada de nada")
     # widget.setStyleSheet(style.detector_test)
     #self.signals.start_move.connect(lambda : widget.setText("MOVEMENT START"))
     #self.signals.stop_move. connect(lambda : widget.setText("MOVEMENT STOP"))
     return widget
Exemplo n.º 6
0
    def makeWidget(self):
        super().makeWidget()
        i = self.lay.count()
        self.info_label = QtWidgets.QLabel(
            ("Cameralists and services are reinitiated\n"
             "once you save & close this window\n"), self.widget)
        self.lay.insertWidget(i, self.info_label)

        # give a signal thats emitted once discovery has modified the camera list
        self.discovery_win = QCapsulate(
            DiscoveryWidget(sig=self.signals.modified), "Camera Discovery")
        self.discovery_win.hide()
        self.discovery_button = QtWidgets.QPushButton("Camera Search",
                                                      self.widget)
        self.discovery_button.clicked.connect(self.discovery_slot)
        self.lay.insertWidget(i + 1, self.discovery_button)
Exemplo n.º 7
0
    def makeWidget(self):
        super().makeWidget()

        self.button_row = QtWidgets.QWidget(self.widget)
        self.button_lay = QtWidgets.QHBoxLayout(self.button_row)
        self.lay.addWidget(self.button_row)

        self.reset_button = QtWidgets.QPushButton("Reset", self.button_row)
        self.save_button = QtWidgets.QPushButton("Save", self.button_row)
        self.button_lay.addWidget(self.reset_button)
        self.button_lay.addWidget(self.save_button)

        self.info_label = QtWidgets.QLabel(
            "Saving restarts all Valkka services", self.widget)
        self.lay.addWidget(self.info_label)

        self.reset_button.clicked.connect(self.row_instance.clear)
        self.save_button.clicked.connect(self.save_slot)
Exemplo n.º 8
0
 def getWidget(self):
     widget = QtWidgets.QLabel("NO TEXT YET")
     widget.setStyleSheet(style.detector_test)
     self.signals.text.connect(lambda message_object:\
         widget.setText(message_object["message"]))
     return widget
Exemplo n.º 9
0
    def setupUi(self):

        rec = QtWidgets.QApplication.desktop().screenGeometry()
        height = rec.height()
        width = rec.width()

        self.setGeometry(QtCore.QRect(0, 0, width, height // 2))
        self.w = QtWidgets.QWidget(self)
        self.setCentralWidget(self.w)
        self.lay = QtWidgets.QVBoxLayout(self.w)

        # return

        # divide window into three parts
        self.upper = QtWidgets.QWidget(self.w)
        self.middle = QtWidgets.QWidget(self.w)
        self.lower = QtWidgets.QWidget(self.w)
        self.lowest = QtWidgets.QWidget(self.w)
        self.lay.addWidget(self.upper)
        self.lay.addWidget(self.middle)
        self.lay.addWidget(self.lower)
        self.lay.addWidget(self.lowest)

        # upper part: detectors widget and the video itself
        self.upperlay = QtWidgets.QHBoxLayout(self.upper)

        # self.widget  =QtWidgets.QTextEdit(self.upper)
        self.widget = QtWidgets.QWidget(self.upper)
        self.widget_lay = QtWidgets.QVBoxLayout(self.widget)

        # self.widget = self.mvision_process.getWidget()
        # self.widget.setParent(self.upper)

        self.video_area = QtWidgets.QWidget(self.upper)
        self.video_lay = QtWidgets.QGridLayout(self.video_area)

        self.upperlay.addWidget(self.widget)
        self.upperlay.addWidget(self.video_area)
        self.widget.setSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                  QtWidgets.QSizePolicy.Minimum)
        self.video_area.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                      QtWidgets.QSizePolicy.Expanding)
        """
        [------|--------------------------------------]
        [Open File] [Close Live] [Play] [Stop] [Rewind]
        """

        self.middlelay = QtWidgets.QHBoxLayout(self.middle)
        self.slider = QtWidgets.QSlider(QtCore.Qt.Orientation.Horizontal,
                                        self.middle)
        self.middlelay.addWidget(self.slider)
        self.slider.setTracking(False)

        self.lowerlay = QtWidgets.QHBoxLayout(self.lower)
        self.open_file_button = QtWidgets.QPushButton("Open File", self.lower)
        self.close_file_button = QtWidgets.QPushButton("Close File",
                                                       self.lower)
        self.play_button = QtWidgets.QPushButton("Play", self.lower)
        self.stop_button = QtWidgets.QPushButton("Stop", self.lower)
        self.rewind_button = QtWidgets.QPushButton("<<", self.lower)
        self.seek_label = QtWidgets.QLabel("<<", self.lower)

        self.lowerlay.addWidget(self.open_file_button)
        self.lowerlay.addWidget(self.close_file_button)
        self.lowerlay.addWidget(self.play_button)
        self.lowerlay.addWidget(self.stop_button)
        self.lowerlay.addWidget(self.rewind_button)
        self.lowerlay.addWidget(self.seek_label)

        self.open_file_button.clicked.connect(self.open_file_button_slot)
        self.close_file_button.clicked.connect(self.close_file_button_slot)
        self.play_button.clicked.connect(self.play_button_slot)
        self.stop_button.clicked.connect(self.stop_button_slot)
        self.rewind_button.clicked.connect(self.rewind_button_slot)
        self.slider.valueChanged.connect(self.slider_slot)

        # lowest part: some text
        self.lowestlay = QtWidgets.QVBoxLayout(self.lowest)
        self.infotext = QtWidgets.QLabel("info text", self.lowest)
        self.lowestlay.addWidget(self.infotext)
Exemplo n.º 10
0
    def __init__(self, ip, slot=1, max_slot=32, parent=None):
        """
        ip corresponds to slot
        
        max ip = ip + (max_slot - slot)
        
        """
        super().__init__(parent)
        self.setWindowTitle("Configuration Copy")
        
        self.max_dn = max_slot - slot
        
        assert(isinstance(slot, int))
        ip_nums=[]
        for part in ip.split("."):
            ip_nums.append(int(part))
            
        self.start_ip_text = ip
    
        self.min_num = ip_nums.pop(-1) # take the last number
        self.max_num = self.min_num + self.max_dn
        self.min_slot = slot
    
        self.stop_ip_text =""
        for part in ip_nums:
            self.stop_ip_text += str(part)+"."
    
        self.lay = QtWidgets.QVBoxLayout(self)
    
        self.field = QtWidgets.QWidget(self)
        self.buttons = QtWidgets.QWidget(self)
        
        self.lay.addWidget(self.field)
        self.lay.addWidget(self.buttons)
    
        self.field_lay = QtWidgets.QGridLayout(self.field)
        self.buttons_lay = QtWidgets.QHBoxLayout(self.buttons)
        
        self.ip_label = QtWidgets.QLabel("IP range", self.field)
        self.slot_label = QtWidgets.QLabel("Slot range", self.field)
        self.field_lay.addWidget(self.ip_label, 0, 0)
        self.field_lay.addWidget(self.slot_label, 1, 0)
        
        self.ip_field = QtWidgets.QWidget(self.field)
        self.slot_field = QtWidgets.QWidget(self.field)
        self.field_lay.addWidget(self.ip_field, 0, 1)
        self.field_lay.addWidget(self.slot_field, 1, 1)
        
        self.write_button = QtWidgets.QPushButton("Overwrite slots", self.buttons)
        self.cancel_button = QtWidgets.QPushButton("Cancel", self.buttons)
        # self.buttons_lay.addWidget(self.write_button, 2, 0)
        # self.buttons_lay.addWidget(self.cancel_button, 3, 0)
        self.buttons_lay.addWidget(self.write_button)
        self.buttons_lay.addWidget(self.cancel_button)

        self.ip_field_lay = QtWidgets.QHBoxLayout(self.ip_field)
        self.slot_field_lay = QtWidgets.QHBoxLayout(self.slot_field)

        self.ip_field_label = QtWidgets.QLabel(
            self.start_ip_text + 
            " - " + 
            self.stop_ip_text)
        
        
        self.ip_field_input = QtWidgets.QSpinBox(self.ip_field)
        self.ip_field_lay.addWidget(self.ip_field_label)
        self.ip_field_lay.addWidget(self.ip_field_input)
        self.ip_field_input.setMinimum(self.min_num)
        self.ip_field_input.setMaximum(self.max_num)
        
        self.slot_field_label = QtWidgets.QLabel(self.slot_field) 
        self.slot_field_lay.addWidget(self.slot_field_label)
        
        self.ip_field_input.valueChanged.connect(self.update_ip_slot)
        self.write_button.clicked.connect(lambda: self.done(1))
        self.cancel_button.clicked.connect(lambda: self.done(0))

        self.update_ip_slot(self.min_num)
Exemplo n.º 11
0
    def makeWidget(self):
        """Subclassed from Row : custom form.  Add a summary RTSP address in the end of the form, etc.
        """
        # super().makeWidget() # do all by hand
        self.widget = FormWidget()
        self.lay = QtWidgets.QGridLayout(self.widget)

        cc = 0
        self.placeWidget(cc, "slot")
        cc += 1
        self.placeWidget(cc, "address")
        cc += 1
        self.placeWidget(cc, "username")
        cc += 1
        self.placeWidget(cc, "password")
        cc += 1
        self.placeWidget(cc, "port")
        cc += 1
        self.placeWidget(cc, "tail")
        cc += 1
        self.placeWidget(cc, "force_tcp")
        cc += 1
        self.placeWidget(cc, "record")
        cc += 1
        # self.setVisible("tail", False) # test

        # Mainstream
        self.label_mainstream = QtWidgets.QLabel("Mainstream", self.widget)
        self.label_mainstream.setStyleSheet(style.form_highlight)
        self.placeWidgetPair(cc, (self.label_mainstream, None))
        cc += 1
        self.placeWidget(cc, "subaddress_main")
        cc += 1
        # complete RTSP address
        self.label_mainstream_address = QtWidgets.QLabel(
            "RTSP address", self.widget)
        self.mainstream_address = QtWidgets.QLabel("", self.widget)
        self.placeWidgetPair(
            cc, (self.label_mainstream_address, self.mainstream_address))
        cc += 1
        # live and rec
        self.placeWidget(cc, "live_main")
        cc += 1
        self.placeWidget(cc, "rec_main")
        cc += 1

        # Substream
        self.label_substream = QtWidgets.QLabel("Substream", self.widget)
        self.label_substream.setStyleSheet(style.form_highlight)
        self.placeWidgetPair(cc, (self.label_substream, None))
        cc += 1
        self.label_substream.setVisible(False)  # hide for the moment
        self.placeWidget(cc, "subaddress_sub")
        cc += 1
        # complete RTSP address
        self.label_substream_address = QtWidgets.QLabel(
            "RTSP address", self.widget)
        self.substream_address = QtWidgets.QLabel("", self.widget)
        self.placeWidgetPair(
            cc, (self.label_substream_address, self.substream_address))
        cc += 1
        self.label_substream_address.setVisible(False)
        self.substream_address.setVisible(False)
        # .. hide for the moment

        # live and rec
        self.placeWidget(cc, "live_sub")
        cc += 1
        self.placeWidget(cc, "rec_sub")
        cc += 1
        """ # definitely NOT here!
        # self.copy_label = QtWidgets.QLabel("Copy this camera", self.widget)
        self.copy_button = QtWidgets.QPushButton("Copy", self.widget)
        self.placeWidgetPair(cc, (self.copy_button, None))
        self.copy_button.clicked.connect(self.copy_slot)
        """
        self.connectNotifications()

        def rec_main_clicked():
            if not self["live_main"].widget.isChecked():  # rec requires live
                print("live_main is NOT checked")
                self["rec_main"].widget.setChecked(False)
            if self["rec_main"].widget.isChecked(
            ):  # rec main excludes rec sub
                self["rec_sub"].widget.setChecked(False)

        def rec_sub_clicked():
            if not self["live_sub"].widget.isChecked():  # rec requires live
                print("live_sub is NOT checked")
                self["rec_sub"].widget.setChecked(False)
            if self["rec_sub"].widget.isChecked():  # rec sub excludes rec main
                self["rec_main"].widget.setChecked(False)

        self["rec_main"].widget.clicked.connect(rec_main_clicked)
        self["rec_sub"].widget.clicked.connect(rec_sub_clicked)
        self.widget.signals.show.connect(self.show_slot)

        # TODO: remove these restrictions once functional:
        """
        self["subaddress_main"].widget.setEnabled(False)
        self["subaddress_sub"].widget.setEnabled(False)
        self["live_main"].widget.setEnabled(False)
        self["rec_main"].widget.setEnabled(False)
        self["live_sub"].widget.setEnabled(False)
        self["rec_sub"].widget.setEnabled(False)
        """
        self.setVisible("subaddress_main", False)
        self.setVisible("subaddress_sub", False)
        self.setVisible("live_main", False)
        self.setVisible("rec_main", False)
        self.setVisible("live_sub", False)
        self.setVisible("rec_sub", False)
Exemplo n.º 12
0
    def setupUi(self):
        self.setStyleSheet(style.main_gui)
        self.setWindowTitle(singleton.program_name)

        self.setGeometry(QtCore.QRect(100, 100, 500, 500))

        self.w = QtWidgets.QWidget(self)
        self.setCentralWidget(self.w)

        self.filemenu = FileMenu(parent=self)
        self.viewmenu = ViewMenu(parent=self)  # grids up to 4x4
        self.configmenu = ConfigMenu(parent=self)

        if self.mvision:
            mvision_elements = []

            for cl in self.mvision_classes + self.mvision_client_classes:
                if cl.auto_menu:
                    # # instead: all visible in menus
                    # # but if auto_menu is False, then must be connected
                    # # manually .. actually, we'd need auto_connect switch.
                    el = QuickMenuElement(title=cl.name, method_name=cl.name)
                    mvision_elements.append(el)

            class MVisionMenu(QuickMenu):
                title = "Machine Vision"
                elements = mvision_elements

            self.mvisionmenu = MVisionMenu(parent=self)

        self.aboutmenu = AboutMenu(parent=self)

        # create container and their windows
        self.manage_cameras_container = singleton.data_model.getDeviceListAndForm(
            None)
        self.manage_memory_container = singleton.data_model.getConfigForm()

        self.manage_memory_container.signals.save.connect(
            self.config_modified_slot)
        self.manage_cameras_container.getForm().signals.save_record.connect(
            self.config_modified_slot)

        tabs = [
            (self.manage_cameras_container.widget, "Camera Configuration"),
            (self.manage_memory_container.widget, "Memory Configuration"),
        ]

        if singleton.use_playback:
            self.manage_valkkafs_container = singleton.data_model.getValkkaFSForm(
            )
            self.manage_valkkafs_container.signals.save.connect(
                self.valkkafs_modified_slot)
            tabs.append((self.manage_valkkafs_container.widget,
                         "Recording Configuration"))

        self.config_win = QTabCapsulate("Configuration", tabs)

        self.config_win.signals.close.connect(self.config_dialog_close_slot)
        self.config_win.signals.close.connect(
            self.manage_cameras_container.close_slot)
        # == inform ListAndForm that it has been closed => it knows to close any extra wins / dialogs present
        # when the configuration dialog is reopened, inform the camera configuration form .. this way it can re-check if usb cams are available
        self.config_win.signals.show.connect(
            self.manage_cameras_container.getForm().show_slot)
        self.config_win.signals.show.connect(
            self.manage_cameras_container.choose_first_slot
        )  # so that we have at least one device chosen

        self.makeCameraTree()
        self.camera_list_win = QCapsulate(self.treelist, "Camera List")

        self.wait_label = QtWidgets.QLabel("Restarting Valkka, please wait ..")
        self.wait_window = QCapsulate(self.wait_label, "Wait", nude=True)