Beispiel #1
0
 def __init__(self, sms_data, *args, **kwargs):
     super(EditSMSLink, self).__init__(*args, **kwargs)
     layout = QVBoxLayout(margin=0)
     print(sms_data)
     self.sms_id = sms_data['id']
     # 时间布局
     date_time_layout = QHBoxLayout()
     self.date_edit = QDateEdit(QDate.fromString(sms_data['date'], 'yyyy-MM-dd'))
     self.date_edit.setCalendarPopup(True)
     self.date_edit.setDisplayFormat('yyyy-MM-dd')
     date_time_layout.addWidget(QLabel('日期:'))
     date_time_layout.addWidget(self.date_edit)
     date_time_layout.addWidget(QLabel('时间:'))
     self.time_edit = QTimeEdit(QTime.fromString(sms_data['time'], 'HH:mm:ss'))
     self.time_edit.setDisplayFormat('HH:mm:ss')
     date_time_layout.addWidget(self.time_edit)
     date_time_layout.addStretch()
     layout.addLayout(date_time_layout)
     self.show_tips = QLabel()
     self.text_edit = QTextEdit(textChanged=self.set_show_tips_null)
     self.text_edit.setPlainText(sms_data['content'])
     layout.addWidget(self.text_edit)
     layout.addWidget(self.show_tips)
     layout.addWidget(QPushButton('确定', clicked=self.commit_sms_edited), alignment=Qt.AlignRight)
     self.setLayout(layout)
     self.resize(420, 240)
     self.setWindowTitle('编辑短信通')
Beispiel #2
0
        def createSearch(self):
            self.formGroupBox = QGroupBox("Search Form")
            self.formGroupBox1 = QGroupBox()
            layout = QFormLayout()

            self.fromText1 = QLineEdit()
            self.toText1 = QLineEdit()


            layout.addRow(QLabel("From:"), self.fromText1)
            layout.addRow(QLabel("To:"), self.toText1)

            defaultDate = QDate.currentDate().toPyDate()
            self.deptDate1 = QDateEdit(QDate(defaultDate.year, defaultDate.month, defaultDate.day))
            self.arrDate1 = QDateEdit(QDate(defaultDate.year, defaultDate.month, defaultDate.day))

            layout.addRow(QLabel("Departure Date:"), self.deptDate1)
            layout.addRow(QLabel("Arrival Date:"), self.arrDate1)

            defaultTime = QTime.currentTime().toPyTime()
            self.deptTime1 = QTimeEdit(QTime(defaultTime.hour, defaultTime.minute, defaultTime.second))
            self.arrTime2 = QTimeEdit(QTime(defaultTime.hour, defaultTime.minute, defaultTime.second))

            layout.addRow(QLabel("Departure Time:"), self.deptTime1)
            layout.addRow(QLabel("Arrival Time:"), self.arrTime2)
            self.formGroupBox.setLayout(layout)
 def createLayout(self):
     """Create widget to control the countdown browser source."""
     layout = QGridLayout()
     self.rb_static = QRadioButton(_("Static Countdown to date:"), self)
     layout.addWidget(self.rb_static, 0, 0)
     self.rb_dynamic = QRadioButton(_("Dynamic Countdown duration:"), self)
     self.rb_dynamic.setChecked(True)
     self.rb_dynamic.toggled.connect(self.toggleRadio)
     layout.addWidget(self.rb_dynamic, 1, 0)
     self.te_datetime = QDateTimeEdit()
     self.te_datetime.setCalendarPopup(True)
     self.te_datetime.setContextMenuPolicy(Qt.CustomContextMenu)
     self.te_datetime.customContextMenuRequested.connect(
         self.openDateTimeMenu)
     layout.addWidget(self.te_datetime, 0, 1)
     self.te_duration = QTimeEdit()
     self.te_duration.setDisplayFormat("HH 'h' mm 'm' ss 's'")
     self.te_duration.setContextMenuPolicy(Qt.CustomContextMenu)
     self.te_duration.customContextMenuRequested.connect(
         self.openDurationMenu)
     layout.addWidget(self.te_duration, 1, 1)
     self.event_label = QLabel(' ' + _('Event description:'))
     layout.addWidget(self.event_label, 0, 2)
     self.le_desc = QLineEdit()
     self.le_desc.setAlignment(Qt.AlignCenter)
     layout.addWidget(self.le_desc, 0, 3, 1, 2)
     self.cb_restart = QCheckBox(
         _('Restart countdown when source becomes active'))
     layout.addWidget(self.cb_restart, 1, 2, 1, 2)
     self.pb_start = QPushButton(" " + _('Start Countdown') + " ")
     layout.addWidget(self.pb_start, 1, 4)
     layout.setColumnStretch(2, 1)
     layout.setColumnStretch(3, 2)
     self.setLayout(layout)
Beispiel #4
0
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.time_label = QLabel("Время начала", self)
        self.time_edit = QTimeEdit()

        self.date_label = QLabel("Дата", parent=self)
        self.date_edit = QDateEdit(calendarPopup=True)

        self.subjects_label = QLabel("Темы", self)
        self.subjects_list = QListWidget(self)

        layout = QVBoxLayout()
        layout.addWidget(self.time_label)
        layout.addWidget(self.time_edit)
        layout.addWidget(self.date_label)
        layout.addWidget(self.date_edit)
        layout.addWidget(self.subjects_label)
        layout.addWidget(self.subjects_list)

        self.ok_btn = QPushButton('OK', parent=self)
        self.ok_btn.clicked.connect(self.ok)
        self.ok_cancel = QPushButton('Cancel', parent=self)
        self.ok_cancel.clicked.connect(self.cancel)

        btn_layout = QHBoxLayout()
        btn_layout.addWidget(self.ok_btn)
        btn_layout.addWidget(self.ok_cancel)

        layout.addLayout(btn_layout)
        layout.addStretch(0)

        self.setLayout(layout)

        self.presenter = StudyingPresenter(self)
    def createFormFields(self):
        self.frmFieldProgram = QLineEdit(self.centralwidget)
        self.frmLayout.addRow("Program:", self.frmFieldProgram)

        self.frmComboStation = QComboBox(self.centralwidget)
        self.frmLayout.addRow("Station:", self.frmComboStation)
        self.frmComboFreq = QComboBox(self.centralwidget)
        self.frmLayout.addRow("Station Frequency:", self.frmComboFreq)
        self.frmComboMode = QComboBox(self.centralwidget)
        self.frmLayout.addRow("Modulation Mode:", self.frmComboMode)
        self.frmComboBandwidth = QComboBox(self.centralwidget)
        self.frmLayout.addRow("Bandwidth:", self.frmComboBandwidth)
        self.frmComboModem = QComboBox(self.centralwidget)
        self.frmLayout.addRow("Modem:", self.frmComboModem)
        self.frmComboCenterFreq = QComboBox(self.centralwidget)
        self.frmLayout.addRow("Center Frequency:", self.frmComboCenterFreq)
        #Day of Week = DOW
        self.frmComboDOW = QComboBox(self.centralwidget)
        self.frmLayout.addRow("UTC Day of Week:", self.frmComboDOW)

        self.frmUTCTimeEdit = QTimeEdit(self.centralwidget)
        self.frmLayout.addRow("UTC Time:", self.frmUTCTimeEdit)
        self.frmUTCTimeEdit.setDisplayFormat('hh:mm')
        utctime = QTime.fromString('00:00', 'hh:mm')
        self.frmUTCTimeEdit.setTime(utctime)

        self.frmCheckBoxActive = QCheckBox(self.centralwidget)
        self.frmCheckBoxActive.setChecked(True)
        self.frmLayout.addRow("Active:", self.frmCheckBoxActive)
        self.frmTextEditNotes = QTextEdit(self.centralwidget)
        self.frmLayout.addRow("Notes:", self.frmTextEditNotes)
Beispiel #6
0
    def createedits(self):
        str_select_fio = """
                       select FIO
                       from driver;
                       """
        str_select_route = """
                       select no_route
                       from route;
                       """
        str_select_type = """
                       select type_t
                       from type_transport;
                       """
        self.driver_edit = QComboBox()
        self.route_edit = QComboBox()
        self.transport_edit = QComboBox()

        self.selects_for_combobox(self.driver_edit, str_select_fio)
        self.selects_for_combobox(self.route_edit, str_select_route)
        self.selects_for_combobox(self.transport_edit, str_select_type)

        self.arivaltime_edit = QTimeEdit()
        self.departuretime_edit = QTimeEdit()
        self.date_edit = QDateEdit()

        self.edit_list = (self.route_edit, self.transport_edit,
                          self.driver_edit, self.arivaltime_edit,
                          self.departuretime_edit, self.date_edit)
        i = 0
        for item in self.edit_list:
            self.grid_layout.addWidget(self.edit_list[i], 2, i)
            i += 1
Beispiel #7
0
    def __init__(self, parent=None):
        """Initialize the TimeSynchronizer instance."""
        super().__init__(parent=parent)

        self.instruction_label = QLabel('Adjust desired synchronization time and press '
                                        '"Sync" button to set reference clock time.')
        self.instruction_label.setWordWrap(True)

        self.time_timeedit = QTimeEdit()
        self.time_timeedit.setDisplayFormat(defaults.DATETIME_FORMAT)
        font = self.time_timeedit.font()
        font.setPointSize(self.TIME_POINT_SIZE)
        self.time_timeedit.setFont(font)

        self.sync_button = QPushButton('Sync')
        font = self.sync_button.font()
        font.setPointSize(self.BUTTON_POINT_SIZE)
        self.sync_button.setFont(font)

        self.setLayout(QVBoxLayout())
        self.layout().addWidget(self.instruction_label)
        self.layout().addWidget(self.time_timeedit)
        self.layout().addWidget(self.sync_button)

        self.sync_button.clicked.connect(self.handle_clicked)
