def makeWidget(self, qscreen: QtGui.QScreen, geom: tuple = ()): # (re)create the widget, do the same for children # how children are placed on the parent widget, depends on the subclass self.window = self.ContainerWindow(self.signals, self.title, self.parent) # send to correct x-screen self.window.show() self.window.windowHandle().setScreen(qscreen) self.n_xscreen = self.gpu_handler.getXScreenNum( qscreen ) # the correct x-screen number must be passed upstream, to the VideoContainer # continue window / widget construction in the correct x screen self.main_widget = self.ContainerWidget(self.window) self.main_layout = QtWidgets.QVBoxLayout(self.main_widget) self.main_layout.setContentsMargins(0, 0, 0, 0) self.window.setCentralWidget(self.main_widget) if len(geom) >= 4: self.setGeom(geom[0], geom[1], geom[2], geom[3]) # add here any extra turf to the widget you want in addition to the # grid # create the grid self.grid_widget = self.GridWidget(self.main_widget) self.main_layout.addWidget(self.grid_widget) self.grid_layout = QtWidgets.QGridLayout(self.grid_widget) self.grid_layout.setHorizontalSpacing(2) self.grid_layout.setVerticalSpacing(2) # ( int left, int top, int right, int bottom ) self.grid_layout.setContentsMargins(0, 0, 0, 0) class ScreenMenu(QuickMenu): title = "Change Screen" elements = [ QuickMenuElement(title="Screen 1"), QuickMenuElement(title="Screen 2") ] """ TODO: activate after gpu-hopping has been debugged self.screenmenu = ScreenMenu(self.window) self.screenmenu.screen_1.triggered.connect(self.test_slot) self.screenmenu.screen_2.triggered.connect(self.test_slot) """ if (len(self.gpu_handler.true_screens) > 1): # so, there's more than a single x screen: create a button for # changing x-screens self.button = QtWidgets.QPushButton("Change Screen", self.main_widget) self.main_layout.addWidget(self.button) self.button.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.button.clicked.connect(self.change_xscreen_slot) self.placeChildren()
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() """
def setupUi(self): self.setGeometry(QtCore.QRect(100, 100, 500, 500)) self.w = QtWidgets.QWidget(self) self.setCentralWidget(self.w) self.lay = QtWidgets.QGridLayout(self.w) self.button1 = QtWidgets.QPushButton("Button 1", self.w) self.button2 = QtWidgets.QPushButton("Button 2", self.w) self.check1 = QtWidgets.QRadioButton(self.w) self.check2 = QtWidgets.QRadioButton(self.w) self.lay.addWidget(self.button1, 0, 0) self.lay.addWidget(self.check1, 0, 1) self.lay.addWidget(self.button2, 1, 0) self.lay.addWidget(self.check2, 1, 1) self.button1.clicked.connect(self.button1_slot) self.button2.clicked.connect(self.button2_slot) self.process1.signals.pong.connect(self.pong1_slot) self.process2.signals.pong.connect(self.pong2_slot)
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)
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)
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)
def makeWidget(self, qscreen: QtGui.QScreen, geom: tuple = ()): # (re)create the widget, do the same for children # how children are placed on the parent widget, depends on the subclass self.window = self.ContainerWindow(self.signals, self.title, self.parent) # send to correct x-screen self.window.show() self.window.windowHandle().setScreen(qscreen) self.n_xscreen = self.gpu_handler.getXScreenNum( qscreen ) # the correct x-screen number must be passed upstream, to the VideoContainer # continue window / widget construction in the correct x screen self.main_widget = self.ContainerWidget(self.window) # a QTabWidget self.main_layout = QtWidgets.QVBoxLayout(self.main_widget) self.window.setCentralWidget(self.main_widget) if len(geom) >= 4: self.window.setGeometry(geom[0], geom[1], geom[2], geom[3]) # create tabs self.play_video_tab = QtWidgets.QWidget(None) self.play_video_lay = QtWidgets.QVBoxLayout(self.play_video_tab) self.calendar_tab = QtWidgets.QWidget(None) self.calendar_lay = QtWidgets.QVBoxLayout(self.calendar_tab) self.main_widget.addTab(self.play_video_tab, "Recordings") self.main_widget.addTab(self.calendar_tab, "Calendar") # **** Recordings tab ***** # create the grid into "the Recordings" tab (self.play_video_tab) self.grid_widget = self.GridWidget(self.play_video_tab) self.play_video_lay.addWidget(self.grid_widget) self.grid_layout = QtWidgets.QGridLayout(self.grid_widget) self.grid_layout.setHorizontalSpacing(2) self.grid_layout.setVerticalSpacing(2) # ( int left, int top, int right, int bottom ) self.grid_layout.setContentsMargins(0, 0, 0, 0) # put timeline widget under the grid self.timelinewidget = TimeLineWidget(datetime.date.today(), parent=self.play_video_tab) # self.timelinewidget.setLogLevel(logging.DEBUG) self.play_video_lay.addWidget(self.timelinewidget) # put buttons under the timeline self.buttons = QtWidgets.QWidget(self.play_video_tab) self.buttons_lay = QtWidgets.QHBoxLayout(self.buttons) self.play_video_lay.addWidget(self.buttons) self.play_button = QtWidgets.QPushButton("play", self.buttons) self.stop_button = QtWidgets.QPushButton("stop", self.buttons) self.zoom_to_fs_button = QtWidgets.QPushButton("limits", self.buttons) self.buttons_lay.addWidget(self.play_button) self.buttons_lay.addWidget(self.stop_button) self.buttons_lay.addWidget(self.zoom_to_fs_button) # **** Calendar tab ***** # put the calendar into the "Calendar" tab (self.calendar_tab) # calendar self.calendarwidget = CalendarWidget(datetime.date.today(), parent=self.calendar_tab) self.calendar_lay.addWidget(self.calendarwidget) """ self.playback_controller = PlaybackController( calendar_widget = self.calendarwidget, timeline_widget = self.timelinewidget, valkkafs_manager = self.valkkafsmanager, play_button = self.play_button, stop_button = self.stop_button ) """ self.widget_set = WidgetSet(calendar_widget=self.calendarwidget, timeline_widget=self.timelinewidget, play_button=self.play_button, stop_button=self.stop_button, zoom_to_fs_button=self.zoom_to_fs_button) self.playback_controller.register(self.widget_set) class ScreenMenu(QuickMenu): title = "Change Screen" elements = [ QuickMenuElement(title="Screen 1"), QuickMenuElement(title="Screen 2") ] """ TODO: activate after gpu-hopping has been debugged self.screenmenu = ScreenMenu(self.window) self.screenmenu.screen_1.triggered.connect(self.test_slot) self.screenmenu.screen_2.triggered.connect(self.test_slot) """ if (len(self.gpu_handler.true_screens) > 1): # so, there's more than a single x screen: create a button for # changing x-screens self.button = QtWidgets.QPushButton("Change Screen", self.main_widget) self.main_layout.addWidget(self.button) self.button.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.button.clicked.connect(self.change_xscreen_slot) self.placeChildren()