Beispiel #8
0
    def __init__(self, time_list: TimeList, index=-1):
        self.parent_time_list = time_list
        self.current_index = index

        # setup UI
        self.time_selection = QTimeEdit()
        self.temp_selection = QSpinBox()
        self.pb_minus = QPushButton()
        self.pb_plus = QPushButton()
        height = 40
        # set max height
        self.time_selection.setMaximumHeight(height)
        self.temp_selection.setMaximumHeight(height)
        self.pb_minus.setMaximumHeight(height)
        self.pb_plus.setMaximumHeight(height)
        # set min height
        self.time_selection.setMinimumHeight(height)
        self.temp_selection.setMinimumHeight(height)
        self.pb_minus.setMinimumHeight(height)
        self.pb_plus.setMinimumHeight(height)
        # set pb width
        self.pb_minus.setMaximumWidth(height)
        self.pb_plus.setMaximumWidth(height)
        # add elements
        self.addWidget(self.time_selection)
        self.addWidget(self.temp_selection)
        self.addWidget(self.pb_plus)
        self.addWidget(self.pb_minus)
Beispiel #9
0
    def tab_1(self):
        # main layout
        layout = QVBoxLayout()

        task_name = QLabel('Task Name')
        due_date = QLabel('Due Date')
        due_time = QLabel('Due Time')

        if (self.button_name == "Add"):
            self.task_name_input = QLineEdit()
            self.due_date_input = QDateEdit()
            self.due_date_input.setMinimumDate(QDate.currentDate())
            self.due_time_input = QTimeEdit()

        else:

            task_info = user_tasks.get_task(self.identifier)

            self.task_name_input = QLineEdit(task_info[1])
            self.due_date_input = QDateEdit(task_info[2].date())
            self.due_date_input.setMinimumDate(QDate.currentDate())
            self.due_time_input = QTimeEdit(task_info[2].time())

        layout.addWidget(task_name)
        layout.addWidget(self.task_name_input)
        layout.addWidget(due_date)
        layout.addWidget(self.due_date_input)
        layout.addWidget(due_time)
        layout.addWidget(self.due_time_input)
        layout.addSpacing(20)

        self.tabs.tab_1.setLayout(layout)
class QTimeInputDialog(QDialog):

    def __init__(self, title='', description='', initial=QtCore.QTime(),
                 minValue=QtCore.QTime(), maxValue=QtCore.QTime(),
                 dformat='mm.ss', parent=None):
        super().__init__(parent)

        self.setWindowTitle(title)

        self.setWindowModality(QtCore.Qt.ApplicationModal)
        self.setMaximumSize(300, 110)
        self.setMinimumSize(300, 110)
        self.resize(300, 130)

        self.label = QLabel(description, self)
        self.label.setGeometry(10, 0, 280, 20)
        self.label.setAlignment(QtCore.Qt.AlignCenter)

        self.time = QTimeEdit(self)
        self.time.setDisplayFormat(dformat)
        self.time.setMaximumTime(maxValue)
        self.time.setMinimumTime(minValue)
        self.time.setTime(initial)
        self.time.setGeometry(10, 30, 280, 25)

        self.acceptButton = QPushButton(self)
        self.acceptButton.setGeometry(QtCore.QRect(180, 80, 100, 25))
        self.acceptButton.setText("Ok")

        self.rejectButton = QPushButton(self)
        self.rejectButton.setGeometry(QtCore.QRect(60, 80, 100, 25))
        self.rejectButton.setText("Cancel")

        self.rejectButton.clicked.connect(self.reject)
        self.acceptButton.clicked.connect(self.accept)
Beispiel #11
0
        def layoutOne(self):
            QWidget().setLayout(self.layout())
            checkBtn = QCheckBox("Return")
            self.formGroupBox = QGroupBox("Search Form")
            self.formGroupBox1 = QGroupBox()
            layout = QFormLayout()

            self.fromText1 = QLineEdit()
            self.toText1 = QLineEdit()

            defaultDate = QDate.currentDate().toPyDate()
            layout.addRow(QLabel("From:"), self.fromText1)
            layout.addRow(QLabel("To:"), self.toText1)

            self.deptDate1 = QDateEdit(QDate(defaultDate.year, defaultDate.month, defaultDate.day))
            self.arrDate1 = QDateEdit(QDate(defaultDate.year, defaultDate.month, defaultDate.day))

            layout.addRow(QLabel("Departure Date:"), self.deptDate1)
            layout.addRow(QLabel("Arrival Date:"), self.arrDate1)

            defaultTime = QTime.currentTime().toPyTime()
            self.deptTime1 = QTimeEdit(QTime(defaultTime.hour, defaultTime.minute, defaultTime.second))
            self.arrTime2 = QTimeEdit(QTime(defaultTime.hour, defaultTime.minute, defaultTime.second))

            layout.addRow(QLabel("Departure Time:"), self.deptTime1)
            layout.addRow(QLabel("Arrival Time:"), self.arrTime2)
            self.formGroupBox.setLayout(layout)
            checkBtn.stateChanged.connect(self.transform)
Beispiel #12
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.setLayout(QVBoxLayout())
        self.layout().setAlignment(QtCore.Qt.AlignTop)

        self.cue_id = -1

        self.cueDialog = CueSelectDialog(
            cues=Application().cue_model.filter(MediaCue), parent=self)

        self.cueGroup = QGroupBox(self)
        self.cueGroup.setLayout(QVBoxLayout())
        self.layout().addWidget(self.cueGroup)

        self.cueButton = QPushButton(self.cueGroup)
        self.cueButton.clicked.connect(self.select_cue)
        self.cueGroup.layout().addWidget(self.cueButton)

        self.cueLabel = QLabel(self.cueGroup)
        self.cueLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.cueGroup.layout().addWidget(self.cueLabel)

        self.seekGroup = QGroupBox(self)
        self.seekGroup.setLayout(QHBoxLayout())
        self.layout().addWidget(self.seekGroup)

        self.seekEdit = QTimeEdit(self.seekGroup)
        self.seekEdit.setDisplayFormat('HH.mm.ss.zzz')
        self.seekGroup.layout().addWidget(self.seekEdit)

        self.seekLabel = QLabel(self.seekGroup)
        self.seekLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.seekGroup.layout().addWidget(self.seekLabel)

        self.retranslateUi()
 def __init__(self):
     super(Demo, self).__init__()
     self.datetime_1 = QDateTimeEdit(self)                             # 1
     self.datetime_1.dateChanged.connect(lambda: print('Date Changed!'))
     self.datetime_2 = QDateTimeEdit(QDateTime.currentDateTime(), self)  # 2
     self.datetime_2.setDisplayFormat('yyyy-MM-dd HH:mm:ss')
     self.datetime_2.timeChanged.connect(lambda: print('Time Changed!'))
     print(self.datetime_2.date())
     print(self.datetime_2.time())
     print(self.datetime_2.dateTime())
     self.datetime_3 = QDateTimeEdit(QDateTime.currentDateTime(), self) # 3
     self.datetime_3.dateTimeChanged.connect(lambda: print('DateTimeChanged!'))
     self.datetime_3.setCalendarPopup(True)
     self.datetime_4 = QDateTimeEdit(QDate.currentDate(), self)       # 4
     self.datetime_5 = QDateTimeEdit(QTime.currentTime(), self)
     self.date = QDateEdit(QDate.currentDate(), self)                 # 5
     self.date.setDisplayFormat('yyyy/MM/dd')
     print(self.date.date())
     self.time = QTimeEdit(QTime.currentTime(), self)                 # 6
     self.time.setDisplayFormat('HH:mm:ss')
     print(self.time.time())
     self.v_layout = QVBoxLayout()
     self.v_layout.addWidget(self.datetime_1)
     self.v_layout.addWidget(self.datetime_2)
     self.v_layout.addWidget(self.datetime_3)
     self.v_layout.addWidget(self.datetime_4)
     self.v_layout.addWidget(self.datetime_5)
     self.v_layout.addWidget(self.date)
     self.v_layout.addWidget(self.time)
     self.setLayout(self.v_layout)
    def init_ui(self, alert):
        """Initialization helper method.

        Attributes:
            alert: The :class:`~_clockalarm.SimpleAlert` to edit
        """
        group_box = QGroupBox(self)
        group_box.setTitle('Set up a new Simple Alert')
        date_time = time.time() + 15
        self.periodicity_edit = QTimeEdit()
        self.periodicity_edit.setDisplayFormat("HH:mm:ss")
        self.date_time_edit = QDateTimeEdit(
            QDateTime.fromSecsSinceEpoch(date_time))
        self.alert_message_edit = QLineEdit()
        self.font_family_edit = QLineEdit()
        self.font_size_edit = QSpinBox()
        self.font_size_edit.setMaximum(64)
        self.font_size_edit.setSingleStep(2)
        self.color_edit = ColorSelectorWidget()
        self.sound_edit = SoundSelectorWidget()
        self.accept_button = QPushButton('Validate')

        if alert:
            group_box.setTitle('Edit a Simple Alert')
            self.alert_message_edit.setText(
                alert.get_notification().get_message())
            self.date_time_edit.setDateTime(
                QDateTime.fromSecsSinceEpoch(alert.trigger_time))
            if alert.periodicity is not None:
                self.periodicity_edit.setTime(
                    QTime(0, 0).addSecs(alert.periodicity))
            if alert.notification.font_family is not None:
                self.font_family_edit.setText(alert.notification.font_family)
            if alert.notification.font_size is not None:
                self.font_size_edit.setValue(alert.notification.font_size)
            if alert.notification.color_hex is not None:
                self.color_edit.set_hex_color(alert.notification.color_hex)
            if alert.notification.sound is not None:
                self.sound_edit.set_sound(alert.notification.sound)

        grid_layout = QGridLayout(group_box)
        grid_layout.addWidget(QLabel('Message'), 1, 1)
        grid_layout.addWidget(self.alert_message_edit, 1, 2)
        grid_layout.addWidget(QLabel('Date and Time'), 2, 1)
        grid_layout.addWidget(self.date_time_edit, 2, 2)
        grid_layout.addWidget(QLabel('Periodicity'), 3, 1)
        grid_layout.addWidget(self.periodicity_edit, 3, 2)
        grid_layout.addWidget(QLabel('Font'), 4, 1)
        grid_layout.addWidget(self.font_family_edit, 4, 2)
        grid_layout.addWidget(self.font_size_edit, 4, 3)
        grid_layout.addWidget(QLabel('Text color'), 5, 1)
        grid_layout.addWidget(self.color_edit, 5, 2)
        grid_layout.addWidget(QLabel('Notification sound'), 6, 1)
        grid_layout.addWidget(self.sound_edit, 6, 2)
        grid_layout.addWidget(self.accept_button, 7, 3)

        group_box.setLayout(grid_layout)
        group_box.adjustSize()
    def set_layout(self):
        # Set up basic Stuff here
        vbox = QVBoxLayout()
        group1 = QGroupBox("Employee")
        form1 = QFormLayout()
        group1.setLayout(form1)

        self.namelabel = QLabel("Name")
        self.nameLineEdit = QLineEdit("")
        self.nameLineEdit.setPlaceholderText("Enter Employee Name")
        form1.setWidget(0, QFormLayout.LabelRole, self.namelabel)
        form1.setWidget(0, QFormLayout.FieldRole, self.nameLineEdit)

        datelabel = QLabel("Date Started")
        self.dateLineEdit = QDateEdit()
        self.dateLineEdit.setDate(QDate(2021, 1, 1))
        self.dateLineEdit.setCalendarPopup(True)
        form1.setWidget(1, QFormLayout.LabelRole, datelabel)
        form1.setWidget(1, QFormLayout.FieldRole, self.dateLineEdit)

        self.timestartlabel = QLabel("Time Started")
        self.timestartLineEdit = QTimeEdit()
        self.timestartLineEdit.setTime(QTime(7, 0, 0))
        # Set time constrain
        self.timestartLineEdit.timeChanged.connect(self.connect_start_end)
        form1.setWidget(2, QFormLayout.LabelRole, self.timestartlabel)
        form1.setWidget(2, QFormLayout.FieldRole, self.timestartLineEdit)

        timeendedlabel = QLabel("Time Ended")
        self.timeendeLineEdit = QTimeEdit()
        self.timeendeLineEdit.setTime(QTime(self.timestartLineEdit.time()))
        # connect min time of endtime as starttime
        self.timeendeLineEdit.timeChanged.connect(
            self.set_min_time)  # you can use lambda function to get 1 line
        form1.setWidget(3, QFormLayout.LabelRole, timeendedlabel)
        form1.setWidget(3, QFormLayout.FieldRole, self.timeendeLineEdit)

        ##Group 2 (Employer)
        group2 = QGroupBox("Employer")
        form2 = QFormLayout()
        group2.setLayout(form2)
        # Add items to form
        amountlabel = QLabel("Amount Paid Per Hour")
        self.amountLine = QLineEdit("$5.00")
        self.amountLine.setEnabled(False)

        form2.setWidget(0, QFormLayout.LabelRole, amountlabel)
        form2.setWidget(0, QFormLayout.FieldRole, self.amountLine)

        ##ADD BUTTON
        self.addbtn = QPushButton("Add Emmployee")
        self.addbtn.clicked.connect(self.saved_messagebox)

        ## ADD ITEMS TO LAYOUT
        vbox.addWidget(group1)
        vbox.addWidget(group2)
        vbox.addWidget(self.addbtn, 0, Qt.AlignHCenter)
        self.setLayout(vbox)
Beispiel #16
0
 def init_timedit(self):
     self.time = QTime()
     self.tedit = QTimeEdit(self)
     if not self.update:
         self._timeval = self.time.currentTime()
     else:
         self._timeval = QtCore.QTime.fromString(self._timeval, 'HH:mm:ss')
     self.tedit.setTime(self._timeval)
     self.tedit.move(5, 260)
Beispiel #17
0
class EditSMSLink(QDialog):
    def __init__(self, sms_data, *args, **kwargs):
        super(EditSMSLink, self).__init__(*args, **kwargs)
        layout = QVBoxLayout(margin=0)
        print(sms_data)
        self.sms_id = sms_data['id']
        # 时间布局
        date_time_layout = QHBoxLayout()
        self.date_edit = QDateEdit(QDate.fromString(sms_data['date'], 'yyyy-MM-dd'))
        self.date_edit.setCalendarPopup(True)
        self.date_edit.setDisplayFormat('yyyy-MM-dd')
        date_time_layout.addWidget(QLabel('日期:'))
        date_time_layout.addWidget(self.date_edit)
        date_time_layout.addWidget(QLabel('时间:'))
        self.time_edit = QTimeEdit(QTime.fromString(sms_data['time'], 'HH:mm:ss'))
        self.time_edit.setDisplayFormat('HH:mm:ss')
        date_time_layout.addWidget(self.time_edit)
        date_time_layout.addStretch()
        layout.addLayout(date_time_layout)
        self.show_tips = QLabel()
        self.text_edit = QTextEdit(textChanged=self.set_show_tips_null)
        self.text_edit.setPlainText(sms_data['content'])
        layout.addWidget(self.text_edit)
        layout.addWidget(self.show_tips)
        layout.addWidget(QPushButton('确定', clicked=self.commit_sms_edited), alignment=Qt.AlignRight)
        self.setLayout(layout)
        self.resize(420, 240)
        self.setWindowTitle('编辑短信通')

    def set_show_tips_null(self):
        self.show_tips.setText('')

    # 确定提交修改
    def commit_sms_edited(self):
        text = self.text_edit.toPlainText().strip(' ')
        if not text:
            self.show_tips.setText('请输入内容。')
            return
        # 提交
        try:
            r = requests.put(
                url=settings.SERVER_ADDR + 'info/sms/' + str(self.sms_id) + '/?mc=' + settings.app_dawn.value('machine'),
                headers={'AUTHORIZATION': settings.app_dawn.value('AUTHORIZATION')},
                data=json.dumps({
                    'date': self.date_edit.text(),
                    'time': self.time_edit.text(),
                    'content': text
                })
            )
            response = json.loads(r.content.decode('utf-8'))
            if r.status_code != 201:
                raise ValueError(response['message'])
        except Exception as e:
            QMessageBox.information(self, '错误', str(e))
        else:
            QMessageBox.information(self,'成功', '修改成功!')
            self.close()
Beispiel #18
0
    def __init__(self):
        QWidget.__init__(self)

        # Set Time One Group
        self.time_one_calendar = QCalendarWidget()
        self.time_one_country_combobox = QComboBox()
        self.time_one_vbox = QVBoxLayout()
        self.time_one_groupbox = QGroupBox("Time One")
        self.time_one_bottom_hbox = QHBoxLayout()
        self.time_one_time_edit = QTimeEdit()
        self.time_one_default_button = QPushButton()
        self.time_one_default_button.setIcon(QIcon("%s/gnome-set-time.png" % icon_path))
        self.time_one_default_button.setMaximumSize(50, 50)
        self.time_one_bottom_hbox.addWidget(self.time_one_time_edit)
        self.time_one_bottom_hbox.addWidget(self.time_one_default_button)
        self.time_one_vbox.addWidget(self.time_one_country_combobox)
        self.time_one_vbox.addWidget(self.time_one_calendar)
        self.time_one_vbox.addLayout(self.time_one_bottom_hbox)
        self.time_one_groupbox.setLayout(self.time_one_vbox)

        # Set Time Two Group
        self.time_two_groupbox = QGroupBox("Time Two")
        self.time_two_calendar = QCalendarWidget()
        self.time_two_vbox = QVBoxLayout()
        self.time_two_country_combobox = QComboBox()
        self.time_two_bottom_hbox = QHBoxLayout()
        self.time_two_time_edit = QTimeEdit()
        self.time_two_default_button = QPushButton()
        self.time_two_default_button.setIcon(QIcon("%s/gnome-set-time.png" % icon_path))
        self.time_two_default_button.setMaximumSize(50, 50)
        self.time_two_bottom_hbox.addWidget(self.time_two_time_edit)
        self.time_two_bottom_hbox.addWidget(self.time_two_default_button)
        self.time_two_vbox.addWidget(self.time_two_country_combobox)
        self.time_two_vbox.addWidget(self.time_two_calendar)
        self.time_two_vbox.addLayout(self.time_two_bottom_hbox)
        self.time_two_groupbox.setLayout(self.time_two_vbox)

        # Set main layout
        self.main_layout = QHBoxLayout()
        self.main_layout.addWidget(self.time_one_groupbox)
        self.main_layout.addWidget(self.time_two_groupbox)
        self.setLayout(self.main_layout)

        # Wire-up your widgets!
        self.time_one_connect()
        self.time_two_connect()
        self.time_one_default_button.clicked.connect(self.set_local_time_one)
        self.time_two_default_button.clicked.connect(self.set_local_time_two)

        # Set the local time for time one
        self.set_local_country()
        self.set_local_time_one()

        # Finally, convert the second time based on the first
        self.convert_timeone_to_timetwo()
Beispiel #19
0
def get_widget_from_ranking(ranking):
    assert isinstance(ranking, RankingItem)
    qual = ranking.qual.name
    qual_checkbox = QCheckBox(ranking.qual.get_title())
    qual_checkbox.setFixedWidth(50)
    qual_checkbox.setObjectName(qual + '_checkbox')

    type_combo = AdvComboBox()
    type_combo.addItems({_('Rank'), _('Max place'), _('Result time')})
    type_combo.setFixedWidth(150)
    type_combo.setObjectName(qual + '_combo')

    max_place = QSpinBox()
    max_place.setValue(0)
    max_place.setFixedWidth(70)
    max_place.setObjectName(qual + '_place')

    max_time = QTimeEdit()
    max_time.setFixedWidth(70)
    max_time.setDisplayFormat("hh:mm:ss")
    max_time.setObjectName(qual + '_time')

    def select_type():
        text = type_combo.currentText()
        max_place.setVisible(text == _('Max place'))
        max_time.setVisible(text == _('Result time'))

    def set_enabled():
        flag = qual_checkbox.isChecked()
        type_combo.setEnabled(flag)
        max_place.setEnabled(flag)
        max_time.setEnabled(flag)

    type_combo.currentIndexChanged.connect(select_type)
    qual_checkbox.stateChanged.connect(set_enabled)

    if ranking.use_scores:
        type_combo.setCurrentText(_('Rank'))
    elif ranking.max_place:
        type_combo.setCurrentText(_('Max place'))
        max_place.setValue(ranking.max_place)
    else:
        type_combo.setCurrentText(_('Result time'))
        max_time.setTime(time_to_qtime(ranking.max_time))

    qual_checkbox.setChecked(ranking.is_active)
    select_type()
    set_enabled()

    layout = QHBoxLayout()
    layout.addWidget(qual_checkbox)
    layout.addWidget(type_combo)
    layout.addWidget(max_place)
    layout.addWidget(max_time)
    return layout
Beispiel #20
0
class ClassTimePicker(QWidget):
    def __init__(self, parent=None):
        super(ClassTimePicker, self).__init__(parent=parent)
        self.time_selector = QTimeEdit()
        self.time_selector.sizePolicy().setRetainSizeWhenHidden(False)
        self.time_selector.setDisplayFormat("hh:mm AP")
        self.time_selector.setTime(QTime(12, 0, 0))

        self.day_picker = DayPicker()
        self.day_picker.sizePolicy().setRetainSizeWhenHidden(False)

        self.layout = QHBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.addWidget(self.time_selector)
        self.layout.addWidget(self.day_picker)
        self.setLayout(self.layout)

    def get_time(self):
        return self.time_selector.time()

    def set_time(self, time: QTime):
        self.time_selector.setTime(time)

    def set_day(self, day):
        for b in self.day_picker.buttons:
            if b.text() == day:
                b.click()

    def is_valid(self):
        return self.day_picker.get_day() is not None
Beispiel #21
0
class CreateNewTradePolicyPopup(QDialog):
    def __init__(self, *args, **kwargs):
        super(CreateNewTradePolicyPopup, self).__init__(*args, **kwargs)
        layout = QVBoxLayout(margin=0)
        # 时间布局
        date_time_layout = QHBoxLayout()
        self.date_edit = QDateEdit(QDate.currentDate())
        self.date_edit.setCalendarPopup(True)
        self.date_edit.setDisplayFormat('yyyy-MM-dd')
        date_time_layout.addWidget(QLabel('日期:'))
        date_time_layout.addWidget(self.date_edit)
        date_time_layout.addWidget(QLabel('时间:'))
        self.time_edit = QTimeEdit(QTime.currentTime())
        self.time_edit.setDisplayFormat('HH:mm:ss')
        date_time_layout.addWidget(self.time_edit)
        date_time_layout.addStretch()
        layout.addLayout(date_time_layout)
        self.text_edit = QTextEdit(textChanged=self.set_show_tips_null)
        layout.addWidget(self.text_edit)
        self.show_tips = QLabel()
        layout.addWidget(self.show_tips)
        layout.addWidget(QPushButton('确定', clicked=self.commit_trade_policy), alignment=Qt.AlignRight)
        self.setLayout(layout)
        self.resize(400, 200)
        self.setWindowTitle('新建短信通')

    def set_show_tips_null(self):
        self.show_tips.setText('')

    # 确定增加
    def commit_trade_policy(self):
        text = self.text_edit.toPlainText().strip(' ')
        if not text:
            self.show_tips.setText('请输入内容。')
            return
        # 提交
        try:
            r = requests.post(
                url=settings.SERVER_ADDR + 'info/trade-policy/?mc=' + settings.app_dawn.value('machine'),
                headers={'AUTHORIZATION': settings.app_dawn.value('AUTHORIZATION')},
                data=json.dumps({
                    'date': self.date_edit.text(),
                    'time': self.time_edit.text(),
                    'content': text
                })
            )
            response = json.loads(r.content.decode('utf-8'))
            if r.status_code != 201:
                raise ValueError(response['message'])
        except Exception as e:
            self.show_tips.setText(str(e))
        else:
            self.show_tips.setText(response['message'])
    def createEditor(self, parent, option, index):
        editor = QTimeEdit(parent=parent)

        editor.setMinimumTime(datetime.time(hour=8, minute=30, second=30))
        editor.setMaximumTime(datetime.time(hour=23, minute=30, second=30))
        editor.setDisplayFormat("HH:mm:ss")

        # setFrame(): tell whether the line edit draws itself with a frame.
        # If enabled (the default) the line edit draws itself inside a frame, otherwise the line edit draws itself without any frame.
        editor.setFrame(False)

        return editor
Beispiel #23
0
 def __init__(self, value, lst_base_date, parent=None):
     super().__init__(parent)
     layout = QHBoxLayout(self)
     self.lst_base_date = lst_base_date
     # offset to lst base edit
     self.days = QSpinBox(self)
     self.days.setMinimum(-10) # somewhat arbitrary value
     self.days.setValue((value.date() - lst_base_date).days)
     layout.addWidget(self.days)
     self.time = QTimeEdit(self)
     self.time.setDisplayFormat("hh:mm:ss")
     self.time.setTime(value.time())
     layout.addWidget(self.time)
Beispiel #24
0
 def __init__(self, parent=None):
     super(Downtime, self).__init__(parent)
     self.setWindowTitle('Request a Downtime')
     self.setWindowFlags(Qt.FramelessWindowHint)
     self.setStyleSheet(get_css())
     self.setWindowIcon(QIcon(get_image_path('icon')))
     self.setMinimumSize(360, 460)
     # Fields
     self.fixed = True
     self.duration = QTimeEdit()
     self.start_time = QDateTimeEdit()
     self.end_time = QDateTimeEdit()
     self.comment_edit = QTextEdit()
Beispiel #25
0
class CreateNewSMSLink(QDialog):
    def __init__(self, *args, **kwargs):
        super(CreateNewSMSLink, self).__init__(*args, **kwargs)
        self.setAttribute(Qt.WA_DeleteOnClose)
        layout = QVBoxLayout()
        # 时间布局
        date_time_layout = QHBoxLayout()
        self.date_edit = QDateEdit(QDate.currentDate())
        self.date_edit.setCalendarPopup(True)
        self.date_edit.setDisplayFormat('yyyy-MM-dd')
        date_time_layout.addWidget(QLabel('日期:'))
        date_time_layout.addWidget(self.date_edit)
        date_time_layout.addWidget(QLabel('时间:'))
        self.time_edit = QTimeEdit(QTime.currentTime())
        self.time_edit.setDisplayFormat('HH:mm:ss')
        date_time_layout.addWidget(self.time_edit)
        date_time_layout.addStretch()
        layout.addLayout(date_time_layout)
        self.text_edit = QTextEdit()
        layout.addWidget(self.text_edit)
        layout.addWidget(QPushButton('确定', clicked=self.commit_sms), alignment=Qt.AlignRight)
        self.setLayout(layout)
        self.setFixedSize(400, 200)
        self.setWindowTitle('新建短信通')


    # 确定增加
    def commit_sms(self):
        text = self.text_edit.toPlainText().strip()
        if not text:
            QMessageBox.information(self,'错误', '请输入内容。')
            return
        # 提交
        try:
            r = requests.post(
                url=settings.SERVER_ADDR + 'advise/shortmessage/',
                headers={'Content-Type': 'application/json;charset=utf8'},
                data=json.dumps({
                    'utoken':settings.app_dawn.value('AUTHORIZATION'),
                    'custom_time': self.date_edit.text() + ' ' + self.time_edit.text(),
                    'content': text
                })
            )
            response = json.loads(r.content.decode('utf-8'))
            if r.status_code != 201:
                raise ValueError(response['message'])
        except Exception as e:
            QMessageBox.information(self,'错误', str(e))
        else:
            QMessageBox.information(self,'成功', "新增成功")
            self.close()
class StartTimeChangeDialog(QDialog):
    def __init__(self):
        super().__init__(GlobalAccess().get_main_window())
        self.time_format = 'hh:mm:ss'

    def exec(self):
        self.init_ui()
        return super().exec()

    def init_ui(self):
        self.setWindowTitle(_('Start time change'))
        self.setWindowIcon(QIcon(config.ICON))
        self.setSizeGripEnabled(False)
        self.setModal(True)
        self.layout = QFormLayout(self)

        self.time_add = QRadioButton(_('Add'))
        self.time_add.setChecked(True)
        self.time_reduce = QRadioButton(_('Reduce'))
        self.time_value = QTimeEdit()
        self.time_value.setDisplayFormat(self.time_format)

        self.layout.addRow(self.time_add)
        self.layout.addRow(self.time_reduce)
        self.layout.addRow(self.time_value)


        def cancel_changes():
            self.close()

        def apply_changes():
            try:
                self.apply_changes_impl()
            except Exception as e:
                logging.error(str(e))
            self.close()

        button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        self.button_ok = button_box.button(QDialogButtonBox.Ok)
        self.button_ok.setText(_('OK'))
        self.button_ok.clicked.connect(apply_changes)
        self.button_cancel = button_box.button(QDialogButtonBox.Cancel)
        self.button_cancel.setText(_('Cancel'))
        self.button_cancel.clicked.connect(cancel_changes)
        self.layout.addRow(button_box)

        self.show()

    def apply_changes_impl(self):
        change_start_time(self.time_add.isChecked(), time_to_otime(self.time_value.time()))
        GlobalAccess().get_main_window().refresh()
Beispiel #27
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setMaximumWidth(960)

        layout = QVBoxLayout()
        layout.setContentsMargins(4, 4, 4, 4)
        layout.setSpacing(4)
        self.setLayout(layout)

        self.imageView = QImageView(self)
        layout.addWidget(self.imageView)

        self.slider = Slider(self)
        self.slider.setOrientation(Qt.Horizontal)
        self.slider.valueChanged.connect(self.handleSliderChange)
        self.slider.setTickInterval(1)
        layout.addWidget(self.slider)

        hlayout = QHBoxLayout()
        layout.addLayout(hlayout)

        self.prevLabel = QLabel(self)
        self.currentIndex = QSpinBox(self)
        self.currentIndex.valueChanged.connect(self.handleIndexChange)
        self.currentTime = QTimeEdit(self)
        self.currentTime.setDisplayFormat("H:mm:ss.zzz")
        self.currentTime.timeChanged.connect(self.handleTimeChange)
        self.nextLabel = QLabel(self)

        hlayout.addWidget(self.prevLabel)
        hlayout.addStretch()
        hlayout.addWidget(QLabel("Frame index:", self))
        hlayout.addWidget(self.currentIndex)
        hlayout.addWidget(QLabel("Timestamp:", self))
        hlayout.addWidget(self.currentTime)
        hlayout.addStretch()
        hlayout.addWidget(self.nextLabel)

        hlayout = QHBoxLayout()
        hlayout.setContentsMargins(0, 0, 0, 0)
        hlayout.setSpacing(4)
        layout.addLayout(hlayout)

        self.okayBtn = QPushButton("&OK", self)
        self.cancelBtn = QPushButton("&Cancel", self)

        hlayout.addStretch()
        hlayout.addWidget(self.okayBtn)
        hlayout.addWidget(self.cancelBtn)
        self.setFrameSource(None, None)
Beispiel #28
0
    def initUI(self):
        lbl = QLabel('QTimeEdit')

        timeedit = QTimeEdit(self)
        timeedit.setTime(QTime.currentTime())
        timeedit.setTimeRange(QTime(3, 00, 00), QTime(23, 30, 00))
        # QTimeEdit 클래스를 이용해서 시간 편집 위젯(timeedit)을 하나 만들어줍니다.
        #
        # setTime 메서드에 QTime.currentTime()를 입력해서 프로그램이
        # 실행될 때 현재 시간으로 표시되도록 합니다.
        #
        # setTimeRange 이용하면 사용자가 선택할 수 있는 시간의 범위를 제한할 수 있습니다.
        #
        # 최소 시간은 디폴트로 00시 00분 00초 000밀리초로 설정되어 있고,
        # 최대 시간은 23시 59분 59초 999밀리초로 설정되어 있습니다.
        timeedit.setDisplayFormat('hh:mm:ss')
        # setDisplayFormat 메서드를 이용해서 시간이 'hh:mm:ss'의
        # 형식으로 표시되도록 설정했습니다.

        vbox = QVBoxLayout()
        vbox.addWidget(lbl)
        vbox.addWidget(timeedit)
        vbox.addStretch()
        # 수직 박스 레이아웃을 이용해서 라벨과 시간 편집 위젯을 수직으로 배치하고,
        # 전체 위젯의 레이아웃으로 설정합니다.

        self.setLayout(vbox)

        self.setWindowTitle('QTimeEdit')
        self.setGeometry(300, 300, 300, 200)
        self.show()
Beispiel #29
0
 def clock(self, layout):
     self.verticalLayoutClock = QVBoxLayout(self)
     self.dateEdit = QDateEdit(self)
     self.dateEdit.setDisplayFormat("MMM dd yyyy")
     self.dateEdit.setDisabled(True)
     self.verticalLayoutClock.addWidget(self.dateEdit)
     self.timeEdit = QTimeEdit(self)
     self.timeEdit.setDisplayFormat("hh:mm:ss AP")
     self.timeEdit.setDisabled(True)
     self.verticalLayoutClock.addWidget(self.timeEdit)
     self.updateTime()
     self.timer = QTimer(self)
     self.timer.timeout.connect(self.updateTime)
     self.timer.start(1000)
     layout.addLayout(self.verticalLayoutClock)
Beispiel #30
0
    def __init__(self, parent=None):
        super(ClassTimePicker, self).__init__(parent=parent)
        self.time_selector = QTimeEdit()
        self.time_selector.sizePolicy().setRetainSizeWhenHidden(False)
        self.time_selector.setDisplayFormat("hh:mm AP")
        self.time_selector.setTime(QTime(12, 0, 0))

        self.day_picker = DayPicker()
        self.day_picker.sizePolicy().setRetainSizeWhenHidden(False)

        self.layout = QHBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.addWidget(self.time_selector)
        self.layout.addWidget(self.day_picker)
        self.setLayout(self.layout)
Beispiel #31
0
    def __set_uhrzeit_datum(self, uhrzeit: str, widget: QtWidgets.QTimeEdit):
        """
        Setzt die Uhrzeit in einem QTimeEdit in der GUI.
        
        Args:
            uhrzeit: Uhrzeit des Termins im Format h:m
            widget: QTimeEdit, welches gesezt wird

        Raise:
            AssertionError: Zeitangabe fehlerhaft
        """

        time = QTime.fromString(uhrzeit, 'h:m')
        assert(QTime.isValid(time))
        widget.setTime(time)
    def createEditor(self, parent, option, index):
        editor = QTimeEdit(parent=parent)

        editor.setMinimumTime(datetime.time(hour=8,  minute=30, second=30))
        editor.setMaximumTime(datetime.time(hour=23, minute=30, second=30))
        editor.setDisplayFormat("HH:mm:ss")

        # setFrame(): tell whether the line edit draws itself with a frame.
        # If enabled (the default) the line edit draws itself inside a frame, otherwise the line edit draws itself without any frame.
        editor.setFrame(False)

        return editor
Beispiel #33
0
class TimeEdit(QWidget):

    def __init__(self, parent, initial_time, label, on_update=lambda x: x):
        """

        Args:
            parent: ColorMapWindow instance
        """
        QWidget.__init__(self, parent)
        self.parent = parent
        self.on_update = on_update
        self.label = QLabel(label)
        self.qt_time = QTime.fromString(initial_time)
        self.time_edit = QTimeEdit(self.qt_time)
        self.time_edit.timeChanged.connect(self.update)
        self.grid = QGridLayout()
        self.fill_layout()
        self.setLayout(self.grid)

    @property
    def time(self):
        return self.qt_time.toPyTime().strftime('%H:%M')

    def fill_layout(self):
        grid = self.grid
        grid.addWidget(self.label, 0, 0)
        grid.addWidget(self.time_edit, 1, 0)

    @slot()
    def update(self):
        self.qt_time = self.time_edit.time()
        self.on_update(self.time)

    def update_constraint(self, min_time, max_time):
        pass
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.setLayout(QVBoxLayout(self))

        # Start time
        self.startGroup = QGroupBox(self)
        self.startGroup.setLayout(QHBoxLayout())
        self.layout().addWidget(self.startGroup)

        self.startEdit = QTimeEdit(self.startGroup)
        self.startEdit.setDisplayFormat('HH.mm.ss.zzz')
        self.startGroup.layout().addWidget(self.startEdit)

        self.startLabel = QLabel(self.startGroup)
        self.startLabel.setAlignment(Qt.AlignCenter)
        self.startGroup.layout().addWidget(self.startLabel)

        # Stop time
        self.stopGroup = QGroupBox(self)
        self.stopGroup.setLayout(QHBoxLayout())
        self.layout().addWidget(self.stopGroup)

        self.stopEdit = QTimeEdit(self.stopGroup)
        self.stopEdit.setDisplayFormat('HH.mm.ss.zzz')
        self.stopGroup.layout().addWidget(self.stopEdit)

        self.stopLabel = QLabel(self.stopGroup)
        self.stopLabel.setAlignment(Qt.AlignCenter)
        self.stopGroup.layout().addWidget(self.stopLabel)

        # Loop
        self.loopGroup = QGroupBox(self)
        self.loopGroup.setLayout(QHBoxLayout())
        self.layout().addWidget(self.loopGroup)

        self.spinLoop = QSpinBox(self.loopGroup)
        self.spinLoop.setRange(-1, 1000000)
        self.loopGroup.layout().addWidget(self.spinLoop)

        self.loopLabel = QLabel(self.loopGroup)
        self.loopLabel.setAlignment(Qt.AlignCenter)
        self.loopGroup.layout().addWidget(self.loopLabel)

        self.retranslateUi()
    def __init__(self):
        super().__init__()

        # Make widgets #################

        self.edit1 = QTimeEdit()
        self.edit2 = QTimeEdit()
        self.edit3 = QTimeEdit()

        self.edit1.setMinimumTime(datetime.time(hour=8, minute=30, second=30))
        self.edit2.setMinimumTime(datetime.time(hour=8, minute=30, second=30))
        self.edit3.setMinimumTime(datetime.time(hour=8, minute=30, second=30))

        self.edit1.setMaximumTime(datetime.time(hour=18, minute=30, second=30))
        self.edit2.setMaximumTime(datetime.time(hour=18, minute=30, second=30))
        self.edit3.setMaximumTime(datetime.time(hour=18, minute=30, second=30))

        self.edit1.setTime(datetime.datetime.now().time())
        self.edit2.setTime(datetime.datetime.now().time())
        self.edit3.setTime(datetime.datetime.now().time())

        # Format: see http://doc.qt.io/qt-5/qdatetime.html#toString-2
        self.edit1.setDisplayFormat("HH:mm")
        self.edit2.setDisplayFormat("HH:mm:ss t")
        self.edit3.setDisplayFormat("h m AP")

        self.btn = QPushButton("Print")

        # Set button slot ##############

        self.btn.clicked.connect(self.printText)

        # Set the layout ###############

        vbox = QVBoxLayout()

        vbox.addWidget(self.edit1)
        vbox.addWidget(self.edit2)
        vbox.addWidget(self.edit3)

        vbox.addWidget(self.btn)

        self.setLayout(vbox)
Beispiel #36
0
    def createDateTimeEdits(self):
        self.editsGroup = QGroupBox("Date and time spin boxes")

        dateLabel = QLabel()
        dateEdit = QDateEdit(QDate.currentDate())
        dateEdit.setDateRange(QDate(2005, 1, 1), QDate(2010, 12, 31))
        dateLabel.setText("Appointment date (between %s and %s):" %
                    (dateEdit.minimumDate().toString(Qt.ISODate),
                    dateEdit.maximumDate().toString(Qt.ISODate)))

        timeLabel = QLabel()
        timeEdit = QTimeEdit(QTime.currentTime())
        timeEdit.setTimeRange(QTime(9, 0, 0, 0), QTime(16, 30, 0, 0))
        timeLabel.setText("Appointment time (between %s and %s):" %
                    (timeEdit.minimumTime().toString(Qt.ISODate),
                    timeEdit.maximumTime().toString(Qt.ISODate)))

        self.meetingLabel = QLabel()
        self.meetingEdit = QDateTimeEdit(QDateTime.currentDateTime())

        formatLabel = QLabel("Format string for the meeting date and time:")

        formatComboBox = QComboBox()
        formatComboBox.addItem('yyyy-MM-dd hh:mm:ss (zzz \'ms\')')
        formatComboBox.addItem('hh:mm:ss MM/dd/yyyy')
        formatComboBox.addItem('hh:mm:ss dd/MM/yyyy')
        formatComboBox.addItem('hh:mm:ss')
        formatComboBox.addItem('hh:mm ap')

        formatComboBox.activated[str].connect(self.setFormatString)

        self.setFormatString(formatComboBox.currentText())

        editsLayout = QVBoxLayout()
        editsLayout.addWidget(dateLabel)
        editsLayout.addWidget(dateEdit)
        editsLayout.addWidget(timeLabel)
        editsLayout.addWidget(timeEdit)
        editsLayout.addWidget(self.meetingLabel)
        editsLayout.addWidget(self.meetingEdit)
        editsLayout.addWidget(formatLabel)
        editsLayout.addWidget(formatComboBox)
        self.editsGroup.setLayout(editsLayout)
Beispiel #37
0
    def __init__(self, model):
        super().__init__()
        self.header = QLabel('')
        self.desc = QLineEdit()
        self.date = QDateEdit()
        self.time = QTimeEdit()
        self.init_ui()

        self.mapper = QDataWidgetMapper()
        self.mapper.setModel(model)
        self.mapper.setSubmitPolicy(QDataWidgetMapper.ManualSubmit)
        self.mapper.addMapping(self.desc, TaskModel.col_desc)
        self.mapper.addMapping(self.date, TaskModel.col_date)
        self.mapper.addMapping(self.time, TaskModel.col_time)
Beispiel #38
0
    def __init__(self, parent, initial_time, label, on_update=lambda x: x):
        """

        Args:
            parent: ColorMapWindow instance
        """
        QWidget.__init__(self, parent)
        self.parent = parent
        self.on_update = on_update
        self.label = QLabel(label)
        self.qt_time = QTime.fromString(initial_time)
        self.time_edit = QTimeEdit(self.qt_time)
        self.time_edit.timeChanged.connect(self.update)
        self.grid = QGridLayout()
        self.fill_layout()
        self.setLayout(self.grid)
    def __init__(self, size, cue=None, parent=None):
        super().__init__(size, cue=cue, parent=parent)

        # Start at
        self.startGroup = QGroupBox(self)
        self.startGroup.setLayout(QHBoxLayout())

        self.startEdit = QTimeEdit(self.startGroup)
        self.startEdit.setDisplayFormat('HH.mm.ss.zzz')
        self.startGroup.layout().addWidget(self.startEdit)

        self.startLabel = QLabel(self.startGroup)
        self.startLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.startGroup.layout().addWidget(self.startLabel)

        self.layout().addWidget(self.startGroup)

        # Loop
        self.loopGroup = QGroupBox(self)
        self.loopGroup.setLayout(QHBoxLayout())

        self.spinLoop = QSpinBox(self.loopGroup)
        self.spinLoop.setRange(-1, 1000000)
        self.loopGroup.layout().addWidget(self.spinLoop)

        self.loopLabel = QLabel(self.loopGroup)
        self.loopLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.loopGroup.layout().addWidget(self.loopLabel)

        self.layout().addWidget(self.loopGroup)

        # Checks
        self.checkPause = QCheckBox(self)
        self.layout().addWidget(self.checkPause)

        self.retranslateUi()
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.cue_id = -1
        self.setLayout(QVBoxLayout(self))

        self.cueDialog = CueListDialog(
            cues=Application().cue_model.filter(MediaCue), parent=self)

        self.cueGroup = QGroupBox(self)
        self.cueGroup.setLayout(QVBoxLayout())
        self.layout().addWidget(self.cueGroup)

        self.cueButton = QPushButton(self.cueGroup)
        self.cueButton.clicked.connect(self.select_cue)
        self.cueGroup.layout().addWidget(self.cueButton)

        self.cueLabel = QLabel(self.cueGroup)
        self.cueLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.cueGroup.layout().addWidget(self.cueLabel)

        self.seekGroup = QGroupBox(self)
        self.seekGroup.setLayout(QHBoxLayout())
        self.layout().addWidget(self.seekGroup)

        self.seekEdit = QTimeEdit(self.seekGroup)
        self.seekEdit.setDisplayFormat('HH.mm.ss.zzz')
        self.seekGroup.layout().addWidget(self.seekEdit)

        self.seekLabel = QLabel(self.seekGroup)
        self.seekLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.seekGroup.layout().addWidget(self.seekLabel)

        self.layout().addSpacing(200)

        self.retranslateUi()
Beispiel #41
0
class TaskView(QWidget):
    close = pyqtSignal()

    def __init__(self, model):
        super().__init__()
        self.header = QLabel('')
        self.desc = QLineEdit()
        self.date = QDateEdit()
        self.time = QTimeEdit()
        self.init_ui()

        self.mapper = QDataWidgetMapper()
        self.mapper.setModel(model)
        self.mapper.setSubmitPolicy(QDataWidgetMapper.ManualSubmit)
        self.mapper.addMapping(self.desc, TaskModel.col_desc)
        self.mapper.addMapping(self.date, TaskModel.col_date)
        self.mapper.addMapping(self.time, TaskModel.col_time)

    def set_task(self, index):
        self.mapper.setCurrentIndex(index)
        self.header.setText('РЕДАКТИРОВАНИЕ ЗАДАЧИ')
        # text = 'НОВАЯ ЗАДАЧА'
        # self.date.setDate(QDate().currentDate())

    def create_date(self):
        self.date.setDisplayFormat('dd.MM.yyyy')
        self.date.setCalendarPopup(True)
        self.date.setFixedWidth(120)

        return self.date

    def create_time(self):
        self.time.setDisplayFormat('hh.mm')
        self.time.setFixedWidth(120)

        return self.time

    def create_date_buttons(self):
        date_lt = QHBoxLayout()

        btn_now = QPushButton('сегодня')
        btn_now.clicked.connect(lambda: self.date.setDate(QDate().currentDate()))
        date_lt.addWidget(btn_now, 0, Qt.AlignCenter)

        btn_tomorrow = QPushButton('завтра')
        btn_tomorrow.clicked.connect(lambda: self.date.setDate(QDate().currentDate().addDays(1)))
        date_lt.addWidget(btn_tomorrow, 0, Qt.AlignCenter)

        btn_week_later = QPushButton('через неделю')
        btn_week_later.clicked.connect(lambda: self.date.setDate(QDate().currentDate().addDays(7)))
        date_lt.addWidget(btn_week_later, 0, Qt.AlignCenter)

        return date_lt

    # def create_time_choice(self):
    #     self.time.setMaxVisibleItems(15)
    #     self.time.setStyleSheet('QComboBox { combobox-popup: 0; }')
    #     for it in range(24):
    #         self.time.insertItem(it * 2 + 0, '%.2d:00' % it)
    #         self.time.insertItem(it * 2 + 1, '%.2d:30' % it)
    #
    #     return self.time

    def save(self):
        print('save', self.mapper.submit())
        self.close.emit()

    def cancel(self):
        self.close.emit()

    def remove(self):
        self.mapper.model().removeRow(self.mapper.currentIndex())
        self.close.emit()

    def create_control_buttons(self):
        control_lt = QHBoxLayout()

        btn_save = QPushButton('Сохранить')
        btn_save.clicked.connect(self.save)
        control_lt.addWidget(btn_save, 0, Qt.AlignCenter)

        btn_cancel = QPushButton('Отменить')
        btn_cancel.clicked.connect(self.cancel)
        control_lt.addWidget(btn_cancel, 0, Qt.AlignCenter)

        btn_remove = QPushButton('Удалить')
        btn_remove.clicked.connect(self.remove)
        control_lt.addWidget(btn_remove, 1, Qt.AlignRight)

        return control_lt

    def create_main_form(self):
        fm = QFormLayout()

        fm.addRow(self.header)
        fm.addRow(QLabel(''))

        fm.addRow(self.desc)
        fm.addRow(QLabel(''))

        fm.addRow(QLabel('Когда это нужно сделать?'))
        fm.addRow(self.create_date())
        fm.addRow(self.create_date_buttons())
        fm.addRow(QLabel(''))

        fm.addRow(QLabel('Во сколько?'))
        fm.addRow(self.create_time())

        return fm

    def init_ui(self):
        layout = QVBoxLayout()
        layout.addLayout(self.create_main_form())
        layout.addStretch()
        layout.addLayout(self.create_control_buttons())
        self.setLayout(layout)
Beispiel #42
0
class MainWidget(QWidget):

    def __init__(self):
        QWidget.__init__(self)

        # Set Time One Group
        self.time_one_calendar = QCalendarWidget()
        self.time_one_country_combobox = QComboBox()
        self.time_one_vbox = QVBoxLayout()
        self.time_one_groupbox = QGroupBox("Time One")
        self.time_one_bottom_hbox = QHBoxLayout()
        self.time_one_time_edit = QTimeEdit()
        self.time_one_default_button = QPushButton()
        self.time_one_default_button.setIcon(QIcon("%s/gnome-set-time.png" % icon_path))
        self.time_one_default_button.setMaximumSize(50, 50)
        self.time_one_bottom_hbox.addWidget(self.time_one_time_edit)
        self.time_one_bottom_hbox.addWidget(self.time_one_default_button)
        self.time_one_vbox.addWidget(self.time_one_country_combobox)
        self.time_one_vbox.addWidget(self.time_one_calendar)
        self.time_one_vbox.addLayout(self.time_one_bottom_hbox)
        self.time_one_groupbox.setLayout(self.time_one_vbox)

        # Set Time Two Group
        self.time_two_groupbox = QGroupBox("Time Two")
        self.time_two_calendar = QCalendarWidget()
        self.time_two_vbox = QVBoxLayout()
        self.time_two_country_combobox = QComboBox()
        self.time_two_bottom_hbox = QHBoxLayout()
        self.time_two_time_edit = QTimeEdit()
        self.time_two_default_button = QPushButton()
        self.time_two_default_button.setIcon(QIcon("%s/gnome-set-time.png" % icon_path))
        self.time_two_default_button.setMaximumSize(50, 50)
        self.time_two_bottom_hbox.addWidget(self.time_two_time_edit)
        self.time_two_bottom_hbox.addWidget(self.time_two_default_button)
        self.time_two_vbox.addWidget(self.time_two_country_combobox)
        self.time_two_vbox.addWidget(self.time_two_calendar)
        self.time_two_vbox.addLayout(self.time_two_bottom_hbox)
        self.time_two_groupbox.setLayout(self.time_two_vbox)

        # Set main layout
        self.main_layout = QHBoxLayout()
        self.main_layout.addWidget(self.time_one_groupbox)
        self.main_layout.addWidget(self.time_two_groupbox)
        self.setLayout(self.main_layout)

        # Wire-up your widgets!
        self.time_one_connect()
        self.time_two_connect()
        self.time_one_default_button.clicked.connect(self.set_local_time_one)
        self.time_two_default_button.clicked.connect(self.set_local_time_two)

        # Set the local time for time one
        self.set_local_country()
        self.set_local_time_one()

        # Finally, convert the second time based on the first
        self.convert_timeone_to_timetwo()

    def set_local_country(self):
        global_timezone_list = timezone_info.get_global_timezone_list()
        local_tz_index = global_timezone_list.index(str(self.get_local_timezone()))
        self.time_one_country_combobox.addItems(global_timezone_list)
        self.time_one_country_combobox.setCurrentIndex(local_tz_index)
        self.time_two_country_combobox.addItems(global_timezone_list)

    # To-do: Current solution works for Debian systems. Need to find repo solution that
    # allows for something like "from tzlocal import get_localzone"
    @staticmethod
    def get_local_timezone():
        timezone_file = '/etc/timezone'
        try:
            file = open(timezone_file, 'r')
            system_timezone = file.read().rstrip()
        except IOError:
            print("Unable to open %s") & timezone_file
            system_timezone = 'UTC'

        return system_timezone

    @staticmethod
    def get_local_times():
        local_hour = datetime.datetime.now().strftime("%H")
        local_minute = datetime.datetime.now().strftime("%M")
        local_current_time = QTime(int(local_hour), int(local_minute), 0, 0)

        return local_current_time

    def set_local_time_one(self):

        # Set time for one time
        local_current_time = self.get_local_times()
        self.time_one_time_edit.setTime(local_current_time)

        # Set date for one calendar
        self.time_one_calendar.setSelectedDate(QDate.currentDate())

        # Convert the second time based on the first
        self.convert_timeone_to_timetwo()

    def set_local_time_two(self):

        # Set time for one time
        local_current_time = self.get_local_times()
        self.time_two_time_edit.setTime(local_current_time)

        # Set date for one calendar
        self.time_two_calendar.setSelectedDate(QDate.currentDate())

        # Convert the first time based on the second
        self.convert_timetwo_to_timeone()

    def time_one_connect(self):
        self.time_one_country_combobox.activated.connect(self.convert_timeone_to_timetwo)
        self.time_one_calendar.clicked.connect(self.convert_timeone_to_timetwo)
        self.time_one_calendar.currentPageChanged.connect(self.convert_timeone_to_timetwo)
        self.time_one_time_edit.timeChanged.connect(self.convert_timeone_to_timetwo)

    def time_two_connect(self):
        self.time_two_country_combobox.activated.connect(self.convert_timeone_to_timetwo)
        self.time_two_calendar.clicked.connect(self.convert_timetwo_to_timeone)
        self.time_two_calendar.currentPageChanged.connect(self.convert_timetwo_to_timeone)
        self.time_two_time_edit.timeChanged.connect(self.convert_timetwo_to_timeone)

    def time_one_disconnect(self):
        self.time_one_calendar.clicked.disconnect()
        self.time_one_country_combobox.activated.disconnect()
        self.time_one_time_edit.timeChanged.disconnect()

    def time_two_disconnect(self):
        self.time_two_calendar.clicked.disconnect()
        self.time_two_country_combobox.activated.disconnect()
        self.time_two_time_edit.timeChanged.disconnect()

    def clear_combo_boxes(self):
        self.time_one_country_combobox.clear()
        self.time_two_country_combobox.clear()

    def __amend_country_region(self):
        """
        Used to add the regional header before converting if a region outside of global is used.
        """

        current_region = timezone_info.get_city_region(self.time_one_country_combobox.currentText())
        time_one_country = self.time_one_country_combobox.currentText()
        time_two_country = self.time_two_country_combobox.currentText()

        if '/' not in time_one_country:
            time_one_country = current_region+'/'+self.time_one_country_combobox.currentText()
            time_two_country = current_region+'/'+self.time_two_country_combobox.currentText()

        return time_one_country, time_two_country

    def convert_timeone_to_timetwo(self):
        # Disconnect time two widgets,so that they do not run
        self.time_two_disconnect()

        time_one_country, time_two_country = self.__amend_country_region()

        date_time_one = datetime.datetime(self.time_one_calendar.yearShown(),
                                          self.time_one_calendar.monthShown(),
                                          self.time_one_calendar.selectedDate().day(),
                                          self.time_one_time_edit.time().hour(),
                                          self.time_one_time_edit.time().minute())

        first_tz = timezone(time_one_country)
        second_tz = timezone(time_two_country)

        first_dt = first_tz.localize(date_time_one)
        second_dt = first_dt.astimezone(second_tz)

        new_date_two = QDate(second_dt.year, second_dt.month, second_dt.day)
        self.time_two_calendar.setSelectedDate(new_date_two)

        new_time_two = QTime(int(second_dt.hour), int(second_dt.minute))
        self.time_two_time_edit.setTime(new_time_two)

        # Reconnect time one widgets.
        self.time_two_connect()

    def convert_timetwo_to_timeone(self):

        # Disconnect time one widgets,so that they do not run
        self.time_one_disconnect()

        time_one_country, time_two_country = self.__amend_country_region()

        date_time_two = datetime.datetime(self.time_two_calendar.yearShown(),
                                          self.time_two_calendar.monthShown(),
                                          self.time_two_calendar.selectedDate().day(),
                                          self.time_two_time_edit.time().hour(),
                                          self.time_two_time_edit.time().minute())

        first_tz = timezone(time_one_country)
        second_tz = timezone(time_two_country)

        second_dt = second_tz.localize(date_time_two)
        first_dt = second_dt.astimezone(first_tz)

        new_date_one = QDate(first_dt.year, first_dt.month, first_dt.day)
        self.time_one_calendar.setSelectedDate(new_date_one)

        new_time_one = QTime(int(first_dt.hour), int(first_dt.minute))
        self.time_one_time_edit.setTime(new_time_one)

        # Reconnect time one widgets
        self.time_one_connect()
class SeekSettings(SettingsPage):
    Name = 'Seek Settings'

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.cue_id = -1
        self.setLayout(QVBoxLayout(self))

        self.cueDialog = CueListDialog(
            cues=Application().cue_model.filter(MediaCue), parent=self)

        self.cueGroup = QGroupBox(self)
        self.cueGroup.setLayout(QVBoxLayout())
        self.layout().addWidget(self.cueGroup)

        self.cueButton = QPushButton(self.cueGroup)
        self.cueButton.clicked.connect(self.select_cue)
        self.cueGroup.layout().addWidget(self.cueButton)

        self.cueLabel = QLabel(self.cueGroup)
        self.cueLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.cueGroup.layout().addWidget(self.cueLabel)

        self.seekGroup = QGroupBox(self)
        self.seekGroup.setLayout(QHBoxLayout())
        self.layout().addWidget(self.seekGroup)

        self.seekEdit = QTimeEdit(self.seekGroup)
        self.seekEdit.setDisplayFormat('HH.mm.ss.zzz')
        self.seekGroup.layout().addWidget(self.seekEdit)

        self.seekLabel = QLabel(self.seekGroup)
        self.seekLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.seekGroup.layout().addWidget(self.seekLabel)

        self.layout().addSpacing(200)

        self.retranslateUi()

    def retranslateUi(self):
        self.cueGroup.setTitle('Cue')
        self.cueButton.setText('Click to select')
        self.cueLabel.setText('Not selected')
        self.seekGroup.setTitle('Seek')
        self.seekLabel.setText('Time to reach')

    def select_cue(self):
        if self.cueDialog.exec_() == self.cueDialog.Accepted:
            cue = self.cueDialog.selected_cues()[0]

            self.cue_id = cue.id
            self.seekEdit.setMaximumTime(
                QTime.fromMSecsSinceStartOfDay(cue.media.duration))
            self.cueLabel.setText(cue.name)

    def enable_check(self, enabled):
        self.cueGroup.setCheckable(enabled)
        self.cueGroup.setChecked(False)

        self.seekGroup.setCheckable(enabled)
        self.seekGroup.setChecked(False)

    def get_settings(self):
        return {'target_id': self.cue_id,
                'time': self.seekEdit.time().msecsSinceStartOfDay()}

    def load_settings(self, settings):
        if settings is not None:
            cue = Application().cue_model.get(settings['target_id'])
            if cue is not None:
                self.cue_id = settings['target_id']
                self.seekEdit.setTime(
                    QTime.fromMSecsSinceStartOfDay(settings['time']))
                self.seekEdit.setMaximumTime(
                    QTime.fromMSecsSinceStartOfDay(cue.media.duration))
                self.cueLabel.setText(cue.name)
class MediaCueSettings(SettingsPage):
    Name = 'Media-Cue'

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.setLayout(QVBoxLayout(self))

        # Start time
        self.startGroup = QGroupBox(self)
        self.startGroup.setLayout(QHBoxLayout())
        self.layout().addWidget(self.startGroup)

        self.startEdit = QTimeEdit(self.startGroup)
        self.startEdit.setDisplayFormat('HH.mm.ss.zzz')
        self.startGroup.layout().addWidget(self.startEdit)

        self.startLabel = QLabel(self.startGroup)
        self.startLabel.setAlignment(Qt.AlignCenter)
        self.startGroup.layout().addWidget(self.startLabel)

        # Stop time
        self.stopGroup = QGroupBox(self)
        self.stopGroup.setLayout(QHBoxLayout())
        self.layout().addWidget(self.stopGroup)

        self.stopEdit = QTimeEdit(self.stopGroup)
        self.stopEdit.setDisplayFormat('HH.mm.ss.zzz')
        self.stopGroup.layout().addWidget(self.stopEdit)

        self.stopLabel = QLabel(self.stopGroup)
        self.stopLabel.setAlignment(Qt.AlignCenter)
        self.stopGroup.layout().addWidget(self.stopLabel)

        # Loop
        self.loopGroup = QGroupBox(self)
        self.loopGroup.setLayout(QHBoxLayout())
        self.layout().addWidget(self.loopGroup)

        self.spinLoop = QSpinBox(self.loopGroup)
        self.spinLoop.setRange(-1, 1000000)
        self.loopGroup.layout().addWidget(self.spinLoop)

        self.loopLabel = QLabel(self.loopGroup)
        self.loopLabel.setAlignment(Qt.AlignCenter)
        self.loopGroup.layout().addWidget(self.loopLabel)

        self.retranslateUi()

    def retranslateUi(self):
        self.startGroup.setTitle('Start time')
        self.stopLabel.setText('Stop position of the media')
        self.stopGroup.setTitle('Stop time')
        self.startLabel.setText('Start position of the media')
        self.loopGroup.setTitle('Loop')
        self.loopLabel.setText('Repetition after first play (-1 = infinite)')

    def get_settings(self):
        conf = {'_media_': {}}
        checkable = self.startGroup.isCheckable()

        if not (checkable and not self.startGroup.isChecked()):
            time = self.startEdit.time().msecsSinceStartOfDay()
            conf['_media_']['start_time'] = time
        if not (checkable and not self.stopGroup.isChecked()):
            time = self.stopEdit.time().msecsSinceStartOfDay()
            conf['_media_']['stop_time'] = time
        if not (checkable and not self.loopGroup.isChecked()):
            conf['_media_']['loop'] = self.spinLoop.value()

        return conf

    def enable_check(self, enable):
        self.startGroup.setCheckable(enable)
        self.startGroup.setChecked(False)

        self.stopGroup.setCheckable(enable)
        self.stopGroup.setChecked(False)

        self.loopGroup.setCheckable(enable)
        self.loopGroup.setChecked(False)

    def load_settings(self, settings):
        if '_media_' in settings:
            if 'loop' in settings['_media_']:
                self.spinLoop.setValue(settings['_media_']['loop'])
            if 'start_time' in settings['_media_']:
                t = self._to_qtime(settings['_media_']['start_time'])
                self.startEdit.setTime(t)
            if 'stop_time' in settings['_media_']:
                t = self._to_qtime(settings['_media_']['stop_time'])
                self.stopEdit.setTime(t)

            t = self._to_qtime(settings['_media_'].get('duration', 0))
            self.startEdit.setMaximumTime(t)
            self.stopEdit.setMaximumTime(t)

    def _to_qtime(self, m_seconds):
        return QTime.fromMSecsSinceStartOfDay(m_seconds)
class MediaCueGeneral(CueGeneral):

    Name = 'Cue Settings'

    def __init__(self, size, cue=None, parent=None):
        super().__init__(size, cue=cue, parent=parent)

        # Start at
        self.startGroup = QGroupBox(self)
        self.startGroup.setLayout(QHBoxLayout())

        self.startEdit = QTimeEdit(self.startGroup)
        self.startEdit.setDisplayFormat('HH.mm.ss.zzz')
        self.startGroup.layout().addWidget(self.startEdit)

        self.startLabel = QLabel(self.startGroup)
        self.startLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.startGroup.layout().addWidget(self.startLabel)

        self.layout().addWidget(self.startGroup)

        # Loop
        self.loopGroup = QGroupBox(self)
        self.loopGroup.setLayout(QHBoxLayout())

        self.spinLoop = QSpinBox(self.loopGroup)
        self.spinLoop.setRange(-1, 1000000)
        self.loopGroup.layout().addWidget(self.spinLoop)

        self.loopLabel = QLabel(self.loopGroup)
        self.loopLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.loopGroup.layout().addWidget(self.loopLabel)

        self.layout().addWidget(self.loopGroup)

        # Checks
        self.checkPause = QCheckBox(self)
        self.layout().addWidget(self.checkPause)

        self.retranslateUi()

    def retranslateUi(self):
        self.startGroup.setTitle('Start time')
        self.startLabel.setText('Amount of skip time')
        self.loopGroup.setTitle("Loop")
        self.loopLabel.setText("Repetition after first play (-1 = infinite)")
        self.checkPause.setText("Enable Pause")

    def get_configuration(self):
        conf = super().get_configuration()
        conf['media'] = {}

        checkable = self.startGroup.isCheckable()

        if not (checkable and not self.startGroup.isChecked()):
            time = self.startEdit.time().msecsSinceStartOfDay()
            conf['media']['start_at'] = time
        if not (checkable and not self.loopGroup.isChecked()):
            conf['media']['loop'] = self.spinLoop.value()
        if self.checkPause.checkState() != QtCore.Qt.PartiallyChecked:
            conf['pause'] = self.checkPause.isChecked()

        return conf

    def enable_check(self, enable):
        super().enable_check(enable)

        self.startGroup.setCheckable(enable)
        self.startGroup.setChecked(False)

        self.loopGroup.setCheckable(enable)
        self.loopGroup.setChecked(False)

        self.checkPause.setTristate(enable)
        if enable:
            self.checkPause.setCheckState(QtCore.Qt.PartiallyChecked)

    def set_configuration(self, conf):
        super().set_configuration(conf)

        if 'pause' in conf:
            self.checkPause.setChecked(conf['pause'])
        if 'media' in conf:
            if 'loop' in conf['media']:
                self.spinLoop.setValue(conf['media']['loop'])
            if 'duration' in conf['media'] and conf['media']['duration'] > 0:
                t = QTime().fromMSecsSinceStartOfDay(conf['media']['duration'])
                self.startEdit.setMaximumTime(t)
            if 'start_at' in conf['media']:
                t = QTime().fromMSecsSinceStartOfDay(conf['media']['start_at'])
                self.startEdit.setTime(t)