class DateDialog(QDialog): def __init__(self, parent=None): super(DateDialog, self).__init__(parent) layout = QVBoxLayout(self) # nice widget for editing the date self.datetime = QDateTimeEdit(self) self.datetime.setCalendarPopup(True) self.datetime.setDateTime(QDateTime.currentDateTime()) layout.addWidget(self.datetime) # OK and Cancel buttons self.buttons = QDialogButtonBox( QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal, self) layout.addWidget(self.buttons) self.buttons.accepted.connect(self.accept) self.buttons.rejected.connect(self.reject) # get current date and time from the dialog def dateTime(self): return self.datetime.dateTime() # static method to create the dialog and return (date, time, accepted) @staticmethod def getDateTime(parent=None): dialog = DateDialog(parent) result = dialog.exec_() date = dialog.dateTime() return (date.date(), date.time(), result == QDialog.Accepted)
def createBottomRightGroupBox(self): self.bottomRightGroupBox = QGroupBox("Group 3") self.bottomRightGroupBox.setCheckable(True) self.bottomRightGroupBox.setChecked(True) lineEdit = QLineEdit('s3cRe7') lineEdit.setEchoMode(QLineEdit.Password) spinBox = QSpinBox(self.bottomRightGroupBox) spinBox.setValue(50) dateTimeEdit = QDateTimeEdit(self.bottomRightGroupBox) dateTimeEdit.setDateTime(QDateTime.currentDateTime()) slider = QSlider(Qt.Horizontal, self.bottomRightGroupBox) slider.setValue(40) scrollBar = QScrollBar(Qt.Horizontal, self.bottomRightGroupBox) scrollBar.setValue(60) dial = QDial(self.bottomRightGroupBox) dial.setValue(30) dial.setNotchesVisible(True) layout = QGridLayout() layout.addWidget(lineEdit, 0, 0, 1, 2) layout.addWidget(spinBox, 1, 0, 1, 2) layout.addWidget(dateTimeEdit, 2, 0, 1, 2) layout.addWidget(slider, 3, 0) layout.addWidget(scrollBar, 4, 0) layout.addWidget(dial, 3, 1, 2, 1) layout.setRowStretch(5, 1) self.bottomRightGroupBox.setLayout(layout)
def _set_date_time_edit(self): gridLayout = QGridLayout() self.start = QDateTimeEdit() self.end = QDateTimeEdit() gridLayout.addWidget(QLabel("Startzeit"), 0, 0) gridLayout.addWidget(self.start, 0, 1) gridLayout.addWidget(QLabel("Endzeit"), 1, 0) gridLayout.addWidget(self.end, 1, 1) self.layout.addLayout(gridLayout)
def createEditor(self, parent, option, index): if index.column() in DATE_TIME_COLUMN_LIST: editor = QDateTimeEdit(parent=parent) #editor.setMinimumDate(datetime.datetime(year=2018, month=1, day=1, hour=0, minute=0)) #editor.setMaximumDate(datetime.datetime(year=2020, month=9, day=1, hour=18, minute=30)) editor.setDisplayFormat(QT_DATE_TIME_FORMAT) #editor.setCalendarPopup(True) # 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 else: return QStyledItemDelegate.createEditor(self, parent, option, index)
def __init__(self): super().__init__() # Make widgets ################# self.edit1 = QDateTimeEdit() self.edit2 = QDateTimeEdit() self.edit3 = QDateTimeEdit() self.edit1.setMinimumDate(datetime.datetime(year=2017, month=9, day=1, hour=8, minute=30, second=30)) self.edit2.setMinimumDate(datetime.datetime(year=2017, month=9, day=1, hour=8, minute=30, second=30)) self.edit3.setMinimumDate(datetime.datetime(year=2017, month=9, day=1, hour=8, minute=30, second=30)) self.edit1.setMaximumDate(datetime.datetime(year=2020, month=9, day=1, hour=18, minute=30, second=30)) self.edit2.setMaximumDate(datetime.datetime(year=2020, month=9, day=1, hour=18, minute=30, second=30)) self.edit3.setMaximumDate(datetime.datetime(year=2020, month=9, day=1, hour=18, minute=30, second=30)) self.edit1.setDateTime(datetime.datetime.now()) self.edit2.setDateTime(datetime.datetime.now()) self.edit3.setDateTime(datetime.datetime.now()) #self.edit1.setCalendarPopup(True) #self.edit2.setCalendarPopup(True) #self.edit3.setCalendarPopup(True) # Format: see http://doc.qt.io/qt-5/qdatetime.html#toString-2 self.edit1.setDisplayFormat("yyyy-MM-dd HH:mm") self.edit2.setDisplayFormat("dd/MM/yyyy HH:mm:ss t") self.edit3.setDisplayFormat("dddd d MMMM yyyy 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)
def createEditor(self, parent, option, index): editor = QDateTimeEdit(parent=parent) editor.setMinimumDate(datetime.datetime(year=2017, month=9, day=1, hour=8, minute=30)) editor.setMaximumDate(datetime.datetime(year=2020, month=9, day=1, hour=18, minute=30)) editor.setDisplayFormat("yyyy-MM-dd HH:mm:ss") #editor.setCalendarPopup(True) # 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
def group_datetime_spinbox(self): group2 = QGroupBox('QDateTimeEdit') lbl = QLabel('QDateTimeEdit') date_time_edit = QDateTimeEdit(self) date_time_edit.setDateTime(QDateTime.currentDateTime()) date_time_edit.setDateTimeRange(QDateTime(1900, 1, 1, 00, 00, 00), QDateTime(2100, 1, 1, 00, 00, 00)) date_time_edit.setDisplayFormat('yyyy-MM-dd hh:mm:ss') date_time_edit.dateTimeChanged.connect(self.datetime_value_change) self.lbl5 = QLabel( date_time_edit.dateTime().toString('yyyy-MM-dd hh:mm:ss')) layout_group5 = QHBoxLayout() layout_group5.addWidget(lbl) layout_group5.addWidget(date_time_edit) layout_group5.addWidget(self.lbl5) return layout_group5
class filterPopup(QDialog): def __init__(self, parent=None): super().__init__(parent) self.filterConfiguration = QLabel("Filter Configuration",self) self.filterConfiguration.setFont(QtGui.QFont("Roboto",12, QtGui.QFont.Bold)) self.creatorLabel = QLabel("Creator", self) self.creatorLabel.setFont(QtGui.QFont("Roboto",12, QtGui.QFont.Bold)) self.eventType = QLabel("Event Type", self) self.eventType.setFont(QtGui.QFont("Roboto",12, QtGui.QFont.Bold)) self.keyWordSearch = QLineEdit(self) #Key Word text self.redBox = QCheckBox(self) #Red Check Box self.blueBox = QCheckBox(self) #Blue Check Box self.whiteBox = QCheckBox(self) #White Check Box self.redBox2 = QCheckBox(self) #Red Check Box self.blueBox2 = QCheckBox(self) #Blue Check Box self.whiteBox2 = QCheckBox(self) #White Check Box self.startTime = QDateTimeEdit(self) #Start time text self.endTime = QDateTimeEdit(self) #End Time text self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self) self.formGroupBox = QGroupBox("ihjnrsdijn") layout = QFormLayout(self) layout.addRow(self.filterConfiguration) layout.addRow("Keyword Search:", self.keyWordSearch) layout.addRow(self.creatorLabel) layout.addRow("Red", self.redBox) layout.addRow("Blue", self.blueBox) layout.addRow("White", self.whiteBox) layout.addRow(self.eventType) layout.addRow("Red", self.redBox2) layout.addRow("Blue", self.blueBox2) layout.addRow("White", self.whiteBox2) layout.addRow("Start TimeStamp:", self.startTime) layout.addRow("End TimeStamp:", self.endTime) layout.addWidget(self.buttonBox) def setDT(self, startDT = "2000-01-01T00:00:00", endDT = "2000-01-01T00:00:00",): self.startTime.setDateTime(QtCore.QDateTime.fromString(startDT, "yyyy-MM-ddThh:mm:ss")) self.endTime.setDateTime(QtCore.QDateTime.fromString(endDT, "yyyy-MM-ddThh:mm:ss"))
def __init__(self, parent): super().__init__(parent) self._db = "" #self._tableColumns = '["time"]' self._tableColumns = '' self.dbObj = None self._dbKwargs = "{}" self._plots = "[]" self._plotArgsList = "[[]]" self._plotKwargsList = "[{}]" self.aliases = {} self.alias_fields_reverse = {} layout = QVBoxLayout() self.listWidget = QTableWidget() now = QDateTime.currentDateTime() self.startDateTime = QDateTimeEdit(now.addMonths(-6)) self.endDateTime = QDateTimeEdit(now) buttonText = "Load Scans" self.loadScansButton = QPushButton(buttonText) layout.addWidget(self.startDateTime) layout.addWidget(self.endDateTime) layout.addWidget(self.loadScansButton) layout.addWidget(self.listWidget) self.setLayout(layout) self.fr_thread = DBFetchResultsThread() self.fr_thread.resultsSignal.connect(self.updateTableFromResults) self.fr_thread.updateButtonText.connect(self.loadScansButton.setText) self.fr_thread.finished.connect(partial(self.loadScansButton.setText, buttonText)) self.loadScansButton.clicked.connect(self.__updateTable) self.listWidget.itemSelectionChanged.connect(self.__replot) self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.showMenu) self.checked_fields = {} self.endDateTimer = QTimer(self) self.endDateTimer.setInterval(1500) self.endDateTimer.timeout.connect(self.setEndTimeToNow) self.makeMenu() self.selected_uids = []
def __init__(self, parent=None): super(DateTimeFilterPage, self).__init__(parent) self.fromEdit = QDateTimeEdit() self.toEdit = QDateTimeEdit() groupLayout = QFormLayout() groupLayout.addRow("Od:", self.fromEdit) groupLayout.addRow("Do:", self.toEdit) self.group = QGroupBox("Datum a čas") self.group.setCheckable(True) self.group.setChecked(False) self.group.setLayout(groupLayout) layout = QVBoxLayout() layout.addWidget(self.group) layout.addStretch(1) self.setLayout(layout)
def init_ui(self): self.setWindowTitle("Schedule Post") self.date_edit = QDateTimeEdit(QDateTime.currentDateTime()) self.date_edit.setDisplayFormat("dd.MM.yyyy hh:mm") self.date_edit.setMinimumDateTime(QDateTime.currentDateTime()) self.calendar = QCalendarWidget(self) self.calendar.setGridVisible(True) self.calendar.setMinimumDate(QDate.currentDate()) self.calendar.setSelectedDate(QDate.currentDate()) self.calendar.clicked.connect(self.set_date_time) self.confirm_button = QPushButton("Confirm") self.confirm_button.clicked.connect(self.set_schedule) vbox = QVBoxLayout(self) vbox.addWidget(self.date_edit) vbox.addWidget(self.calendar) vbox.addWidget(self.confirm_button)
def __init__(self, parent=None): super(WindowClass, self).__init__(parent) self.btn = QPushButton(self) #self参数则让该按钮显示当前窗体中 self.btn.setText("点击获取日期信息") self.btn.clicked.connect(self.showdate) self.dateEdit = QDateEdit(self) self.timeEdit = QTimeEdit(self) self.dateTimeEdit = QDateTimeEdit(self) self.dateEdit.setCalendarPopup(True) #self.timeEdit.setCalendarPopup(True)#弹出界面是失效的注意; #self.dateTimeEdit.setCalendarPopup(True)#时间是无法选择的 self.dateEdit.move(10, 200) self.timeEdit.move(10, 100) self.dateTimeEdit.move(10, 300) self.dateEdit.setDisplayFormat("yyyy-MM-dd") self.timeEdit.setDisplayFormat("HH:mm:ss") self.dateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss") self.setWindowTitle("QDateEdit和QDateTimeEdit控件使用")
def init_ui(self): # MainWindow self.girisButton = QPushButton() self.analizButton = QPushButton() self.tarimsalbilgisistemiButton = QPushButton() self.dateTimeEdit = QDateTimeEdit() loadUi('../ui/mainw.ui', self) self.setWindowTitle('OceanView') self.setFixedSize(self.w, self.h) self.setWindowIcon(QIcon('../ui/icon/image.png')) OceanViewGui.setButtonIcon(self.girisButton, '../ui/icon/house.png') OceanViewGui.setButtonIcon(self.analizButton, '../ui/icon/analytics.png') OceanViewGui.setButtonIcon(self.tarimsalbilgisistemiButton, '../ui/icon/fertilizer.png') self.dateTimeEdit.setDateTime(QDateTime.currentDateTime())
def setupUi(self, Form): Form.setObjectName("Form") Form.resize(1050, 650) self.gridLayoutWidget = QtWidgets.QWidget(Form) self.gridLayoutWidget.setGeometry(QtCore.QRect(29, 9, 1000, 600)) self.gridLayoutWidget.setObjectName("gridLayoutWidget") #网格布局 self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setHorizontalSpacing(20) self.gridLayout.setObjectName("gridLayout") # 日期选择框 self.dateEdit = QDateTimeEdit(QDateTime.currentDateTime(), self.gridLayoutWidget) self.dateEdit.setObjectName("dateEdit") self.dateEdit.setDisplayFormat("yyyy-MM-dd") self.dateEdit.setMinimumDate(QDate.currentDate().addDays(-365)) self.dateEdit.setMaximumDate(QDate.currentDate().addDays(365 * 3)) self.dateEdit.setCalendarPopup(True) self.gridLayout.addWidget(self.dateEdit, 1, 0, 1, 1) #下拉列表 self.comboBox = QtWidgets.QComboBox(self.gridLayoutWidget) self.comboBox.setObjectName("comboBox") num = self.getLogsItems() self.comboBox.setMaxVisibleItems(num) self.gridLayout.addWidget(self.comboBox, 2, 0, 1, 1) #日志显示框 self.textEdit = QtWidgets.QTextEdit(self.gridLayoutWidget) self.textEdit.setObjectName("textEdit") self.gridLayout.addWidget(self.textEdit, 3, 0, 1, 1) self.textEdit.setReadOnly(True) #按钮 self.pushButton = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton.setObjectName("pushButton") self.gridLayout.addWidget(self.pushButton, 2, 1, 1, 1) self.bindButton() self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form)
def __init__(self, memo_data: StockMemoData, parent: QWidget = None): self.__memo_data = memo_data super(StockMemoEditor, self).__init__(parent) # The filter of left list # self.__filter_identity: str = '' # self.__filter_datetime: datetime.datetime = None # The stock that selected by combobox or outer setting self.__current_stock = None # The current index of editing memo # Not None: Update exists # None: Create new self.__current_index = None # The memo list that displaying in the left list self.__current_memos: pd.DataFrame = None self.__observers = [] self.__sas = self.__memo_data.get_sas( ) if self.__memo_data is not None else None self.__memo_record = self.__memo_data.get_memo_record( ) if self.__memo_data is not None else None data_utility = self.__sas.get_data_hub_entry().get_data_utility( ) if self.__sas is not None else None self.__combo_stock = SecuritiesSelector(data_utility) self.__table_memo_index = EasyQTableWidget() self.__datetime_time = QDateTimeEdit(QDateTime().currentDateTime()) self.__line_brief = QLineEdit() self.__text_record = QTextEdit() self.__button_new = QPushButton('New') self.__button_apply = QPushButton('Save') self.__button_delete = QPushButton('Delete') self.init_ui() self.config_ui()
def __init__(self, activity, number, translator, guesser, *args): self.guesser = guesser self.name_label = QLabel() self.name_edit = QComboBox() self.name_edit.currentTextChanged.connect(self.check_for_change) self.start_time_label = QLabel() self.start_time_edit = QDateTimeEdit() self.start_time_edit.dateTimeChanged.connect(self.check_for_change) self.end_time_label = QLabel() self.end_time_edit = QDateTimeEdit() self.end_time_edit.dateTimeChanged.connect(self.check_for_change) self.calories_label = QLabel() self.calories_edit = QDoubleSpinBox() self.calories_edit.valueChanged.connect(self.check_for_change) self.save_button = QPushButton() self.save_button.setText(translator.save_button) self.save_button.setDisabled(True) self.save_button.clicked.connect(self.save_button_clicked) self.margins = 0, 0, 0, 0 self.label_edit_spacing = 4 super(EditActivity, self).__init__(activity, number, translator, *args)
def __init__(self): super().__init__() self.is_accepted = False self.setWindowTitle("Новая поломка") self.setLayout(QFormLayout()) self.place_field = QLineEdit() self.layout().addRow("Место", self.place_field) self.time_field = QDateTimeEdit() self.time_field.setMaximumDateTime(datetime.now()) self.layout().addRow("Время", self.time_field) self.description_field = QTextEdit() self.layout().addRow("Описание", self.description_field) accept_button = QPushButton("Ок") accept_button.clicked.connect(self.confirm) self.layout().addRow("Принять", accept_button)
def __init__(self, parent, **kwargs): super().__init__(parent) self.surveyTableModel = parent.surveyTableModel self.mainLayout = QVBoxLayout() self.setLayout(self.mainLayout) self.kwargs = kwargs # form self.surveyDatetimeField = QDateTimeEdit() self.recorderIDField = QComboBox() self.recordingDatetimeField = QDateTimeEdit() self.recordingDurationField = QLabel() self.audioField = QComboBox() self.urlField = QLineEdit() self.noteField = QLineEdit() self.initForm() # buttons self.initButtons()
class NewBreakageDialog(QDialog): def __init__(self): super().__init__() self.is_accepted = False self.setWindowTitle("Новая поломка") self.setLayout(QFormLayout()) self.place_field = QLineEdit() self.layout().addRow("Место", self.place_field) self.time_field = QDateTimeEdit() self.time_field.setMaximumDateTime(datetime.now()) self.layout().addRow("Время", self.time_field) self.description_field = QTextEdit() self.layout().addRow("Описание", self.description_field) accept_button = QPushButton("Ок") accept_button.clicked.connect(self.confirm) self.layout().addRow("Принять", accept_button) def confirm(self): if len(self.place) > 0 or len(self.description) > 0: self.is_accepted = True self.close() @property def place(self): return self.place_field.text() @property def time(self): return self.time_field.dateTime().toSecsSinceEpoch() @property def description(self): return self.description_field.toPlainText()
def __init__(self, parent=None): super().__init__(parent=parent) self.setWindowTitle("多窗口利用控件属性传递参数") self.resize(200, 100) self.datetimedit = QDateTimeEdit(parent=self) self.datetimedit.setCalendarPopup(True) self.datetimedit.setMinimumSize(100, 20) self.datetimedit.setDateTime(QDateTime.currentDateTime()) buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal, parent=self) # 两个按钮, 分别连接dialog.accept()和dialog.reject() buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) v_layout = QVBoxLayout() v_layout.addWidget(self.datetimedit) v_layout.addWidget(buttons) self.setLayout(v_layout)
def __init__(self): super(MainWindow, self).__init__() self.selectedDate = QDate.currentDate() self.fontSize = 10 centralWidget = QWidget() dateLabel = QLabel("Date:") monthCombo = QComboBox() for month in range(1, 13): monthCombo.addItem(QDate.longMonthName(month)) yearEdit = QDateTimeEdit() yearEdit.setDisplayFormat("yyyy") yearEdit.setDateRange(QDate(1753, 1, 1), QDate(8000, 1, 1)) monthCombo.setCurrentIndex(self.selectedDate.month() - 1) yearEdit.setDate(self.selectedDate) self.fontSizeLabel = QLabel("Font size:") self.fontSizeSpinBox = QSpinBox() self.fontSizeSpinBox.setRange(1, 64) self.fontSizeSpinBox.setValue(10) self.editor = QTextBrowser() self.insertCalendar() monthCombo.activated.connect(self.setMonth) yearEdit.dateChanged.connect(self.setYear) self.fontSizeSpinBox.valueChanged.connect(self.setfontSize) controlsLayout = QHBoxLayout() controlsLayout.addWidget(dateLabel) controlsLayout.addWidget(monthCombo) controlsLayout.addWidget(yearEdit) controlsLayout.addSpacing(24) controlsLayout.addWidget(self.fontSizeLabel) controlsLayout.addWidget(self.fontSizeSpinBox) controlsLayout.addStretch(1) centralLayout = QVBoxLayout() centralLayout.addLayout(controlsLayout) centralLayout.addWidget(self.editor, 1) centralWidget.setLayout(centralLayout) self.setCentralWidget(centralWidget)
def createEditor(self, parent, styleOption, index): if index.column() == 1: editor = QDateTimeEdit(parent) editor.setDisplayFormat(self.parent().currentDateFormat) editor.setCalendarPopup(True) return editor editor = QLineEdit(parent) # create a completer with the strings in the column as model allStrings = [] for i in range(1, index.model().rowCount()): strItem = index.model().data(index.sibling(i, index.column()), Qt.EditRole) if strItem not in allStrings: allStrings.append(strItem) autoComplete = QCompleter(allStrings) editor.setCompleter(autoComplete) editor.editingFinished.connect(self.commitAndCloseEditor) return editor
def __init__(self, parent, db): super(QWidget, self).__init__(parent) self.parent = parent self.btn_mod = QPushButton('Zmiana statusu') self.btn_usun = QPushButton('Usuń') self.btn_dodaj = QPushButton('Dodaj') self.lbl_klient_ = QLabel('') self.lbl_usluga_ = QLabel('') self.lbl_termin_ = QDateTimeEdit() self.gb_layout = QVBoxLayout() self.kalendarz = QCalendarWidget() self.view_u = QTableView() self.view_k = QTableView() self.view_p = QTableView() self.view = QTableView() self.proxy_u = QSortFilterProxyModel(self) self.proxy_k = QSortFilterProxyModel(self) self.proxy_p = QSortFilterProxyModel(self) self.proxy = QSortFilterProxyModel(self) self.id_klient = -1 self.id_usluga = -1 self.id_pracownik = -1 self.id_rezerwacje = -1 self.data = None self.data_do = None self.dzien_tyg = 0 self.czas = [] # Lista składana przycisków godzin self.btn_godz = [QPushButton(str(i + 1)) for i in range(16)] # Parametry połączenia z bazą self.model_u = QSqlTableModel(self, db) self.model_k = QSqlTableModel(self, db) self.model_p = QSqlTableModel(self, db) self.model = QSqlTableModel(self, db) self.initUI()
class DateDialog(QDialog): def __init__(self, parent=None): super(DateDialog, self).__init__(parent) layout = QVBoxLayout(self) # nice widget for editing the date self.datetime = QDateTimeEdit(self) self.datetime.setCalendarPopup(True) self.datetime.setDateTime(QDateTime.currentDateTime()) layout.addWidget(self.datetime) # OK and Cancel buttons self.buttons = QDialogButtonBox( QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal, self) layout.addWidget(self.buttons) self.buttons.accepted.connect(self.accept) self.buttons.rejected.connect(self.reject) # get current date and time from the dialog def dateTime(self): return self.datetime.dateTime()
def __init__(self, parent=None): super(MainWin, self).__init__(parent) layout = QVBoxLayout(self) self.dateEdit = QDateTimeEdit(QDateTime.currentDateTime(), self) self.dateEdit.setDisplayFormat('yyyy-MM-dd HH:mm:ss') self.dateEdit.setMinimumDate(QDate.currentDate().addDays(-365)) self.dateEdit.setMaximumDate(QDate.currentDate().addDays(365)) self.dateEdit.setCalendarPopup(True) self.dateEdit.dateChanged.connect(self.onDateChanged) self.dateEdit.dateTimeChanged.connect(self.onDateTimeChanged) self.dateEdit.timeChanged.connect(self.onTimeChanged) self.btn = QPushButton('取得日期和時間') self.btn.clicked.connect(self.onButtonClick) layout.addWidget(self.dateEdit) layout.addWidget(self.btn) self.resize(300, 90) self.setWindowTitle('DateTimeEdit2')
def createEditor(self, parent, option, index): """ Crée le widget utilisé pour éditer la valeur d'une cellule Retourne un widget "vierge", i.e. ce n'est pas ici qu'on initialise la valeur du widget. En revanche, c'est ici qu'on peut définir les valeurs min/max acceptées, etc. https://doc.qt.io/qt-5/model-view-programming.html#providing-an-editor """ editor = QDateTimeEdit(parent=parent) editor.setMinimumDate( datetime.datetime(year=2017, month=9, day=1, hour=8, minute=30)) editor.setMaximumDate( datetime.datetime(year=2030, month=9, day=1, hour=18, minute=30)) editor.setDisplayFormat("yyyy-MM-dd HH:mm") #editor.setCalendarPopup(True) # 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
def __init__(self, parent=None): super().__init__(parent) self.filterConfiguration = QLabel("Filter Configuration",self) self.filterConfiguration.setFont(QtGui.QFont("Roboto",12, QtGui.QFont.Bold)) self.creatorLabel = QLabel("Creator", self) self.creatorLabel.setFont(QtGui.QFont("Roboto",12, QtGui.QFont.Bold)) self.eventType = QLabel("Event Type", self) self.eventType.setFont(QtGui.QFont("Roboto",12, QtGui.QFont.Bold)) self.keyWordSearch = QLineEdit(self) #Key Word text self.redBox = QCheckBox(self) #Red Check Box self.blueBox = QCheckBox(self) #Blue Check Box self.whiteBox = QCheckBox(self) #White Check Box self.redBox2 = QCheckBox(self) #Red Check Box self.blueBox2 = QCheckBox(self) #Blue Check Box self.whiteBox2 = QCheckBox(self) #White Check Box self.startTime = QDateTimeEdit(self) #Start time text self.endTime = QDateTimeEdit(self) #End Time text self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, self) self.formGroupBox = QGroupBox("ihjnrsdijn") layout = QFormLayout(self) layout.addRow(self.filterConfiguration) layout.addRow("Keyword Search:", self.keyWordSearch) layout.addRow(self.creatorLabel) layout.addRow("Red", self.redBox) layout.addRow("Blue", self.blueBox) layout.addRow("White", self.whiteBox) layout.addRow(self.eventType) layout.addRow("Red", self.redBox2) layout.addRow("Blue", self.blueBox2) layout.addRow("White", self.whiteBox2) layout.addRow("Start TimeStamp:", self.startTime) layout.addRow("End TimeStamp:", self.endTime) layout.addWidget(self.buttonBox)
def __init__(self, parent=None): super(LogFilterDialog, self).__init__(parent) self.accepted.connect(self.createFilter) self.operationCombo = QComboBox() self.operationCombo.addItems(LogFilterDialog.OPERATION_OPTIONS) self.tablenameCombo = QComboBox() self.tablenameCombo.addItems(LogFilterDialog.TABLENAME_OPTIONS) self.fromEdit = QDateTimeEdit() self.toEdit = QDateTimeEdit() groupLayout = QFormLayout() groupLayout.addRow("Od: ", self.fromEdit) groupLayout.addRow("Do: ", self.toEdit) groupLayout.addRow("Operace: ", self.operationCombo) groupLayout.addRow("Tabulka: ", self.tablenameCombo) rejectButton = QPushButton("Storno") rejectButton.clicked.connect(self.reject) acceptButton = QPushButton("OK") acceptButton.clicked.connect(self.accept) buttonsLayout = QHBoxLayout() buttonsLayout.addStretch(1) buttonsLayout.addWidget(acceptButton) buttonsLayout.addWidget(rejectButton) layout = QVBoxLayout() layout.addLayout(groupLayout) layout.addSpacing(12) layout.addLayout(buttonsLayout) self.setLayout(layout) self.setMinimumWidth(300) self.setWindowTitle("Filtrování logů")
def initUI(self): lb = QLabel('QTimeEdit :') dte = QDateTimeEdit(self) dte.setDateTime(QDateTime.currentDateTime()) dte.setDateTimeRange( QDateTime(1900, 1, 1, 00, 00, 00), QDateTime(2100, 1, 1, 00, 00, 00), ) dte.setDisplayFormat('yyyy.MM.dd hh:mm:ss') vbox = QVBoxLayout() vbox.addWidget(lb) vbox.addWidget(dte) vbox.addStretch() self.setLayout(vbox)
def initUI(self): self.viewLabel = QLabel("Event Configuration") self.viewLabel.setAlignment(Qt.AlignHCenter|Qt.AlignVCenter) self.eventNameLbl = QLabel("Event Name") self.eventName = QLineEdit() self.eventDescriptionLbl = QLabel("Event Description") self.eventDescription = QLineEdit() self.startTimeLbl = QLabel("Start Date and Time") self.startTime = QDateTimeEdit(QDateTime.currentDateTime()) self.startTime.setDisplayFormat("yyyy-MM-ddT-HH:mm:ssZ") self.endTimeLbl = QLabel("End Date and Time") self.endTime = QDateTimeEdit(QDateTime.currentDateTime()) self.endTime.setDisplayFormat("yyyy-MM-ddT-HH:mm:ssZ") saveBtn = QPushButton("Save") saveBtn.clicked.connect(self.save) if self.hide == True: saveBtn.hide() eventConfigContainer = QVBoxLayout() eventConfigContainer.addWidget(self.viewLabel) eventConfigContainer.addWidget(self.eventNameLbl) eventConfigContainer.addWidget(self.eventName) eventConfigContainer.addWidget(self.eventDescriptionLbl) eventConfigContainer.addWidget(self.eventDescription) eventConfigContainer.addWidget(self.startTimeLbl) eventConfigContainer.addWidget(self.startTime) eventConfigContainer.addWidget(self.endTimeLbl) eventConfigContainer.addWidget(self.endTime) eventConfigContainer.addWidget(saveBtn) self.setLayout(eventConfigContainer)
def init_ui(self): """Layout and main functionalities""" # Labels slice_label = QLabel("Slicing") start_label = QLabel("Start: ") end_label = QLabel("End: ") # DateTimeEdit self.start_date_time_edit = QDateTimeEdit() self.end_date_time_edit = QDateTimeEdit() # Buttons apply_button = QPushButton("Apply") apply_button.clicked.connect(self.send_times) hide_button = QPushButton("Hide") hide_button.clicked.connect(self.hide) # Layouts # - Horizontal for start h_start = QHBoxLayout() h_start.addWidget(start_label) h_start.addWidget(self.start_date_time_edit) # - Horizontal for end h_end = QHBoxLayout() h_end.addWidget(end_label) h_end.addWidget(self.end_date_time_edit) # - Vertical for self v_widget = QVBoxLayout() v_widget.addWidget(slice_label) v_widget.addLayout(h_start) v_widget.addLayout(h_end) v_widget.addWidget(apply_button) v_widget.addWidget(hide_button) self.setLayout(v_widget)
def addCombined(self): self.dates.append(QDateTimeEdit()) sDate = datetime.now().strftime('%Y-%m-%d %H:%M:%S') date = QDateTime.fromString(sDate, "yyyy-MM-dd hh:mm:ss") self.dates[self.contComb].setDateTime(date) self.dates[self.contComb].setMaximumSize(120, 50) self.pnlDate.addWidget(self.dates[self.contComb]) self.sports.append(QComboBox()) self.sports[self.contComb].setModel(self.cmbSport.model()) self.regionIndexToIdCmb.append({}) cont = self.contComb self.sports[self.contComb].activated.connect(lambda: self.setRegionComb(cont)) self.pnlSport.addWidget(self.sports[self.contComb]) self.regions.append(QComboBox()) self.competitionIndexToIdCmb.append({}) self.regions[self.contComb].activated.connect(lambda: self.setCompetitionComb(cont)) self.pnlRegion.addWidget(self.regions[self.contComb]) self.competitions.append(QComboBox()) self.pnlCompetition.addWidget(self.competitions[self.contComb]) self.players1.append(QComboBox()) self.players1[self.contComb].setEditable(True) self.players1[self.contComb].addItems(self.players) self.players1[self.contComb].setMaximumSize(200, 50) self.pnlPlayer1.addWidget(self.players1[self.contComb]) self.players2.append(QComboBox()) self.players2[self.contComb].setEditable(True) self.players2[self.contComb].addItems(self.players) self.players2[self.contComb].setMaximumSize(200, 50) self.pnlPlayer2.addWidget(self.players2[self.contComb]) self.picks.append(QLineEdit()) self.picks[self.contComb].setMaximumSize(200, 50) self.pnlPick.addWidget(self.picks[self.contComb]) self.results.append(QComboBox()) self.results[self.contComb].addItems([_("Pending"), _("Successful"), _("Failed"), _("Null"), _("Half Successful"), _("Half Failed"), _("Cash out")]) self.pnlResult.addWidget(self.results[self.contComb]) self.buttons.append(QPushButton()) self.buttons[self.contComb].setText("X") self.buttons[self.contComb].setStyleSheet("color:red; font-weight: bold;") self.buttons[self.contComb].setMaximumSize(50, 50) self.buttons[self.contComb].clicked.connect(lambda: self.removeRow(cont)) self.pnlButton.addWidget(self.buttons[self.contComb]) self.contComb += 1 if self.contComb == 10: self.btnAdd.setEnabled(False)
def createEditor(self, parent, option, index): # create the appropriate widget based on the datatype dataType = index.data(Qt.UserRole + 1) self.hintSize = QSize(option.rect.width(), option.rect.height()) if dataType == DataType.INT.value: self.editor = QLineEdit(parent) self.editor.setValidator(QIntValidator()) elif dataType == DataType.FLOAT.value: self.editor = QLineEdit(parent) self.editor.setValidator(QDoubleValidator()) elif dataType == DataType.STRING.value: self.editor = QLineEdit(parent) elif dataType == DataType.BOOLEAN.value: self.editor = QComboBox(parent) self.editor.addItems(self.booleanItems) elif dataType == DataType.POINTWGS84.value: self.editor = FrmGPoint(parent) self.editor.setAutoFillBackground(True) self.hintSize = QSize(300, 40) elif dataType == DataType.POINTCARTESIAN.value: self.editor = FrmPoint(parent) self.editor.setAutoFillBackground(True) self.hintSize = QSize(300, 40) elif dataType == DataType.TIME.value: # self.editor = FrmTime(parent=parent, tz=True) self.editor = QLineEdit(parent) elif dataType == DataType.LOCALTIME.value: # self.editor = FrmTime(parent=parent, tz=False) self.editor = QLineEdit(parent) elif dataType == DataType.DATE.value: self.editor = QDateTimeEdit(parent) self.editor.setCalendarPopup(True) self.editor.setDisplayFormat("yyyy/MM/dd") elif dataType == DataType.DATETIME.value: # self.editor = QDateTimeEdit(parent) # self.editor.setCalendarPopup(False) # self.editor.setDisplayFormat("yyyy-MM-dd hh:mm:ss:zzz") self.editor = QLineEdit(parent) elif dataType == DataType.LOCALDATETIME.value: self.editor = QLineEdit(parent) elif dataType == DataType.DURATION.value: self.editor = QLineEdit(parent) else: self.editor = QLineEdit(parent) return self.editor
def initUI(self): lbl = QLabel('QTimeEdit') datetimeedit = QDateTimeEdit(self) datetimeedit.setDateTime(QDateTime.currentDateTime()) datetimeedit.setDateTimeRange(QDateTime(1900, 1, 1, 00, 00, 00), QDateTime(2100, 1, 1, 00, 00, 00)) datetimeedit.setDisplayFormat('yyyy.MM.dd hh:mm:ss') vbox = QVBoxLayout() vbox.addWidget(lbl) vbox.addWidget(datetimeedit) vbox.addStretch() self.setLayout(vbox) self.setWindowTitle('QDateTimeEdit') self.setGeometry(300, 300, 300, 200) self.show()
def importEvents(self, data): self.setRowCount(0) TimeStampsIndex = 0 for key in data: self.rowNumb = self.rowCount() self.setRowCount(self.rowNumb + len(data[key])) timeStamp = QDateTimeEdit() timeStamp.setDisplayFormat("dd.MM.yyyy") timeStamp.setReadOnly(True) timeStampCell = QDateTime.currentDateTime() timeStampCell = QDateTime.fromString(key, "dd.MM.yyyy") timeStamp.setDateTime(timeStampCell) self.setCellWidget(TimeStampsIndex, 0, timeStamp) if len(data[key]) > 1: self.setSpan(TimeStampsIndex, 0, len(data[key]) , 1) for row in range(len(data[key])): cell_0 = QTableWidgetItem('') cell_0.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) cell_0.setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled ) cell_1 = QTableWidgetItem('') cell_1.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter) cell_1.setFlags( Qt.ItemIsSelectable | Qt.ItemIsEnabled ) self.setItem(TimeStampsIndex + row, 1, cell_0) self.setItem(TimeStampsIndex + row, 2, cell_1) self.item(TimeStampsIndex + row, 1).setText(self._IncomeSourceCategory[data[key][row][0]['cell_0']]) try: if len(data[key][row][1]) == 2: self.item(TimeStampsIndex + row, 2).setText("%.2f" % round(float(data[key][row][1]['cell_1.1']), 2) + self._CurrencyIndex[data[key][row][1]['cell_1.2']]) elif len(data[key][row][1]) == 4: self.item(TimeStampsIndex + row, 2).setText("%.2f" % round(float(data[key][row][1]['cell_1.1']), 2) + self._CurrencyIndex[data[key][row][1]['cell_1.2']] + " -- კონვერტირდა --> " + "%.2f" % round(float(data[key][row][1]['cell_1.3']), 2) + self._CurrencyIndex[data[key][row][1]['cell_1.4']]) except ValueError: pass TimeStampsIndex = TimeStampsIndex + len(data[key]) self.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeToContents) self.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch) self.horizontalHeader().setSectionResizeMode(2, QHeaderView.Stretch) self.scrollToBottom()
def __init__(self): super(MainWindow, self).__init__() self.selectedDate = QDate.currentDate() self.fontSize = 10 centralWidget = QWidget() dateLabel = QLabel("Date:") monthCombo = QComboBox() for month in range(1, 13): monthCombo.addItem(QDate.longMonthName(month)) yearEdit = QDateTimeEdit() yearEdit.setDisplayFormat('yyyy') yearEdit.setDateRange(QDate(1753, 1, 1), QDate(8000, 1, 1)) monthCombo.setCurrentIndex(self.selectedDate.month() - 1) yearEdit.setDate(self.selectedDate) self.fontSizeLabel = QLabel("Font size:") self.fontSizeSpinBox = QSpinBox() self.fontSizeSpinBox.setRange(1, 64) self.fontSizeSpinBox.setValue(10) self.editor = QTextBrowser() self.insertCalendar() monthCombo.activated.connect(self.setMonth) yearEdit.dateChanged.connect(self.setYear) self.fontSizeSpinBox.valueChanged.connect(self.setfontSize) controlsLayout = QHBoxLayout() controlsLayout.addWidget(dateLabel) controlsLayout.addWidget(monthCombo) controlsLayout.addWidget(yearEdit) controlsLayout.addSpacing(24) controlsLayout.addWidget(self.fontSizeLabel) controlsLayout.addWidget(self.fontSizeSpinBox) controlsLayout.addStretch(1) centralLayout = QVBoxLayout() centralLayout.addLayout(controlsLayout) centralLayout.addWidget(self.editor, 1) centralWidget.setLayout(centralLayout) self.setCentralWidget(centralWidget)
class NewDateDialog(QDialog): Signal_OneParameter = pyqtSignal(str) def __init__(self, parent=None): super(NewDateDialog, self).__init__(parent) self.setWindowTitle('子窗口:用来发射信号') # 在布局中添加部件 layout = QVBoxLayout(self) self.label = QLabel(self) self.label.setText('前者发射内置信号\n后者发射自定义信号') self.datetime_inner = QDateTimeEdit(self) self.datetime_inner.setCalendarPopup(True) self.datetime_inner.setDateTime(QDateTime.currentDateTime()) self.datetime_emit = QDateTimeEdit(self) self.datetime_emit.setCalendarPopup(True) self.datetime_emit.setDateTime(QDateTime.currentDateTime()) layout.addWidget(self.label) layout.addWidget(self.datetime_inner) layout.addWidget(self.datetime_emit) # 使用两个button(ok和cancel)分别连接accept()和reject()槽函数 buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal, self) buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) layout.addWidget(buttons) self.datetime_emit.dateTimeChanged.connect(self.emit_signal) def emit_signal(self): date_str = self.datetime_emit.dateTime().toString() self.Signal_OneParameter.emit(date_str)
def __init__(self, parent=None): super(DateDialog, self).__init__(parent) layout = QVBoxLayout(self) # nice widget for editing the date self.datetime = QDateTimeEdit(self) self.datetime.setCalendarPopup(True) self.datetime.setDateTime(QDateTime.currentDateTime()) layout.addWidget(self.datetime) # OK and Cancel buttons self.buttons = QDialogButtonBox( QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal, self) layout.addWidget(self.buttons) self.buttons.accepted.connect(self.accept) self.buttons.rejected.connect(self.reject)
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)
def initUI(self): label = QLabel('QTimeEdit') label.setAlignment(Qt.AlignCenter) time = QTimeEdit(self) time.setTime(QTime.currentTime()) time.setTimeRange(QTime(00, 00, 00), QTime.currentTime()) time.setDisplayFormat('a:hh:mm:ss.zzz') label2 = QLabel('QDateEdit') label2.setAlignment(Qt.AlignCenter) self.date_edit = QDateEdit(self) self.date_edit.setDate(QDate.currentDate()) self.date_edit.setDateRange(QDate(2000, 1, 1), QDate.currentDate()) # self.date_edit.setDisplayFormat('yyyy년 MMMM d일') self.date_edit.dateChanged.connect(self.dateChange) self.label3 = QLabel('이곳에 QDateEdit에서 선택된 값이 나타납니다.') self.label3.setAlignment(Qt.AlignCenter) label4 = QLabel('QDateTimeEdit') label4.setAlignment(Qt.AlignCenter) label5 = QLabel(self) label5.setAlignment(Qt.AlignCenter) label5.setText( f'QDateTime \n 현재 시간은 {QDateTime.currentDateTime().toString("yyyy년 MMMM d일 ap hh시 mm분 ss초.zzz")} 입니다.' ) dt_edit = QDateTimeEdit(self) dt_edit.setDateTimeRange(QDateTime(2020, 1, 1, 00, 00, 00),\ QDateTime(2021, 1, 1, 00, 00, 00)) dt_edit.setDisplayFormat('yyyy.MM.dd hh:mm:ss') vbox = QVBoxLayout() vbox.addWidget(label) vbox.addWidget(time) vbox.addWidget(label2) vbox.addWidget(self.date_edit) vbox.addWidget(self.label3) vbox.addWidget(label4) vbox.addWidget(label5) vbox.addWidget(dt_edit) self.setLayout(vbox) self.setWindowTitle('QTime, QDateEdit, QDateTimeEdit') self.setGeometry(300, 300, 400, 300) self.show()
class DateTimeFilterPage(QWidget): def __init__(self, parent=None): super(DateTimeFilterPage, self).__init__(parent) self.fromEdit = QDateTimeEdit() self.toEdit = QDateTimeEdit() groupLayout = QFormLayout() groupLayout.addRow("Od:", self.fromEdit) groupLayout.addRow("Do:", self.toEdit) self.group = QGroupBox("Datum a čas") self.group.setCheckable(True) self.group.setChecked(False) self.group.setLayout(groupLayout) layout = QVBoxLayout() layout.addWidget(self.group) layout.addStretch(1) self.setLayout(layout) def initControls(self, filter_): self.group.setChecked(False) for key in ['start_datetime', 'end_datetime']: if key in filter_: self.group.setChecked(True) break start = filter_.get('start_datetime', datetime.utcnow()) start = calendar.timegm(start.timetuple()) end = filter_.get('end_datetime', datetime.utcnow()) end = calendar.timegm(end.timetuple()) self.fromEdit.setDateTime(QDateTime.fromTime_t(start, TZ)) self.toEdit.setDateTime(QDateTime.fromTime_t(end, TZ)) def getFilter(self): filter_ = {} if self.group.isChecked(): start = self.fromEdit.dateTime().toTime_t() end = self.toEdit.dateTime().toTime_t() filter_['start_datetime'] = datetime.utcfromtimestamp(start) filter_['end_datetime'] = datetime.utcfromtimestamp(end) return filter_
class MainWindow(QWidget): def __init__(self, parent=None): super().__init__(parent) self.files = files.get_files() self.height = 300 self.checkboxes = [] self.col_selects = [] self.initUI() def initUI(self): self.layout = QVBoxLayout() pic = QLabel() pic.setPixmap(QPixmap(os.getcwd() + "/logo3.jpg")) self.layout.addWidget(pic) self.flash_msg = QLabel("") self.flash_msg.setStyleSheet("QLabel { color : red; }") self.layout.addWidget(self.flash_msg) self.flash_msg.hide() self.layout.addWidget(QLabel("Wähle Größen:")) for file in self.files: checkbox = QCheckBox() text = "{} ({})".format(str(file), file.unit) checkbox.setText(text) self.layout.addWidget(checkbox) self.checkboxes.append(checkbox) col_select = Col_select(file.columns) col_select.hide() self.col_selects.append(col_select) self.layout.addWidget(col_select) checkbox.stateChanged.connect(self.toggle_checkbox(col_select)) self._set_date_time_edit() button = QPushButton("Weiter") button.clicked.connect(self.plot) self.layout.addWidget(button) self.setGeometry(300, 300, 200, self.height) self.setLayout(self.layout) self.setWindowTitle('Csv Plotter') self.show() def _set_date_time_edit(self): gridLayout = QGridLayout() self.start = QDateTimeEdit() self.end = QDateTimeEdit() gridLayout.addWidget(QLabel("Startzeit"), 0, 0) gridLayout.addWidget(self.start, 0, 1) gridLayout.addWidget(QLabel("Endzeit"), 1, 0) gridLayout.addWidget(self.end, 1, 1) self.layout.addLayout(gridLayout) def _check_submission(self, files_, columns): "checks if submit is valid, shows error message if not" msg = "" for idx, col in enumerate(columns): if col == []: msg = ("Bitte eine Größe zu folgender Kategorie auswählen: {}" .format(files_[idx].quantity)) if len(set((file.unit for file in files_))) != 1: msg = "Die Ausgewählten Größen haben unterschiedliche Einheiten." if msg: self.flash_msg.setText(msg) self.flash_msg.show() return False self.flash_msg.hide() return True def plot(self): files_and_columns = [(file, col_select) for file, checkbox, col_select in zip(self.files, self.checkboxes, self.col_selects) if checkbox.isChecked()] files_ = [file for file, col in files_and_columns] columns = [col.get_selected() for file, col in files_and_columns] if not self._check_submission(files_, columns): return files.plot_files(self.start.dateTime().toPyDateTime(), self.end.dateTime().toPyDateTime(), files_, columns) def _set_start(self, py_datetime): qt_datetime = _datetime_to_Qdatetime(py_datetime) if self.start.dateTime() < qt_datetime: self.start.setDateTime(qt_datetime) def _set_end(self, py_datetime): qt_datetime = _datetime_to_Qdatetime(py_datetime) default = QDateTime.fromString("2000-01-01 00:00:00,0" , "yyyy-MM-dd HH:mm:ss,z") if self.end.dateTime() > qt_datetime or self.end.dateTime() == default: self.end.setDateTime(qt_datetime) def toggle_checkbox(self, cb): "expand or collapse more options" def wrapped(): cb.show() if cb.isHidden() else cb.hide() self.height += 100 if cb.isHidden() else - 100 self.resize(200, self.height) file_ind = self.col_selects.index(cb) file = self.files[file_ind] self._set_start(file.start) self._set_end(file.end) return wrapped
class Window(QWidget): def __init__(self): super(Window, self).__init__() self.createSpinBoxes() self.createDateTimeEdits() self.createDoubleSpinBoxes() layout = QHBoxLayout() layout.addWidget(self.spinBoxesGroup) layout.addWidget(self.editsGroup) layout.addWidget(self.doubleSpinBoxesGroup) self.setLayout(layout) self.setWindowTitle("Spin Boxes") def createSpinBoxes(self): self.spinBoxesGroup = QGroupBox("Spinboxes") integerLabel = QLabel("Enter a value between %d and %d:" % (-20, 20)) integerSpinBox = QSpinBox() integerSpinBox.setRange(-20, 20) integerSpinBox.setSingleStep(1) integerSpinBox.setValue(0) zoomLabel = QLabel("Enter a zoom value between %d and %d:" % (0, 1000)) zoomSpinBox = QSpinBox() zoomSpinBox.setRange(0, 1000) zoomSpinBox.setSingleStep(10) zoomSpinBox.setSuffix('%') zoomSpinBox.setSpecialValueText("Automatic") zoomSpinBox.setValue(100) priceLabel = QLabel("Enter a price between %d and %d:" % (0, 999)) priceSpinBox = QSpinBox() priceSpinBox.setRange(0, 999) priceSpinBox.setSingleStep(1) priceSpinBox.setPrefix('$') priceSpinBox.setValue(99) spinBoxLayout = QVBoxLayout() spinBoxLayout.addWidget(integerLabel) spinBoxLayout.addWidget(integerSpinBox) spinBoxLayout.addWidget(zoomLabel) spinBoxLayout.addWidget(zoomSpinBox) spinBoxLayout.addWidget(priceLabel) spinBoxLayout.addWidget(priceSpinBox) self.spinBoxesGroup.setLayout(spinBoxLayout) 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) def setFormatString(self, formatString): self.meetingEdit.setDisplayFormat(formatString) if self.meetingEdit.displayedSections() & QDateTimeEdit.DateSections_Mask: self.meetingEdit.setDateRange(QDate(2004, 11, 1), QDate(2005, 11, 30)) self.meetingLabel.setText("Meeting date (between %s and %s):" % (self.meetingEdit.minimumDate().toString(Qt.ISODate), self.meetingEdit.maximumDate().toString(Qt.ISODate))) else: self.meetingEdit.setTimeRange(QTime(0, 7, 20, 0), QTime(21, 0, 0, 0)) self.meetingLabel.setText("Meeting time (between %s and %s):" % (self.meetingEdit.minimumTime().toString(Qt.ISODate), self.meetingEdit.maximumTime().toString(Qt.ISODate))) def createDoubleSpinBoxes(self): self.doubleSpinBoxesGroup = QGroupBox("Double precision spinboxes") precisionLabel = QLabel("Number of decimal places to show:") precisionSpinBox = QSpinBox() precisionSpinBox.setRange(0, 100) precisionSpinBox.setValue(2) doubleLabel = QLabel("Enter a value between %d and %d:" % (-20, 20)) self.doubleSpinBox = QDoubleSpinBox() self.doubleSpinBox.setRange(-20.0, 20.0) self.doubleSpinBox.setSingleStep(1.0) self.doubleSpinBox.setValue(0.0) scaleLabel = QLabel("Enter a scale factor between %d and %d:" % (0, 1000)) self.scaleSpinBox = QDoubleSpinBox() self.scaleSpinBox.setRange(0.0, 1000.0) self.scaleSpinBox.setSingleStep(10.0) self.scaleSpinBox.setSuffix('%') self.scaleSpinBox.setSpecialValueText("No scaling") self.scaleSpinBox.setValue(100.0) priceLabel = QLabel("Enter a price between %d and %d:" % (0, 1000)) self.priceSpinBox = QDoubleSpinBox() self.priceSpinBox.setRange(0.0, 1000.0) self.priceSpinBox.setSingleStep(1.0) self.priceSpinBox.setPrefix('$') self.priceSpinBox.setValue(99.99) precisionSpinBox.valueChanged.connect(self.changePrecision) spinBoxLayout = QVBoxLayout() spinBoxLayout.addWidget(precisionLabel) spinBoxLayout.addWidget(precisionSpinBox) spinBoxLayout.addWidget(doubleLabel) spinBoxLayout.addWidget(self.doubleSpinBox) spinBoxLayout.addWidget(scaleLabel) spinBoxLayout.addWidget(self.scaleSpinBox) spinBoxLayout.addWidget(priceLabel) spinBoxLayout.addWidget(self.priceSpinBox) self.doubleSpinBoxesGroup.setLayout(spinBoxLayout) def changePrecision(self, decimals): self.doubleSpinBox.setDecimals(decimals) self.scaleSpinBox.setDecimals(decimals) self.priceSpinBox.setDecimals(decimals)
class LogFilterDialog(QDialog): OPERATION_OPTIONS = ['', 'insert', 'delete'] TABLENAME_OPTIONS = ['', 'blocks', 'devices', 'measurements',\ 'raw_data_view'] def __init__(self, parent=None): super(LogFilterDialog, self).__init__(parent) self.accepted.connect(self.createFilter) self.operationCombo = QComboBox() self.operationCombo.addItems(LogFilterDialog.OPERATION_OPTIONS) self.tablenameCombo = QComboBox() self.tablenameCombo.addItems(LogFilterDialog.TABLENAME_OPTIONS) self.fromEdit = QDateTimeEdit() self.toEdit = QDateTimeEdit() groupLayout = QFormLayout() groupLayout.addRow("Od: ", self.fromEdit) groupLayout.addRow("Do: ", self.toEdit) groupLayout.addRow("Operace: ", self.operationCombo) groupLayout.addRow("Tabulka: ", self.tablenameCombo) rejectButton = QPushButton("Storno") rejectButton.clicked.connect(self.reject) acceptButton = QPushButton("OK") acceptButton.clicked.connect(self.accept) buttonsLayout = QHBoxLayout() buttonsLayout.addStretch(1) buttonsLayout.addWidget(acceptButton) buttonsLayout.addWidget(rejectButton) layout = QVBoxLayout() layout.addLayout(groupLayout) layout.addSpacing(12) layout.addLayout(buttonsLayout) self.setLayout(layout) self.setMinimumWidth(300) self.setWindowTitle("Filtrování logů") def initControls(self, filter_): selected = filter_.get('operation', '') try: index = LogFilterDialog.OPERATION_OPTIONS.index(selected) except ValueError: index = 0 self.operationCombo.setCurrentIndex(index) selected = filter_.get('tablename', '') try: index = LogFilterDialog.TABLENAME_OPTIONS.index(selected) except ValueError: index = 0 self.tablenameCombo.setCurrentIndex(index) start = filter_.get('start_datetime', None) if start is None: start = datetime.utcnow() start = calendar.timegm(start.timetuple()) - 3600*24 else: start = calendar.timegm(start.timetuple()) end = filter_.get('end_datetime', datetime.utcnow()) end = calendar.timegm(end.timetuple()) self.fromEdit.setDateTime(QDateTime.fromTime_t(start, TZ)) self.toEdit.setDateTime(QDateTime.fromTime_t(end, TZ)) def getFilter(self): filter_ = {} start = self.fromEdit.dateTime().toTime_t() end = self.toEdit.dateTime().toTime_t() filter_['start_datetime'] = datetime.utcfromtimestamp(start) filter_['end_datetime'] = datetime.utcfromtimestamp(end) if self.operationCombo.currentText(): filter_['operation'] = self.operationCombo.currentText() if self.tablenameCombo.currentText(): filter_['tablename'] = self.tablenameCombo.currentText() return filter_ @pyqtSlot() def createFilter(self): self._filter = self.getFilter() def filter(self): return self._filter
class MainWindow_Ui(QMainWindow): def __init__(self, persepolis_setting): super().__init__() # MainWindow self.persepolis_setting = persepolis_setting icons = ':/' + \ str(self.persepolis_setting.value('settings/icons')) + '/' self.setWindowTitle("Persepolis Download Manager") self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/persepolis.svg'))) self.centralwidget = QWidget(self) self.verticalLayout = QVBoxLayout(self.centralwidget) # enable drag and drop self.setAcceptDrops(True) # frame self.frame = QFrame(self.centralwidget) # download_table_horizontalLayout download_table_horizontalLayout = QHBoxLayout() tabels_splitter = QSplitter(Qt.Horizontal) # category_tree self.category_tree_qwidget = QWidget(self) category_tree_verticalLayout = QVBoxLayout() self.category_tree = CategoryTreeView(self) category_tree_verticalLayout.addWidget(self.category_tree) self.category_tree_model = QStandardItemModel() self.category_tree.setModel(self.category_tree_model) category_table_header = ['Category'] self.category_tree_model.setHorizontalHeaderLabels( category_table_header) self.category_tree.header().setStretchLastSection(True) # queue_panel self.queue_panel_widget = QWidget(self) queue_panel_verticalLayout_main = QVBoxLayout(self.queue_panel_widget) # queue_panel_show_button self.queue_panel_show_button = QPushButton(self) queue_panel_verticalLayout_main.addWidget(self.queue_panel_show_button) # queue_panel_widget_frame self.queue_panel_widget_frame = QFrame(self) self.queue_panel_widget_frame.setFrameShape(QFrame.StyledPanel) self.queue_panel_widget_frame.setFrameShadow(QFrame.Raised) queue_panel_verticalLayout_main.addWidget( self.queue_panel_widget_frame) queue_panel_verticalLayout = QVBoxLayout(self.queue_panel_widget_frame) queue_panel_verticalLayout_main.setContentsMargins(50, -1, 50, -1) # start_end_frame self.start_end_frame = QFrame(self) # start time start_verticalLayout = QVBoxLayout(self.start_end_frame) self.start_checkBox = QCheckBox(self) start_verticalLayout.addWidget(self.start_checkBox) self.start_frame = QFrame(self) self.start_frame.setFrameShape(QFrame.StyledPanel) self.start_frame.setFrameShadow(QFrame.Raised) start_frame_verticalLayout = QVBoxLayout(self.start_frame) self.start_time_qDataTimeEdit = QDateTimeEdit(self.start_frame) self.start_time_qDataTimeEdit.setDisplayFormat('H:mm') start_frame_verticalLayout.addWidget(self.start_time_qDataTimeEdit) start_verticalLayout.addWidget(self.start_frame) # end time self.end_checkBox = QCheckBox(self) start_verticalLayout.addWidget(self.end_checkBox) self.end_frame = QFrame(self) self.end_frame.setFrameShape(QFrame.StyledPanel) self.end_frame.setFrameShadow(QFrame.Raised) end_frame_verticalLayout = QVBoxLayout(self.end_frame) self.end_time_qDateTimeEdit = QDateTimeEdit(self.end_frame) self.end_time_qDateTimeEdit.setDisplayFormat('H:mm') end_frame_verticalLayout.addWidget(self.end_time_qDateTimeEdit) start_verticalLayout.addWidget(self.end_frame) self.reverse_checkBox = QCheckBox(self) start_verticalLayout.addWidget(self.reverse_checkBox) queue_panel_verticalLayout.addWidget(self.start_end_frame) # limit_after_frame self.limit_after_frame = QFrame(self) # limit_checkBox limit_verticalLayout = QVBoxLayout(self.limit_after_frame) self.limit_checkBox = QCheckBox(self) limit_verticalLayout.addWidget(self.limit_checkBox) # limit_frame self.limit_frame = QFrame(self) self.limit_frame.setFrameShape(QFrame.StyledPanel) self.limit_frame.setFrameShadow(QFrame.Raised) limit_verticalLayout.addWidget(self.limit_frame) limit_frame_verticalLayout = QVBoxLayout(self.limit_frame) # limit_spinBox limit_frame_horizontalLayout = QHBoxLayout() self.limit_spinBox = QDoubleSpinBox(self) self.limit_spinBox.setMinimum(1) self.limit_spinBox.setMaximum(1023) limit_frame_horizontalLayout.addWidget(self.limit_spinBox) # limit_comboBox self.limit_comboBox = QComboBox(self) self.limit_comboBox.addItem("") self.limit_comboBox.addItem("") limit_frame_horizontalLayout.addWidget(self.limit_comboBox) limit_frame_verticalLayout.addLayout(limit_frame_horizontalLayout) # limit_pushButton self.limit_pushButton = QPushButton(self) limit_frame_verticalLayout.addWidget(self.limit_pushButton) # after_checkBox self.after_checkBox = QtWidgets.QCheckBox(self) limit_verticalLayout.addWidget(self.after_checkBox) # after_frame self.after_frame = QtWidgets.QFrame(self) self.after_frame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.after_frame.setFrameShadow(QtWidgets.QFrame.Raised) limit_verticalLayout.addWidget(self.after_frame) after_frame_verticalLayout = QVBoxLayout(self.after_frame) # after_comboBox self.after_comboBox = QComboBox(self) self.after_comboBox.addItem("") after_frame_verticalLayout.addWidget(self.after_comboBox) # after_pushButton self.after_pushButton = QPushButton(self) after_frame_verticalLayout.addWidget(self.after_pushButton) queue_panel_verticalLayout.addWidget(self.limit_after_frame) category_tree_verticalLayout.addWidget(self.queue_panel_widget) # keep_awake_checkBox self.keep_awake_checkBox = QCheckBox(self) queue_panel_verticalLayout.addWidget(self.keep_awake_checkBox) self.category_tree_qwidget.setLayout(category_tree_verticalLayout) tabels_splitter.addWidget(self.category_tree_qwidget) # download table widget self.download_table_content_widget = QWidget(self) download_table_content_widget_verticalLayout = QVBoxLayout( self.download_table_content_widget) self.download_table = DownloadTableWidget(self) download_table_content_widget_verticalLayout.addWidget( self.download_table) tabels_splitter.addWidget(self.download_table_content_widget) self.download_table.setColumnCount(13) self.download_table.setSelectionBehavior(QAbstractItemView.SelectRows) self.download_table.setEditTriggers(QAbstractItemView.NoEditTriggers) self.download_table.verticalHeader().hide() # hide gid and download dictioanry section self.download_table.setColumnHidden(8, True) self.download_table.setColumnHidden(9, True) download_table_header = ['File Name', 'Status', 'Size', 'Downloaded', 'Percentage', 'Connections', 'Transfer rate', 'Estimate time left', 'Gid', 'Link', 'First try date', 'Last try date', 'Category'] self.download_table.setHorizontalHeaderLabels(download_table_header) # fixing the size of download_table when window is Maximized! self.download_table.horizontalHeader().setSectionResizeMode(0) self.download_table.horizontalHeader().setStretchLastSection(True) tabels_splitter.setStretchFactor(0, 3) # category_tree width tabels_splitter.setStretchFactor(1, 10) # ratio of tables's width download_table_horizontalLayout.addWidget(tabels_splitter) self.frame.setLayout(download_table_horizontalLayout) self.verticalLayout.addWidget(self.frame) self.setCentralWidget(self.centralwidget) # menubar self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 600, 24)) self.setMenuBar(self.menubar) fileMenu = self.menubar.addMenu('&File') editMenu = self.menubar.addMenu('&Edit') viewMenu = self.menubar.addMenu('&View') downloadMenu = self.menubar.addMenu('&Download') queueMenu = self.menubar.addMenu('&Queue') helpMenu = self.menubar.addMenu('&Help') # viewMenu submenus sortMenu = viewMenu.addMenu('Sort by') # statusbar self.statusbar = QStatusBar(self) self.setStatusBar(self.statusbar) self.statusbar.showMessage("Persepolis Download Manager") # toolBar self.toolBar2 = QToolBar(self) self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar2) self.toolBar2.setWindowTitle('Menu') self.toolBar2.setIconSize(QSize(38, 38)) self.toolBar2.setFloatable(False) self.toolBar2.setMovable(False) self.toolBar = QToolBar(self) self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) self.toolBar.setWindowTitle('Toolbar') self.toolBar.setIconSize(QSize(38, 38)) self.toolBar.setFloatable(False) self.toolBar.setMovable(False) #toolBar and menubar and actions self.stopAllAction = QAction(QIcon(icons + 'stop_all'), 'Stop all active downloads', self, statusTip='Stop all active downloads', triggered=self.stopAllDownloads) downloadMenu.addAction(self.stopAllAction) self.sort_file_name_Action = QAction( 'File name', self, triggered=self.sortByName) sortMenu.addAction(self.sort_file_name_Action) self.sort_file_size_Action = QAction( 'File size', self, triggered=self.sortBySize) sortMenu.addAction(self.sort_file_size_Action) self.sort_first_try_date_Action = QAction( 'First try date', self, triggered=self.sortByFirstTry) sortMenu.addAction(self.sort_first_try_date_Action) self.sort_last_try_date_Action = QAction( 'Last try date', self, triggered=self.sortByLastTry) sortMenu.addAction(self.sort_last_try_date_Action) self.sort_download_status_Action = QAction( 'Download status', self, triggered=self.sortByStatus) sortMenu.addAction(self.sort_download_status_Action) self.trayAction = QAction('Show system tray icon', self, statusTip="Show/Hide system tray icon", triggered=self.showTray) self.trayAction.setCheckable(True) viewMenu.addAction(self.trayAction) self.showMenuBarAction = QAction( 'Show menubar', self, statusTip='Show menubar', triggered=self.showMenuBar) self.showMenuBarAction.setCheckable(True) viewMenu.addAction(self.showMenuBarAction) self.showSidePanelAction = QAction( 'Show side panel', self, statusTip='Show side panel', triggered=self.showSidePanel) self.showSidePanelAction.setCheckable(True) viewMenu.addAction(self.showSidePanelAction) self.minimizeAction = QAction(QIcon(icons + 'minimize'), 'Minimize to system tray', self, shortcut="Ctrl+W", statusTip="Minimize to system tray", triggered=self.minMaxTray) viewMenu.addAction(self.minimizeAction) self.addlinkAction = QAction(QIcon(icons + 'add'), 'Add New Download Link', self, shortcut="Ctrl+N", statusTip="Add New Download Link", triggered=self.addLinkButtonPressed) fileMenu.addAction(self.addlinkAction) self.addtextfileAction = QAction(QIcon(icons + 'file'), 'Import links from text file', self, statusTip='Create a Text file and put links in it.line by line!', triggered=self.importText) fileMenu.addAction(self.addtextfileAction) self.resumeAction = QAction(QIcon(icons + 'play'), 'Resume Download', self, shortcut="Ctrl+R", statusTip="Resume Download", triggered=self.resumeButtonPressed) downloadMenu.addAction(self.resumeAction) self.pauseAction = QAction(QIcon(icons + 'pause'), 'Pause Download', self, shortcut="Ctrl+C", statusTip="Pause Download", triggered=self.pauseButtonPressed) downloadMenu.addAction(self.pauseAction) self.stopAction = QAction(QIcon(icons + 'stop'), 'Stop Download', self, shortcut="Ctrl+S", statusTip="Stop/Cancel Download", triggered=self.stopButtonPressed) downloadMenu.addAction(self.stopAction) self.removeAction = QAction(QIcon(icons + 'remove'), 'Remove Download', self, shortcut="Ctrl+D", statusTip="Remove Download", triggered=self.removeButtonPressed) downloadMenu.addAction(self.removeAction) self.propertiesAction = QAction(QIcon(icons + 'setting'), 'Properties', self, shortcut="Ctrl+P", statusTip="Properties", triggered=self.propertiesButtonPressed) downloadMenu.addAction(self.propertiesAction) self.progressAction = QAction(QIcon(icons + 'window'), 'Progress', self, shortcut="Ctrl+Z", statusTip="Progress", triggered=self.progressButtonPressed) downloadMenu.addAction(self.progressAction) self.openFileAction = QAction(QIcon( icons + 'file'), 'Open file', self, statusTip='Open file', triggered=self.openFile) fileMenu.addAction(self.openFileAction) self.openDownloadFolderAction = QAction(QIcon( icons + 'folder'), 'Open download folder', self, statusTip='Open download folder', triggered=self.openDownloadFolder) fileMenu.addAction(self.openDownloadFolderAction) self.deleteFileAction = QAction(QIcon( icons + 'trash'), 'Delete file', self, statusTip='Delete file', triggered=self.deleteFile) fileMenu.addAction(self.deleteFileAction) self.openDefaultDownloadFolderAction = QAction(QIcon( icons + 'folder'), 'Open default download folder', self, statusTip='Open default download folder', triggered=self.openDefaultDownloadFolder) fileMenu.addAction(self.openDefaultDownloadFolderAction) self.exitAction = QAction(QIcon(icons + 'exit'), 'Exit', self, shortcut="Ctrl+Q", statusTip="Exit", triggered=self.closeEvent) fileMenu.addAction(self.exitAction) self.selectAction = QAction('Select multiple items ', self, statusTip='Select multiple items', triggered=self.selectDownloads) self.selectAction.setCheckable(True) editMenu.addAction(self.selectAction) self.selectAllAction = QAction(QIcon( icons + 'select_all'), 'Select All', self, statusTip='Select All', triggered=self.selectAll) editMenu.addAction(self.selectAllAction) self.selectAllAction.setEnabled(False) self.removeSelectedAction = QAction(QIcon(icons + 'multi_remove'), 'Remove selected downloads form list', self, statusTip='Remove selected downloads form list', triggered=self.removeSelected) editMenu.addAction(self.removeSelectedAction) self.removeSelectedAction.setEnabled(False) self.deleteSelectedAction = QAction(QIcon(icons + 'multi_trash'), 'Delete selected download files', self, statusTip='Delete selected download files', triggered=self.deleteSelected) editMenu.addAction(self.deleteSelectedAction) self.deleteSelectedAction.setEnabled(False) self.createQueueAction = QAction(QIcon(icons + 'add_queue'), 'Create new queue', self, statusTip='Create new download queue', triggered=self.createQueue) queueMenu.addAction(self.createQueueAction) self.removeQueueAction = QAction(QIcon(icons + 'remove_queue'), 'Remove this queue', self, statusTip='Remove this queue', triggered=self.removeQueue) queueMenu.addAction(self.removeQueueAction) self.startQueueAction = QAction(QIcon( icons + 'start_queue'), 'Start this queue', self, statusTip='Start this queue', triggered=self.startQueue) queueMenu.addAction(self.startQueueAction) self.stopQueueAction = QAction(QIcon( icons + 'stop_queue'), 'Stop this queue', self, statusTip='Stop this queue', triggered=self.stopQueue) queueMenu.addAction(self.stopQueueAction) self.moveUpAction = QAction(QIcon(icons + 'up'), 'Move up this item', self, statusTip='Move currently selected item up by one row', triggered=self.moveUp) queueMenu.addAction(self.moveUpAction) self.moveDownAction = QAction(QIcon(icons + 'down'), 'Move down this item', self, statusTip='Move currently selected item down by one row', triggered=self.moveDown) queueMenu.addAction(self.moveDownAction) self.moveUpSelectedAction = QAction(QIcon(icons + 'multi_up'), 'Move up selected items', self, statusTip='Move currently selected items up by one row', triggered=self.moveUpSelected) queueMenu.addAction(self.moveUpSelectedAction) self.moveDownSelectedAction = QAction(QIcon(icons + 'multi_down'), 'Move down selected items', self, statusTip='Move currently selected items down by one row', triggered=self.moveDownSelected) queueMenu.addAction(self.moveDownSelectedAction) self.preferencesAction = QAction(QIcon(icons + 'preferences'), 'Preferences', self, statusTip='Preferences', triggered=self.openPreferences, menuRole=5) editMenu.addAction(self.preferencesAction) self.aboutAction = QAction(QIcon( icons + 'about'), 'About', self, statusTip='About', triggered=self.openAbout, menuRole=4) helpMenu.addAction(self.aboutAction) self.issueAction = QAction(QIcon(icons + 'about'), 'Report an issue', self, statusTip='Report an issue', triggered=self.reportIssue) helpMenu.addAction(self.issueAction) self.updateAction = QAction(QIcon(icons + 'about'), 'Check for newer version', self, statusTip='Check for newer release', triggered=self.newUpdate) helpMenu.addAction(self.updateAction) self.logAction = QAction(QIcon(icons + 'about'), 'Show log file', self, statusTip='Help', triggered=self.showLog) helpMenu.addAction(self.logAction) self.helpAction = QAction(QIcon(icons + 'about'), 'Help', self, statusTip='Help', triggered=self.persepolisHelp) helpMenu.addAction(self.helpAction) self.qmenu = MenuWidget(self) self.toolBar2.addWidget(self.qmenu) # labels self.queue_panel_show_button.setText("Hide options") self.start_checkBox.setText("Start Time") self.end_checkBox.setText("End Time") self.reverse_checkBox.setText("Download bottom of\n the list first") self.limit_checkBox.setText("Limit Speed") self.limit_comboBox.setItemText(0, "KB/S") self.limit_comboBox.setItemText(1, "MB/S") self.limit_pushButton.setText("Apply") self.after_checkBox.setText("After download") self.after_comboBox.setItemText(0, "Shut Down") self.keep_awake_checkBox.setText("Keep system awake!") self.keep_awake_checkBox.setToolTip( "<html><head/><body><p>This option is preventing system from going to sleep.\ This is necessary if your power manager is suspending system automatically. </p></body></html>") self.after_pushButton.setText("Apply") def changeIcon(self, icons): icons = ':/' + str(icons) + '/' action_icon_dict = {self.stopAllAction: 'stop_all', self.minimizeAction: 'minimize', self.addlinkAction: 'add', self.addtextfileAction: 'file', self.resumeAction: 'play', self.pauseAction: 'pause', self.stopAction: 'stop', self.removeAction: 'remove', self.propertiesAction: 'setting', self.progressAction: 'window', self.openFileAction: 'file', self.openDownloadFolderAction: 'folder', self.deleteFileAction: 'trash', self.openDefaultDownloadFolderAction: 'folder', self.exitAction: 'exit', self.selectAllAction: 'select_all', self.removeSelectedAction: 'multi_remove', self.deleteSelectedAction: 'multi_trash', self.createQueueAction: 'add_queue', self.removeQueueAction: 'remove_queue', self.startQueueAction: 'start_queue', self.stopQueueAction: 'stop_queue', self.moveUpAction: 'up', self.moveDownAction: 'down', self.preferencesAction: 'preferences', self.aboutAction: 'about', self.issueAction: 'about', self.updateAction: 'about', self.qmenu: 'menu'} for key in action_icon_dict.keys(): key.setIcon(QIcon(icons + str(action_icon_dict[key])))
def __init__(self, persepolis_setting): super().__init__() icon = QtGui.QIcon() self.persepolis_setting = persepolis_setting # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/persepolis.svg'))) self.setWindowTitle(QCoreApplication.translate("setting_ui_tr", 'Preferences')) # set ui direction ui_direction = self.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) global icons icons = ':/' + str(self.persepolis_setting.value('settings/icons')) + '/' # main layout window_verticalLayout = QVBoxLayout(self) # setting_tabWidget self.setting_tabWidget = QTabWidget(self) # download_options_tab self.download_options_tab = QWidget() download_options_tab_verticalLayout = QVBoxLayout(self.download_options_tab) download_options_tab_verticalLayout.setContentsMargins(21, 21, 0, 0) # tries tries_horizontalLayout = QHBoxLayout() self.tries_label = QLabel(self.download_options_tab) tries_horizontalLayout.addWidget(self.tries_label) self.tries_spinBox = QSpinBox(self.download_options_tab) self.tries_spinBox.setMinimum(1) tries_horizontalLayout.addWidget(self.tries_spinBox) download_options_tab_verticalLayout.addLayout(tries_horizontalLayout) #wait wait_horizontalLayout = QHBoxLayout() self.wait_label = QLabel(self.download_options_tab) wait_horizontalLayout.addWidget(self.wait_label) self.wait_spinBox = QSpinBox(self.download_options_tab) wait_horizontalLayout.addWidget(self.wait_spinBox) download_options_tab_verticalLayout.addLayout(wait_horizontalLayout) # time_out time_out_horizontalLayout = QHBoxLayout() self.time_out_label = QLabel(self.download_options_tab) time_out_horizontalLayout.addWidget(self.time_out_label) self.time_out_spinBox = QSpinBox(self.download_options_tab) time_out_horizontalLayout.addWidget(self.time_out_spinBox) download_options_tab_verticalLayout.addLayout(time_out_horizontalLayout) # connections connections_horizontalLayout = QHBoxLayout() self.connections_label = QLabel(self.download_options_tab) connections_horizontalLayout.addWidget(self.connections_label) self.connections_spinBox = QSpinBox(self.download_options_tab) self.connections_spinBox.setMinimum(1) self.connections_spinBox.setMaximum(16) connections_horizontalLayout.addWidget(self.connections_spinBox) download_options_tab_verticalLayout.addLayout(connections_horizontalLayout) # rpc_port self.rpc_port_label = QLabel(self.download_options_tab) self.rpc_horizontalLayout = QHBoxLayout() self.rpc_horizontalLayout.addWidget(self.rpc_port_label) self.rpc_port_spinbox = QSpinBox(self.download_options_tab) self.rpc_port_spinbox.setMinimum(1024) self.rpc_port_spinbox.setMaximum(65535) self.rpc_horizontalLayout.addWidget(self.rpc_port_spinbox) download_options_tab_verticalLayout.addLayout( self.rpc_horizontalLayout) # wait_queue wait_queue_horizontalLayout = QHBoxLayout() self.wait_queue_label = QLabel(self.download_options_tab) wait_queue_horizontalLayout.addWidget(self.wait_queue_label) self.wait_queue_time = QDateTimeEdit(self.download_options_tab) self.wait_queue_time.setDisplayFormat('H:mm') wait_queue_horizontalLayout.addWidget(self.wait_queue_time) download_options_tab_verticalLayout.addLayout( wait_queue_horizontalLayout) # change aria2 path aria2_path_verticalLayout = QVBoxLayout() self.aria2_path_checkBox = QCheckBox(self.download_options_tab) aria2_path_verticalLayout.addWidget(self.aria2_path_checkBox) aria2_path_horizontalLayout = QHBoxLayout() self.aria2_path_lineEdit = QLineEdit(self.download_options_tab) aria2_path_horizontalLayout.addWidget(self.aria2_path_lineEdit) self.aria2_path_pushButton = QPushButton(self.download_options_tab) aria2_path_horizontalLayout.addWidget(self.aria2_path_pushButton) aria2_path_verticalLayout.addLayout(aria2_path_horizontalLayout) download_options_tab_verticalLayout.addLayout(aria2_path_verticalLayout) download_options_tab_verticalLayout.addStretch(1) self.setting_tabWidget.addTab(self.download_options_tab, "") # save_as_tab self.save_as_tab = QWidget() save_as_tab_verticalLayout = QVBoxLayout(self.save_as_tab) save_as_tab_verticalLayout.setContentsMargins(20, 30, 0, 0) # download_folder self.download_folder_horizontalLayout = QHBoxLayout() self.download_folder_label = QLabel(self.save_as_tab) self.download_folder_horizontalLayout.addWidget( self.download_folder_label) self.download_folder_lineEdit = QLineEdit(self.save_as_tab) self.download_folder_horizontalLayout.addWidget(self.download_folder_lineEdit) self.download_folder_pushButton = QPushButton(self.save_as_tab) self.download_folder_horizontalLayout.addWidget(self.download_folder_pushButton) save_as_tab_verticalLayout.addLayout(self.download_folder_horizontalLayout) # temp_download_folder self.temp_horizontalLayout = QHBoxLayout() self.temp_download_label = QLabel(self.save_as_tab) self.temp_horizontalLayout.addWidget(self.temp_download_label) self.temp_download_lineEdit = QLineEdit(self.save_as_tab) self.temp_horizontalLayout.addWidget(self.temp_download_lineEdit) self.temp_download_pushButton = QPushButton(self.save_as_tab) self.temp_horizontalLayout.addWidget(self.temp_download_pushButton) save_as_tab_verticalLayout.addLayout(self.temp_horizontalLayout) # create subfolder self.subfolder_checkBox = QCheckBox(self.save_as_tab) save_as_tab_verticalLayout.addWidget(self.subfolder_checkBox) save_as_tab_verticalLayout.addStretch(1) self.setting_tabWidget.addTab(self.save_as_tab, "") # notifications_tab self.notifications_tab = QWidget() notification_tab_verticalLayout = QVBoxLayout(self.notifications_tab) notification_tab_verticalLayout.setContentsMargins(21, 21, 0, 0) self.enable_notifications_checkBox = QCheckBox(self.notifications_tab) notification_tab_verticalLayout.addWidget(self.enable_notifications_checkBox) self.sound_frame = QFrame(self.notifications_tab) self.sound_frame.setFrameShape(QFrame.StyledPanel) self.sound_frame.setFrameShadow(QFrame.Raised) verticalLayout = QVBoxLayout(self.sound_frame) self.volume_label = QLabel(self.sound_frame) verticalLayout.addWidget(self.volume_label) self.volume_dial = QDial(self.sound_frame) self.volume_dial.setProperty("value", 100) verticalLayout.addWidget(self.volume_dial) notification_tab_verticalLayout.addWidget(self.sound_frame) # message_notification message_notification_horizontalLayout = QHBoxLayout() self.notification_label = QLabel(self.notifications_tab) message_notification_horizontalLayout.addWidget(self.notification_label) self.notification_comboBox = QComboBox(self.notifications_tab) message_notification_horizontalLayout.addWidget(self.notification_comboBox) notification_tab_verticalLayout.addLayout(message_notification_horizontalLayout) notification_tab_verticalLayout.addStretch(1) self.setting_tabWidget.addTab(self.notifications_tab, "") # style_tab self.style_tab = QWidget() style_tab_verticalLayout = QVBoxLayout(self.style_tab) style_tab_verticalLayout.setContentsMargins(21, 21, 0, 0) # style style_horizontalLayout = QHBoxLayout() self.style_label = QLabel(self.style_tab) style_horizontalLayout.addWidget(self.style_label) self.style_comboBox = QComboBox(self.style_tab) style_horizontalLayout.addWidget(self.style_comboBox) style_tab_verticalLayout.addLayout(style_horizontalLayout) # language language_horizontalLayout = QHBoxLayout() self.lang_label = QLabel(self.style_tab) language_horizontalLayout.addWidget(self.lang_label) self.lang_comboBox = QComboBox(self.style_tab) language_horizontalLayout.addWidget(self.lang_comboBox) style_tab_verticalLayout.addLayout(language_horizontalLayout) language_horizontalLayout = QHBoxLayout() self.lang_label.setText(QCoreApplication.translate("setting_ui_tr", "Language:")) # color scheme self.color_label = QLabel(self.style_tab) language_horizontalLayout.addWidget(self.color_label) self.color_comboBox = QComboBox(self.style_tab) language_horizontalLayout.addWidget(self.color_comboBox) style_tab_verticalLayout.addLayout(language_horizontalLayout) # icons icons_horizontalLayout = QHBoxLayout() self.icon_label = QLabel(self.style_tab) icons_horizontalLayout.addWidget(self.icon_label) self.icon_comboBox = QComboBox(self.style_tab) icons_horizontalLayout.addWidget(self.icon_comboBox) style_tab_verticalLayout.addLayout(icons_horizontalLayout) self.icons_size_horizontalLayout = QHBoxLayout() self.icons_size_label = QLabel(self.style_tab) self.icons_size_horizontalLayout.addWidget(self.icons_size_label) self.icons_size_comboBox = QComboBox(self.style_tab) self.icons_size_horizontalLayout.addWidget(self.icons_size_comboBox) style_tab_verticalLayout.addLayout(self.icons_size_horizontalLayout) # font font_horizontalLayout = QHBoxLayout() self.font_checkBox = QCheckBox(self.style_tab) font_horizontalLayout.addWidget(self.font_checkBox) self.fontComboBox = QFontComboBox(self.style_tab) font_horizontalLayout.addWidget(self.fontComboBox) self.font_size_label = QLabel(self.style_tab) font_horizontalLayout.addWidget(self.font_size_label) self.font_size_spinBox = QSpinBox(self.style_tab) self.font_size_spinBox.setMinimum(1) font_horizontalLayout.addWidget(self.font_size_spinBox) style_tab_verticalLayout.addLayout(font_horizontalLayout) self.setting_tabWidget.addTab(self.style_tab, "") window_verticalLayout.addWidget(self.setting_tabWidget) # Enable system tray icon self.enable_system_tray_checkBox = QCheckBox(self.style_tab) style_tab_verticalLayout.addWidget(self.enable_system_tray_checkBox) # after_download dialog self.after_download_checkBox = QCheckBox() style_tab_verticalLayout.addWidget(self.after_download_checkBox) # show_menubar_checkbox self.show_menubar_checkbox = QCheckBox() style_tab_verticalLayout.addWidget(self.show_menubar_checkbox) # show_sidepanel_checkbox self.show_sidepanel_checkbox = QCheckBox() style_tab_verticalLayout.addWidget(self.show_sidepanel_checkbox) # hide progress window self.show_progress_window_checkbox = QCheckBox() style_tab_verticalLayout.addWidget(self.show_progress_window_checkbox) # add persepolis to startup self.startup_checkbox = QCheckBox() style_tab_verticalLayout.addWidget(self.startup_checkbox) # keep system awake self.keep_awake_checkBox = QCheckBox() style_tab_verticalLayout.addWidget(self.keep_awake_checkBox) style_tab_verticalLayout.addStretch(1) # columns_tab self.columns_tab = QWidget() columns_tab_verticalLayout = QVBoxLayout(self.columns_tab) columns_tab_verticalLayout.setContentsMargins(21, 21, 0, 0) # creating checkBox for columns self.show_column_label = QLabel() self.column0_checkBox = QCheckBox() self.column1_checkBox = QCheckBox() self.column2_checkBox = QCheckBox() self.column3_checkBox = QCheckBox() self.column4_checkBox = QCheckBox() self.column5_checkBox = QCheckBox() self.column6_checkBox = QCheckBox() self.column7_checkBox = QCheckBox() self.column10_checkBox = QCheckBox() self.column11_checkBox = QCheckBox() self.column12_checkBox = QCheckBox() columns_tab_verticalLayout.addWidget(self.show_column_label) columns_tab_verticalLayout.addWidget(self.column0_checkBox) columns_tab_verticalLayout.addWidget(self.column1_checkBox) columns_tab_verticalLayout.addWidget(self.column2_checkBox) columns_tab_verticalLayout.addWidget(self.column3_checkBox) columns_tab_verticalLayout.addWidget(self.column4_checkBox) columns_tab_verticalLayout.addWidget(self.column5_checkBox) columns_tab_verticalLayout.addWidget(self.column6_checkBox) columns_tab_verticalLayout.addWidget(self.column7_checkBox) columns_tab_verticalLayout.addWidget(self.column10_checkBox) columns_tab_verticalLayout.addWidget(self.column11_checkBox) columns_tab_verticalLayout.addWidget(self.column12_checkBox) columns_tab_verticalLayout.addStretch(1) self.setting_tabWidget.addTab(self.columns_tab, '') # video_finder_tab self.video_finder_tab = QWidget() video_finder_layout = QVBoxLayout(self.video_finder_tab) video_finder_layout.setContentsMargins(21, 21, 0, 0) video_finder_tab_verticalLayout = QVBoxLayout() # Whether to enable video link capturing. self.enable_video_finder_checkbox = QCheckBox(self.video_finder_tab) video_finder_layout.addWidget(self.enable_video_finder_checkbox) # If we should hide videos with no audio self.hide_no_audio_checkbox = QCheckBox(self.video_finder_tab) video_finder_tab_verticalLayout.addWidget(self.hide_no_audio_checkbox) # If we should hide audios without video self.hide_no_video_checkbox = QCheckBox(self.video_finder_tab) video_finder_tab_verticalLayout.addWidget(self.hide_no_video_checkbox) max_links_horizontalLayout = QHBoxLayout() # max_links_label self.max_links_label = QLabel(self.video_finder_tab) max_links_horizontalLayout.addWidget(self.max_links_label) # max_links_spinBox self.max_links_spinBox = QSpinBox(self.video_finder_tab) self.max_links_spinBox.setMinimum(1) self.max_links_spinBox.setMaximum(16) max_links_horizontalLayout.addWidget(self.max_links_spinBox) video_finder_tab_verticalLayout.addLayout(max_links_horizontalLayout) self.video_finder_dl_path_horizontalLayout = QHBoxLayout() self.video_finder_frame = QFrame(self.video_finder_tab) self.video_finder_frame.setLayout(video_finder_tab_verticalLayout) video_finder_tab_verticalLayout.addStretch(1) video_finder_layout.addWidget(self.video_finder_frame) self.setting_tabWidget.addTab(self.video_finder_tab, "") # window buttons buttons_horizontalLayout = QHBoxLayout() buttons_horizontalLayout.addStretch(1) self.defaults_pushButton = QPushButton(self) buttons_horizontalLayout.addWidget(self.defaults_pushButton) self.cancel_pushButton = QPushButton(self) self.cancel_pushButton.setIcon(QIcon(icons + 'remove')) buttons_horizontalLayout.addWidget(self.cancel_pushButton) self.ok_pushButton = QPushButton(self) self.ok_pushButton.setIcon(QIcon(icons + 'ok')) buttons_horizontalLayout.addWidget(self.ok_pushButton) window_verticalLayout.addLayout(buttons_horizontalLayout) # set style_tab for default self.setting_tabWidget.setCurrentIndex(3) # labels and translations self.setWindowTitle(QCoreApplication.translate("setting_ui_tr", "Preferences")) self.tries_label.setToolTip( QCoreApplication.translate("setting_ui_tr", "<html><head/><body><p>Set number of tries if download failed.</p></body></html>")) self.tries_label.setText(QCoreApplication.translate("setting_ui_tr", "Number of tries: ")) self.tries_spinBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "<html><head/><body><p>Set number of tries if download failed.</p></body></html>")) self.wait_label.setToolTip( QCoreApplication.translate("setting_ui_tr", "<html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html>")) self.wait_label.setText(QCoreApplication.translate("setting_ui_tr", "Wait between retries (seconds): ")) self.wait_spinBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "<html><head/><body><p>Set the seconds to wait between retries. Download manager will retry downloads when the HTTP server returns a 503 response.</p></body></html>")) self.time_out_label.setToolTip( QCoreApplication.translate("setting_ui_tr", "<html><head/><body><p>Set timeout in seconds. </p></body></html>")) self.time_out_label.setText(QCoreApplication.translate("setting_ui_tr", "Timeout (seconds): ")) self.time_out_spinBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "<html><head/><body><p>Set timeout in seconds. </p></body></html>")) self.connections_label.setToolTip( QCoreApplication.translate("setting_ui_tr", "<html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html>")) self.connections_label.setText(QCoreApplication.translate("setting_ui_tr", "Number of connections: ")) self.connections_spinBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "<html><head/><body><p>Using multiple connections can help speed up your download.</p></body></html>")) self.rpc_port_label.setText(QCoreApplication.translate("setting_ui_tr", "RPC port number: ")) self.rpc_port_spinbox.setToolTip( QCoreApplication.translate("setting_ui_tr", "<html><head/><body><p> Specify a port number for JSON-RPC/XML-RPC server to listen to. Possible Values: 1024 - 65535 Default: 6801 </p></body></html>")) self.wait_queue_label.setText(QCoreApplication.translate("setting_ui_tr", 'Wait between every downloads in queue:')) self.aria2_path_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Change Aria2 default path')) self.aria2_path_pushButton.setText(QCoreApplication.translate("setting_ui_tr", 'Change')) aria2_path_tooltip =QCoreApplication.translate("setting_ui_tr", "<html><head/><body><p>Attention: Wrong path may have caused problem! Do it carefully or don't change default setting!</p></body></html>" ) self.aria2_path_checkBox.setToolTip(aria2_path_tooltip) self.aria2_path_lineEdit.setToolTip(aria2_path_tooltip) self.aria2_path_pushButton.setToolTip(aria2_path_tooltip) self.setting_tabWidget.setTabText(self.setting_tabWidget.indexOf( self.download_options_tab), QCoreApplication.translate("setting_ui_tr", "Download Options")) self.download_folder_label.setText(QCoreApplication.translate("setting_ui_tr", "Download Folder: ")) self.download_folder_pushButton.setText(QCoreApplication.translate("setting_ui_tr", "Change")) self.temp_download_label.setText(QCoreApplication.translate("setting_ui_tr", "Temporary Download Folder: ")) self.temp_download_pushButton.setText(QCoreApplication.translate("setting_ui_tr", "Change")) self.subfolder_checkBox.setText(QCoreApplication.translate("setting_ui_tr", "Create subfolders for Music,Videos,... in default download folder")) self.setting_tabWidget.setTabText( self.setting_tabWidget.indexOf(self.save_as_tab), QCoreApplication.translate("setting_ui_tr", "Save as")) self.enable_notifications_checkBox.setText( QCoreApplication.translate("setting_ui_tr", "Enable notification sounds")) self.volume_label.setText(QCoreApplication.translate("setting_ui_tr", "Volume: ")) self.setting_tabWidget.setTabText(self.setting_tabWidget.indexOf( self.notifications_tab), QCoreApplication.translate("setting_ui_tr", "Notifications")) self.style_label.setText(QCoreApplication.translate("setting_ui_tr", "Style: ")) self.color_label.setText(QCoreApplication.translate("setting_ui_tr", "Color scheme: ")) self.icon_label.setText(QCoreApplication.translate("setting_ui_tr", "Icons: ")) self.icons_size_label.setText(QCoreApplication.translate("setting_ui_tr", "Toolbar's icons size: ")) self.notification_label.setText(QCoreApplication.translate("setting_ui_tr", "Notification type: ")) self.font_checkBox.setText(QCoreApplication.translate("setting_ui_tr", "Font: ")) self.font_size_label.setText(QCoreApplication.translate("setting_ui_tr", "Size: ")) self.enable_system_tray_checkBox.setText(QCoreApplication.translate("setting_ui_tr", "Enable system tray icon.")) self.after_download_checkBox.setText( QCoreApplication.translate("setting_ui_tr", "Show download complete dialog when download has finished.")) self.show_menubar_checkbox.setText(QCoreApplication.translate("setting_ui_tr", "Show menubar.")) self.show_sidepanel_checkbox.setText(QCoreApplication.translate("setting_ui_tr", "Show side panel.")) self.show_progress_window_checkbox.setText( QCoreApplication.translate("setting_ui_tr", "Show download's progress window")) self.startup_checkbox.setText(QCoreApplication.translate("setting_ui_tr", "Run Persepolis at startup")) self.keep_awake_checkBox.setText(QCoreApplication.translate("setting_ui_tr", "Keep system awake!")) self.keep_awake_checkBox.setToolTip( QCoreApplication.translate("setting_ui_tr", "<html><head/><body><p>This option is preventing system from going to sleep.\ This is necessary if your power manager is suspending system automatically. </p></body></html>")) self.wait_queue_time.setToolTip( QCoreApplication.translate("setting_ui_tr", "<html><head/><body><p>Format HH:MM</p></body></html>")) self.setting_tabWidget.setTabText( self.setting_tabWidget.indexOf(self.style_tab), QCoreApplication.translate("setting_ui_tr", "Preferences")) # columns_tab self.show_column_label.setText(QCoreApplication.translate("setting_ui_tr", 'Show this columns:')) self.column0_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'File Name')) self.column1_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Status')) self.column2_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Size')) self.column3_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Downloaded')) self.column4_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Percentage')) self.column5_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Connections')) self.column6_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Transfer rate')) self.column7_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Estimated time left')) self.column10_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'First try date')) self.column11_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Last try date')) self.column12_checkBox.setText(QCoreApplication.translate("setting_ui_tr", 'Category')) self.setting_tabWidget.setTabText( self.setting_tabWidget.indexOf(self.columns_tab), QCoreApplication.translate("setting_ui_tr", "Columns customization")) # Video Finder options tab self.setting_tabWidget.setTabText(self.setting_tabWidget.indexOf( self.video_finder_tab), QCoreApplication.translate("setting_ui_tr", "Video Finder Options")) self.enable_video_finder_checkbox.setText(QCoreApplication.translate("setting_ui_tr", 'Enable Video Finder')) self.hide_no_audio_checkbox.setText(QCoreApplication.translate("setting_ui_tr", 'Hide videos with no audio')) self.hide_no_video_checkbox.setText(QCoreApplication.translate("setting_ui_tr", 'Hide audios with no video')) self.max_links_label.setText(QCoreApplication.translate("setting_ui_tr", 'Maximum number of links to capture:<br/>' '<small>(If browser sends multiple video links at a time)</small>')) # window buttons self.defaults_pushButton.setText(QCoreApplication.translate("setting_ui_tr", "Defaults")) self.cancel_pushButton.setText(QCoreApplication.translate("setting_ui_tr", "Cancel")) self.ok_pushButton.setText(QCoreApplication.translate("setting_ui_tr", "OK"))
class BRFManager(myqt.QFrameLayout): sig_brfperiod_changed = QSignal(list) def __init__(self, wldset=None, parent=None): super(BRFManager, self).__init__(parent) self.viewer = BRFViewer(wldset, parent) self.kgs_brf_installer = None self.__initGUI__() def __initGUI__(self): self.setContentsMargins(10, 10, 10, 10) # ---- Detrend and Correct Options self.baro_spinbox = myqt.QDoubleSpinBox(100, 0, show_buttons=True) self.baro_spinbox.setRange(0, 9999) self.baro_spinbox.setKeyboardTracking(True) self.earthtides_spinbox = myqt.QDoubleSpinBox( 100, 0, show_buttons=True) self.earthtides_spinbox.setRange(0, 9999) self.earthtides_spinbox.setKeyboardTracking(True) self.earthtides_cbox = QCheckBox('Nbr of ET lags :') self.earthtides_cbox.setChecked(True) self.earthtides_cbox.stateChanged.connect( lambda: self.earthtides_spinbox.setEnabled( self.earthtides_cbox.isChecked())) self.detrend_waterlevels_cbox = QCheckBox('Detrend water levels') self.detrend_waterlevels_cbox.setChecked(True) # Setup options layout. options_layout = QGridLayout() options_layout.addWidget(QLabel('Nbr of BP lags :'), 0, 0) options_layout.addWidget(self.baro_spinbox, 0, 2) options_layout.addWidget(self.earthtides_cbox, 1, 0) options_layout.addWidget(self.earthtides_spinbox, 1, 2) options_layout.addWidget(self.detrend_waterlevels_cbox, 2, 0, 1, 3) options_layout.setColumnStretch(1, 100) options_layout.setContentsMargins(0, 0, 0, 0) # ---- BRF date range self.date_start_edit = QDateTimeEdit() self.date_start_edit.setCalendarPopup(True) self.date_start_edit.setDisplayFormat('dd/MM/yyyy hh:mm') self.date_start_edit.dateChanged.connect( lambda: self.sig_brfperiod_changed.emit(self.get_brfperiod())) self.date_start_edit.dateChanged.connect( lambda: self.wldset.save_brfperiod(self.get_brfperiod())) self.date_end_edit = QDateTimeEdit() self.date_end_edit.setCalendarPopup(True) self.date_end_edit.setDisplayFormat('dd/MM/yyyy hh:mm') self.date_end_edit.dateChanged.connect( lambda: self.sig_brfperiod_changed.emit(self.get_brfperiod())) self.date_end_edit.dateChanged.connect( lambda: self.wldset.save_brfperiod(self.get_brfperiod())) self.btn_seldata = OnOffToolButton('select_range', size='small') self.btn_seldata.setToolTip("Select a BRF calculation period with " "the mouse cursor on the graph.") # Setup BRF date range layout. daterange_layout = QGridLayout() daterange_layout.addWidget(QLabel('BRF Start :'), 0, 0) daterange_layout.addWidget(self.date_start_edit, 0, 2) daterange_layout.addWidget(QLabel('BRF End :'), 1, 0) daterange_layout.addWidget(self.date_end_edit, 1, 2) daterange_layout.setColumnStretch(1, 100) daterange_layout.setContentsMargins(0, 0, 0, 0) seldata_layout = QGridLayout() seldata_layout.addWidget(self.btn_seldata, 0, 0) seldata_layout.setRowStretch(1, 100) seldata_layout.setContentsMargins(0, 0, 0, 0) # ---- Toolbar btn_comp = QPushButton('Compute BRF') btn_comp.clicked.connect(self.calc_brf) btn_comp.setFocusPolicy(Qt.NoFocus) self.btn_show = QToolButtonSmall(icons.get_icon('search')) self.btn_show.clicked.connect(self.viewer.show) # ---- Main Layout self.addLayout(daterange_layout, 0, 0) self.addLayout(seldata_layout, 0, 1) self.setRowMinimumHeight(1, 15) self.addLayout(options_layout, 2, 0) self.setRowMinimumHeight(3, 15) self.setRowStretch(3, 100) self.addWidget(btn_comp, 4, 0) self.addWidget(self.btn_show, 4, 1) self.setColumnStretch(0, 100) # ---- Install Panel if not KGSBRFInstaller().kgsbrf_is_installed(): self.__install_kgs_brf_installer() # ---- Properties @property def nlag_baro(self): """Return the number of lags to use for barometric correction.""" return self.baro_spinbox.value() @property def nlag_earthtides(self): """Return the number of lags to use for Earth tides correction.""" return (self.earthtides_spinbox.value() if self.earthtides_cbox.isChecked() else -1) @property def detrend_waterlevels(self): return self.detrend_waterlevels_cbox.isChecked() @property def correct_waterlevels(self): return True def get_brfperiod(self): """ Get the period over which the BRF would be evaluated as a list of two numerical Excel date values. """ year, month, day = self.date_start_edit.date().getDate() hour = self.date_start_edit.time().hour() minute = self.date_start_edit.time().minute() dstart = xldate_from_datetime_tuple( (year, month, day, hour, minute, 0), 0) year, month, day = self.date_end_edit.date().getDate() hour = self.date_end_edit.time().hour() minute = self.date_end_edit.time().minute() dend = xldate_from_datetime_tuple( (year, month, day, hour, minute, 0), 0) return [dstart, dend] def set_brfperiod(self, period): """ Set the value of the date_start_edit and date_end_edit widgets used to define the period over which the BRF is evaluated. Also save the period to the waterlevel dataset. """ period = np.sort(period).tolist() widgets = (self.date_start_edit, self.date_end_edit) for xldate, widget in zip(period, widgets): if xldate is not None: widget.blockSignals(True) widget.setDateTime(qdatetime_from_xldate(xldate)) widget.blockSignals(False) self.wldset.save_brfperiod(period) # ---- KGS BRF installer def __install_kgs_brf_installer(self): """ Installs a KGSBRFInstaller that overlays the whole brf tool layout until the KGS_BRF program is installed correctly. """ self.kgs_brf_installer = KGSBRFInstaller() self.kgs_brf_installer.sig_kgs_brf_installed.connect( self.__uninstall_kgs_brf_installer) self.addWidget(self.kgs_brf_installer, 0, 0, self.rowCount(), self.columnCount()) def __uninstall_kgs_brf_installer(self): """ Uninstall the KGSBRFInstaller after the KGS_BRF program has been installed properly. """ self.kgs_brf_installer.sig_kgs_brf_installed.disconnect() self.kgs_brf_installer = None def set_wldset(self, wldset): """Set the namespace for the wldset in the widget.""" self.wldset = wldset self.viewer.set_wldset(wldset) self.btn_seldata.setAutoRaise(True) self.setEnabled(wldset is not None) if wldset is not None: xldates = self.wldset.xldates self.set_daterange((xldates[0], xldates[-1])) # Set the period over which the BRF would be evaluated. saved_brfperiod = wldset.get_brfperiod() self.set_brfperiod((saved_brfperiod[0] or np.floor(xldates[0]), saved_brfperiod[1] or np.floor(xldates[-1]))) def set_daterange(self, daterange): """ Set the minimum and maximum value of date_start_edit and date_end_edit widgets from the specified list of Excel numeric dates. """ for widget in (self.date_start_edit, self.date_end_edit): widget.blockSignals(True) widget.setMinimumDateTime(qdatetime_from_xldate(daterange[0])) widget.setMaximumDateTime(qdatetime_from_xldate(daterange[1])) widget.blockSignals(False) def calc_brf(self): """Prepare the data, calcul the brf, and save and plot the results.""" # Prepare the datasets. well = self.wldset['Well'] brfperiod = self.get_brfperiod() t1 = min(brfperiod) i1 = np.where(self.wldset.xldates >= t1)[0][0] t2 = max(brfperiod) i2 = np.where(self.wldset.xldates <= t2)[0][-1] time = np.copy(self.wldset.xldates[i1:i2+1]) wl = np.copy(self.wldset['WL'][i1:i2+1]) bp = np.copy(self.wldset['BP'][i1:i2+1]) if len(bp) == 0: msg = ("The barometric response function cannot be computed" " because the currently selected water level dataset does" " not contain any barometric data for the selected period.") QMessageBox.warning(self, 'Warning', msg, QMessageBox.Ok) return et = np.copy(self.wldset['ET'][i1:i2+1]) if len(et) == 0: et = np.zeros(len(wl)) # Fill the gaps in the waterlevel data. dt = np.min(np.diff(time)) tc = np.arange(t1, t2+dt/2, dt) if len(tc) != len(time) or np.any(np.isnan(wl)): print('Filling gaps in data with linear interpolation.') indx = np.where(~np.isnan(wl))[0] wl = np.interp(tc, time[indx], wl[indx]) indx = np.where(~np.isnan(bp))[0] bp = np.interp(tc, time[indx], bp[indx]) indx = np.where(~np.isnan(et))[0] et = np.interp(tc, time[indx], et[indx]) time = tc QApplication.setOverrideCursor(Qt.WaitCursor) print('calculating the BRF') bm.produce_BRFInputtxt(well, time, wl, bp, et) msg = ("Not enough data. Try enlarging the selected period " "or reduce the number of BP lags.") if self.nlag_baro >= len(time) or self.nlag_earthtides >= len(time): QApplication.restoreOverrideCursor() QMessageBox.warning(self, 'Warning', msg, QMessageBox.Ok) return bm.produce_par_file( self.nlag_baro, self.nlag_earthtides, self.detrend_waterlevels, self.correct_waterlevels) bm.run_kgsbrf() try: dataf = bm.read_brf_output() date_start, date_end = (xldate_as_datetime(xldate, 0) for xldate in self.get_brfperiod()) self.wldset.save_brf(dataf, date_start, date_end, self.detrend_waterlevels) self.viewer.new_brf_added() self.viewer.show() QApplication.restoreOverrideCursor() except Exception: QApplication.restoreOverrideCursor() QMessageBox.warning(self, 'Warning', msg, QMessageBox.Ok) return
def __init__(self, persepolis_setting): super().__init__() self.persepolis_setting = persepolis_setting # get icons name icons = ':/' + \ str(self.persepolis_setting.value('settings/icons')) + '/' self.setMinimumSize(QtCore.QSize(520, 265)) self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/persepolis.svg'))) window_verticalLayout = QVBoxLayout() window_verticalLayout.setContentsMargins(-1, 10, -1, -1) self.link_frame = QFrame(self) self.link_frame.setFrameShape(QFrame.StyledPanel) self.link_frame.setFrameShadow(QFrame.Raised) horizontalLayout_2 = QHBoxLayout(self.link_frame) link_verticalLayout = QVBoxLayout() # link -> link_horizontalLayout = QHBoxLayout() self.link_label = QLabel(self.link_frame) link_horizontalLayout.addWidget(self.link_label) self.link_lineEdit = QLineEdit(self.link_frame) link_horizontalLayout.addWidget(self.link_lineEdit) link_verticalLayout.addLayout(link_horizontalLayout) horizontalLayout_2.addLayout(link_verticalLayout) window_verticalLayout.addWidget(self.link_frame) # add change_name field -> change_name_horizontalLayout = QHBoxLayout() self.change_name_checkBox = QCheckBox(self.link_frame) change_name_horizontalLayout.addWidget(self.change_name_checkBox) self.change_name_lineEdit = QLineEdit(self.link_frame) change_name_horizontalLayout.addWidget(self.change_name_lineEdit) link_verticalLayout.addLayout(change_name_horizontalLayout) # add_category -> queue_horizontalLayout = QHBoxLayout() self.queue_frame = QFrame(self) self.queue_frame.setFrameShape(QFrame.StyledPanel) self.queue_frame.setFrameShadow(QFrame.Raised) add_queue_horizontalLayout = QHBoxLayout(self.queue_frame) self.add_queue_label = QLabel(self.queue_frame) add_queue_horizontalLayout.addWidget(self.add_queue_label) self.add_queue_comboBox = QComboBox(self.queue_frame) add_queue_horizontalLayout.addWidget(self.add_queue_comboBox) queue_horizontalLayout.addWidget(self.queue_frame) queue_horizontalLayout.addStretch(1) self.size_label = QLabel(self) queue_horizontalLayout.addWidget(self.size_label) window_verticalLayout.addLayout(queue_horizontalLayout) # options_pushButton options_horizontalLayout = QHBoxLayout() self.options_pushButton = QPushButton(self) self.options_pushButton.setFlat(True) options_horizontalLayout.addWidget(self.options_pushButton) options_horizontalLayout.addStretch(1) window_verticalLayout.addLayout(options_horizontalLayout) # proxy -> proxy_verticalLayout = QVBoxLayout() proxy_horizontalLayout = QHBoxLayout() self.proxy_checkBox = QCheckBox(self) self.detect_proxy_pushButton = QPushButton(self) self.detect_proxy_label = QLabel(self) proxy_horizontalLayout.addWidget(self.proxy_checkBox) proxy_horizontalLayout.addWidget(self.detect_proxy_label) proxy_horizontalLayout.addWidget(self.detect_proxy_pushButton) proxy_verticalLayout.addLayout(proxy_horizontalLayout) self.proxy_frame = QFrame(self) self.proxy_frame.setFrameShape(QFrame.StyledPanel) self.proxy_frame.setFrameShadow(QFrame.Raised) gridLayout = QGridLayout(self.proxy_frame) self.ip_lineEdit = QLineEdit(self.proxy_frame) self.ip_lineEdit.setInputMethodHints(QtCore.Qt.ImhNone) gridLayout.addWidget(self.ip_lineEdit, 0, 1, 1, 1) self.proxy_pass_label = QLabel(self.proxy_frame) gridLayout.addWidget(self.proxy_pass_label, 2, 2, 1, 1) self.proxy_pass_lineEdit = QLineEdit(self.proxy_frame) self.proxy_pass_lineEdit.setEchoMode(QLineEdit.Password) gridLayout.addWidget(self.proxy_pass_lineEdit, 2, 3, 1, 1) self.ip_label = QLabel(self.proxy_frame) gridLayout.addWidget(self.ip_label, 0, 0, 1, 1) self.proxy_user_lineEdit = QLineEdit(self.proxy_frame) gridLayout.addWidget(self.proxy_user_lineEdit, 0, 3, 1, 1) self.proxy_user_label = QLabel(self.proxy_frame) gridLayout.addWidget(self.proxy_user_label, 0, 2, 1, 1) self.port_label = QLabel(self.proxy_frame) gridLayout.addWidget(self.port_label, 2, 0, 1, 1) self.port_spinBox = QSpinBox(self.proxy_frame) self.port_spinBox.setMaximum(65535) self.port_spinBox.setSingleStep(1) gridLayout.addWidget(self.port_spinBox, 2, 1, 1, 1) proxy_verticalLayout.addWidget(self.proxy_frame) window_verticalLayout.addLayout(proxy_verticalLayout) # download UserName & Password -> download_horizontalLayout = QHBoxLayout() download_horizontalLayout.setContentsMargins(-1, 10, -1, -1) download_verticalLayout = QVBoxLayout() self.download_checkBox = QCheckBox(self) download_verticalLayout.addWidget(self.download_checkBox) self.download_frame = QFrame(self) self.download_frame.setFrameShape(QFrame.StyledPanel) self.download_frame.setFrameShadow(QFrame.Raised) gridLayout_2 = QGridLayout(self.download_frame) self.download_user_lineEdit = QLineEdit(self.download_frame) gridLayout_2.addWidget(self.download_user_lineEdit, 0, 1, 1, 1) self.download_user_label = QLabel(self.download_frame) gridLayout_2.addWidget(self.download_user_label, 0, 0, 1, 1) self.download_pass_label = QLabel(self.download_frame) gridLayout_2.addWidget(self.download_pass_label, 1, 0, 1, 1) self.download_pass_lineEdit = QLineEdit(self.download_frame) self.download_pass_lineEdit.setEchoMode(QLineEdit.Password) gridLayout_2.addWidget(self.download_pass_lineEdit, 1, 1, 1, 1) download_verticalLayout.addWidget(self.download_frame) download_horizontalLayout.addLayout(download_verticalLayout) # select folder -> self.folder_frame = QFrame(self) self.folder_frame.setFrameShape(QFrame.StyledPanel) self.folder_frame.setFrameShadow(QFrame.Raised) gridLayout_3 = QGridLayout(self.folder_frame) self.download_folder_lineEdit = QLineEdit(self.folder_frame) gridLayout_3.addWidget(self.download_folder_lineEdit, 2, 0, 1, 1) self.folder_pushButton = QPushButton(self.folder_frame) gridLayout_3.addWidget(self.folder_pushButton, 3, 0, 1, 1) self.folder_pushButton.setIcon(QIcon(icons + 'folder')) self.folder_label = QLabel(self.folder_frame) self.folder_label.setAlignment(QtCore.Qt.AlignCenter) gridLayout_3.addWidget(self.folder_label, 1, 0, 1, 1) download_horizontalLayout.addWidget(self.folder_frame) window_verticalLayout.addLayout(download_horizontalLayout) # start time -> time_limit_horizontalLayout = QHBoxLayout() time_limit_horizontalLayout.setContentsMargins(-1, 10, -1, -1) start_verticalLayout = QVBoxLayout() self.start_checkBox = QCheckBox(self) start_verticalLayout.addWidget(self.start_checkBox) self.start_frame = QFrame(self) self.start_frame.setFrameShape(QFrame.StyledPanel) self.start_frame.setFrameShadow(QFrame.Raised) horizontalLayout_5 = QHBoxLayout(self.start_frame) self.start_time_qDataTimeEdit = QDateTimeEdit(self.start_frame) self.start_time_qDataTimeEdit.setDisplayFormat('H:mm') horizontalLayout_5.addWidget(self.start_time_qDataTimeEdit) start_verticalLayout.addWidget(self.start_frame) time_limit_horizontalLayout.addLayout(start_verticalLayout) # end time -> end_verticalLayout = QVBoxLayout() self.end_checkBox = QCheckBox(self) end_verticalLayout.addWidget(self.end_checkBox) self.end_frame = QFrame(self) self.end_frame.setFrameShape(QFrame.StyledPanel) self.end_frame.setFrameShadow(QFrame.Raised) horizontalLayout_6 = QHBoxLayout(self.end_frame) self.end_time_qDateTimeEdit = QDateTimeEdit(self.end_frame) self.end_time_qDateTimeEdit.setDisplayFormat('H:mm') horizontalLayout_6.addWidget(self.end_time_qDateTimeEdit) end_verticalLayout.addWidget(self.end_frame) time_limit_horizontalLayout.addLayout(end_verticalLayout) # limit Speed -> limit_verticalLayout = QVBoxLayout() self.limit_checkBox = QCheckBox(self) limit_verticalLayout.addWidget(self.limit_checkBox) self.limit_frame = QFrame(self) self.limit_frame.setFrameShape(QFrame.StyledPanel) self.limit_frame.setFrameShadow(QFrame.Raised) horizontalLayout_4 = QHBoxLayout(self.limit_frame) self.limit_spinBox = QDoubleSpinBox(self.limit_frame) self.limit_spinBox.setMinimum(1) self.limit_spinBox.setMaximum(1023) horizontalLayout_4.addWidget(self.limit_spinBox) self.limit_comboBox = QComboBox(self.limit_frame) self.limit_comboBox.addItem("") self.limit_comboBox.addItem("") horizontalLayout_4.addWidget(self.limit_comboBox) limit_verticalLayout.addWidget(self.limit_frame) time_limit_horizontalLayout.addLayout(limit_verticalLayout) window_verticalLayout.addLayout(time_limit_horizontalLayout) # number of connections -> connections_horizontalLayout = QHBoxLayout() connections_horizontalLayout.setContentsMargins(-1, 10, -1, -1) self.connections_frame = QFrame(self) self.connections_frame.setFrameShape(QFrame.StyledPanel) self.connections_frame.setFrameShadow(QFrame.Raised) horizontalLayout_3 = QHBoxLayout(self.connections_frame) self.connections_label = QLabel(self.connections_frame) horizontalLayout_3.addWidget(self.connections_label) self.connections_spinBox = QSpinBox(self.connections_frame) self.connections_spinBox.setMinimum(1) self.connections_spinBox.setMaximum(16) self.connections_spinBox.setProperty("value", 16) horizontalLayout_3.addWidget(self.connections_spinBox) connections_horizontalLayout.addWidget(self.connections_frame) connections_horizontalLayout.addStretch(1) window_verticalLayout.addLayout(connections_horizontalLayout) # ok cancel download_later buttons -> buttons_horizontalLayout = QHBoxLayout() buttons_horizontalLayout.addStretch(1) self.download_later_pushButton = QPushButton(self) self.download_later_pushButton.setIcon(QIcon(icons + 'stop')) self.cancel_pushButton = QPushButton(self) self.cancel_pushButton.setIcon(QIcon(icons + 'remove')) self.ok_pushButton = QPushButton(self) self.ok_pushButton.setIcon(QIcon(icons + 'ok')) buttons_horizontalLayout.addWidget(self.download_later_pushButton) buttons_horizontalLayout.addWidget(self.cancel_pushButton) buttons_horizontalLayout.addWidget(self.ok_pushButton) window_verticalLayout.addLayout(buttons_horizontalLayout) self.setLayout(window_verticalLayout) # labels -> self.setWindowTitle("Enter Your Link") self.link_label.setText("Download Link : ") self.add_queue_label.setText("Add to category : ") self.change_name_checkBox.setText("Change File Name : ") self.options_pushButton.setText("Show more options") self.detect_proxy_pushButton.setText("Detect system proxy setting") self.proxy_checkBox.setText("Proxy") self.proxy_pass_label.setText("Proxy PassWord : "******"IP : ") self.proxy_user_label.setText("Proxy UserName : "******"Port:") self.download_checkBox.setText("Download UserName and PassWord") self.download_user_label.setText("Download UserName : "******"Download PassWord : "******"Change Download Folder") self.folder_label.setText("Download Folder : ") self.start_checkBox.setText("Start Time") self.end_checkBox.setText("End Time") self.limit_checkBox.setText("Limit Speed") self.limit_comboBox.setItemText(0, "KB/S") self.limit_comboBox.setItemText(1, "MB/S") self.connections_label.setText("Number Of Connections :") self.cancel_pushButton.setText("Cancel") self.ok_pushButton.setText("OK") self.download_later_pushButton.setText("Download later")
def __init__(self, font, parent=None): super(GeneralTab, self).__init__(parent) mainLayout = QGridLayout(self) familyNameLabel = QLabel("Family name:", self) self.familyNameEdit = QLineEdit(font.info.familyName, self) styleNameLabel = QLabel("Style name:", self) self.styleNameEdit = QLineEdit(font.info.styleName, self) mainLayout.addWidget(familyNameLabel, 0, 0) mainLayout.addWidget(self.familyNameEdit, 0, 1, 1, 3) mainLayout.addWidget(styleNameLabel, 0, 4) mainLayout.addWidget(self.styleNameEdit, 0, 5) designerLabel = QLabel("Designer:", self) self.designerEdit = QLineEdit(font.info.openTypeNameDesigner, self) mainLayout.addWidget(designerLabel, 1, 0) mainLayout.addWidget(self.designerEdit, 1, 1, 1, 5) designerURLLabel = QLabel("Designer URL:", self) self.designerURLEdit = QLineEdit( font.info.openTypeNameDesignerURL, self) mainLayout.addWidget(designerURLLabel, 2, 0) mainLayout.addWidget(self.designerURLEdit, 2, 1, 1, 5) manufacturerLabel = QLabel("Manufacturer:", self) self.manufacturerEdit = QLineEdit( font.info.openTypeNameManufacturer, self) mainLayout.addWidget(manufacturerLabel, 3, 0) mainLayout.addWidget(self.manufacturerEdit, 3, 1, 1, 5) manufacturerURLLabel = QLabel("Manufacturer URL:", self) self.manufacturerURLEdit = QLineEdit( font.info.openTypeNameManufacturerURL, self) mainLayout.addWidget(manufacturerURLLabel, 4, 0) mainLayout.addWidget(self.manufacturerURLEdit, 4, 1, 1, 5) copyrightLabel = QLabel("Copyright:", self) self.copyrightEdit = QLineEdit(font.info.copyright, self) mainLayout.addWidget(copyrightLabel, 5, 0) mainLayout.addWidget(self.copyrightEdit, 5, 1, 1, 5) # TODO: give visual feedback of input data validity using QLineEdit # lose focus event # http://snorf.net/blog/2014/08/09/using-qvalidator-in-pyqt4-to-validate-user-input/ # noqa versionLabel = QLabel("Version:", self) if font.info.versionMajor is not None: versionMajor = str(font.info.versionMajor) else: versionMajor = '' self.versionMajorEdit = QLineEdit(versionMajor, self) self.versionMajorEdit.setAlignment(Qt.AlignRight) self.versionMajorEdit.setValidator(QIntValidator(self)) versionDotLabel = QLabel(".", self) if font.info.versionMinor is not None: versionMinor = str(font.info.versionMinor) else: versionMinor = '' self.versionMinorEdit = QLineEdit(versionMinor, self) validator = QIntValidator(self) validator.setBottom(0) self.versionMinorEdit.setValidator(validator) mainLayout.addWidget(versionLabel, 6, 0) mainLayout.addWidget(self.versionMajorEdit, 6, 1) mainLayout.addWidget(versionDotLabel, 6, 2) mainLayout.addWidget(self.versionMinorEdit, 6, 3) dateCreatedLabel = QLabel("Date created:", self) dateTime = QDateTime() # dateTime.fromString(font.info.openTypeHeadCreated, "yyyy/MM/dd # hh:mm:ss") # XXX: why does this not work? dateCreated = font.info.openTypeHeadCreated if dateCreated: parse = dateCreated.split(" ") if len(parse) == 2: date = parse[0].split("/") date = QDate(*(int(val) for val in date)) dateTime.setDate(date) time = parse[1].split(":") time = QTime(*(int(val) for val in time)) dateTime.setTime(time) else: cur = QDateTime.currentDateTime() dateTime.setDate(cur.date()) dateTime.setTime(cur.time()) self.dateCreatedEdit = QDateTimeEdit(dateTime, self) mainLayout.addWidget(dateCreatedLabel, 6, 4) mainLayout.addWidget(self.dateCreatedEdit, 6, 5) licenseLabel = QLabel("License:", self) self.licenseEdit = QLineEdit(font.info.openTypeNameLicense, self) mainLayout.addWidget(licenseLabel, 7, 0) mainLayout.addWidget(self.licenseEdit, 7, 1, 1, 5) licenseURLLabel = QLabel("License URL:", self) self.licenseURLEdit = QLineEdit(font.info.openTypeNameLicenseURL, self) mainLayout.addWidget(licenseURLLabel, 8, 0) mainLayout.addWidget(self.licenseURLEdit, 8, 1, 1, 5) trademarkLabel = QLabel("Trademark:", self) self.trademarkEdit = QLineEdit(font.info.trademark, self) mainLayout.addWidget(trademarkLabel, 9, 0) mainLayout.addWidget(self.trademarkEdit, 9, 1, 1, 5) self.setLayout(mainLayout)
def __initGUI__(self): self.setContentsMargins(10, 10, 10, 10) # ---- Detrend and Correct Options self.baro_spinbox = myqt.QDoubleSpinBox(100, 0, show_buttons=True) self.baro_spinbox.setRange(0, 9999) self.baro_spinbox.setKeyboardTracking(True) self.earthtides_spinbox = myqt.QDoubleSpinBox( 100, 0, show_buttons=True) self.earthtides_spinbox.setRange(0, 9999) self.earthtides_spinbox.setKeyboardTracking(True) self.earthtides_cbox = QCheckBox('Nbr of ET lags :') self.earthtides_cbox.setChecked(True) self.earthtides_cbox.stateChanged.connect( lambda: self.earthtides_spinbox.setEnabled( self.earthtides_cbox.isChecked())) self.detrend_waterlevels_cbox = QCheckBox('Detrend water levels') self.detrend_waterlevels_cbox.setChecked(True) # Setup options layout. options_layout = QGridLayout() options_layout.addWidget(QLabel('Nbr of BP lags :'), 0, 0) options_layout.addWidget(self.baro_spinbox, 0, 2) options_layout.addWidget(self.earthtides_cbox, 1, 0) options_layout.addWidget(self.earthtides_spinbox, 1, 2) options_layout.addWidget(self.detrend_waterlevels_cbox, 2, 0, 1, 3) options_layout.setColumnStretch(1, 100) options_layout.setContentsMargins(0, 0, 0, 0) # ---- BRF date range self.date_start_edit = QDateTimeEdit() self.date_start_edit.setCalendarPopup(True) self.date_start_edit.setDisplayFormat('dd/MM/yyyy hh:mm') self.date_start_edit.dateChanged.connect( lambda: self.sig_brfperiod_changed.emit(self.get_brfperiod())) self.date_start_edit.dateChanged.connect( lambda: self.wldset.save_brfperiod(self.get_brfperiod())) self.date_end_edit = QDateTimeEdit() self.date_end_edit.setCalendarPopup(True) self.date_end_edit.setDisplayFormat('dd/MM/yyyy hh:mm') self.date_end_edit.dateChanged.connect( lambda: self.sig_brfperiod_changed.emit(self.get_brfperiod())) self.date_end_edit.dateChanged.connect( lambda: self.wldset.save_brfperiod(self.get_brfperiod())) self.btn_seldata = OnOffToolButton('select_range', size='small') self.btn_seldata.setToolTip("Select a BRF calculation period with " "the mouse cursor on the graph.") # Setup BRF date range layout. daterange_layout = QGridLayout() daterange_layout.addWidget(QLabel('BRF Start :'), 0, 0) daterange_layout.addWidget(self.date_start_edit, 0, 2) daterange_layout.addWidget(QLabel('BRF End :'), 1, 0) daterange_layout.addWidget(self.date_end_edit, 1, 2) daterange_layout.setColumnStretch(1, 100) daterange_layout.setContentsMargins(0, 0, 0, 0) seldata_layout = QGridLayout() seldata_layout.addWidget(self.btn_seldata, 0, 0) seldata_layout.setRowStretch(1, 100) seldata_layout.setContentsMargins(0, 0, 0, 0) # ---- Toolbar btn_comp = QPushButton('Compute BRF') btn_comp.clicked.connect(self.calc_brf) btn_comp.setFocusPolicy(Qt.NoFocus) self.btn_show = QToolButtonSmall(icons.get_icon('search')) self.btn_show.clicked.connect(self.viewer.show) # ---- Main Layout self.addLayout(daterange_layout, 0, 0) self.addLayout(seldata_layout, 0, 1) self.setRowMinimumHeight(1, 15) self.addLayout(options_layout, 2, 0) self.setRowMinimumHeight(3, 15) self.setRowStretch(3, 100) self.addWidget(btn_comp, 4, 0) self.addWidget(self.btn_show, 4, 1) self.setColumnStretch(0, 100) # ---- Install Panel if not KGSBRFInstaller().kgsbrf_is_installed(): self.__install_kgs_brf_installer()
def __init__(self, persepolis_setting): super().__init__() # MainWindow self.persepolis_setting = persepolis_setting # add support for other languages locale = str(self.persepolis_setting.value('settings/locale')) QLocale.setDefault(QLocale(locale)) self.translator = QTranslator() if self.translator.load(':/translations/locales/ui_' + locale, 'ts'): QCoreApplication.installTranslator(self.translator) # set ui direction ui_direction = self.persepolis_setting.value('ui_direction') if ui_direction == 'rtl': self.setLayoutDirection(Qt.RightToLeft) elif ui_direction in 'ltr': self.setLayoutDirection(Qt.LeftToRight) icons = ':/' + \ str(self.persepolis_setting.value('settings/icons')) + '/' self.setWindowTitle(QCoreApplication.translate("mainwindow_ui_tr", "Persepolis Download Manager")) self.setWindowIcon(QIcon.fromTheme('persepolis', QIcon(':/persepolis.svg'))) self.centralwidget = QWidget(self) self.verticalLayout = QVBoxLayout(self.centralwidget) # enable drag and drop self.setAcceptDrops(True) # frame self.frame = QFrame(self.centralwidget) # download_table_horizontalLayout download_table_horizontalLayout = QHBoxLayout() tabels_splitter = QSplitter(Qt.Horizontal) # category_tree self.category_tree_qwidget = QWidget(self) category_tree_verticalLayout = QVBoxLayout() self.category_tree = CategoryTreeView(self) category_tree_verticalLayout.addWidget(self.category_tree) self.category_tree_model = QStandardItemModel() self.category_tree.setModel(self.category_tree_model) category_table_header = [QCoreApplication.translate("mainwindow_ui_tr", 'Category')] self.category_tree_model.setHorizontalHeaderLabels( category_table_header) self.category_tree.header().setStretchLastSection(True) self.category_tree.header().setDefaultAlignment(Qt.AlignCenter) # queue_panel self.queue_panel_widget = QWidget(self) queue_panel_verticalLayout_main = QVBoxLayout(self.queue_panel_widget) # queue_panel_show_button self.queue_panel_show_button = QPushButton(self) queue_panel_verticalLayout_main.addWidget(self.queue_panel_show_button) # queue_panel_widget_frame self.queue_panel_widget_frame = QFrame(self) self.queue_panel_widget_frame.setFrameShape(QFrame.StyledPanel) self.queue_panel_widget_frame.setFrameShadow(QFrame.Raised) queue_panel_verticalLayout_main.addWidget( self.queue_panel_widget_frame) queue_panel_verticalLayout = QVBoxLayout(self.queue_panel_widget_frame) queue_panel_verticalLayout_main.setContentsMargins(50, -1, 50, -1) # start_end_frame self.start_end_frame = QFrame(self) # start time start_verticalLayout = QVBoxLayout(self.start_end_frame) self.start_checkBox = QCheckBox(self) start_verticalLayout.addWidget(self.start_checkBox) self.start_frame = QFrame(self) self.start_frame.setFrameShape(QFrame.StyledPanel) self.start_frame.setFrameShadow(QFrame.Raised) start_frame_verticalLayout = QVBoxLayout(self.start_frame) self.start_time_qDataTimeEdit = QDateTimeEdit(self.start_frame) self.start_time_qDataTimeEdit.setDisplayFormat('H:mm') start_frame_verticalLayout.addWidget(self.start_time_qDataTimeEdit) start_verticalLayout.addWidget(self.start_frame) # end time self.end_checkBox = QCheckBox(self) start_verticalLayout.addWidget(self.end_checkBox) self.end_frame = QFrame(self) self.end_frame.setFrameShape(QFrame.StyledPanel) self.end_frame.setFrameShadow(QFrame.Raised) end_frame_verticalLayout = QVBoxLayout(self.end_frame) self.end_time_qDateTimeEdit = QDateTimeEdit(self.end_frame) self.end_time_qDateTimeEdit.setDisplayFormat('H:mm') end_frame_verticalLayout.addWidget(self.end_time_qDateTimeEdit) start_verticalLayout.addWidget(self.end_frame) self.reverse_checkBox = QCheckBox(self) start_verticalLayout.addWidget(self.reverse_checkBox) queue_panel_verticalLayout.addWidget(self.start_end_frame) # limit_after_frame self.limit_after_frame = QFrame(self) # limit_checkBox limit_verticalLayout = QVBoxLayout(self.limit_after_frame) self.limit_checkBox = QCheckBox(self) limit_verticalLayout.addWidget(self.limit_checkBox) # limit_frame self.limit_frame = QFrame(self) self.limit_frame.setFrameShape(QFrame.StyledPanel) self.limit_frame.setFrameShadow(QFrame.Raised) limit_verticalLayout.addWidget(self.limit_frame) limit_frame_verticalLayout = QVBoxLayout(self.limit_frame) # limit_spinBox limit_frame_horizontalLayout = QHBoxLayout() self.limit_spinBox = QDoubleSpinBox(self) self.limit_spinBox.setMinimum(1) self.limit_spinBox.setMaximum(1023) limit_frame_horizontalLayout.addWidget(self.limit_spinBox) # limit_comboBox self.limit_comboBox = QComboBox(self) self.limit_comboBox.addItem("") self.limit_comboBox.addItem("") limit_frame_horizontalLayout.addWidget(self.limit_comboBox) limit_frame_verticalLayout.addLayout(limit_frame_horizontalLayout) # limit_pushButton self.limit_pushButton = QPushButton(self) limit_frame_verticalLayout.addWidget(self.limit_pushButton) # after_checkBox self.after_checkBox = QtWidgets.QCheckBox(self) limit_verticalLayout.addWidget(self.after_checkBox) # after_frame self.after_frame = QtWidgets.QFrame(self) self.after_frame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.after_frame.setFrameShadow(QtWidgets.QFrame.Raised) limit_verticalLayout.addWidget(self.after_frame) after_frame_verticalLayout = QVBoxLayout(self.after_frame) # after_comboBox self.after_comboBox = QComboBox(self) self.after_comboBox.addItem("") after_frame_verticalLayout.addWidget(self.after_comboBox) # after_pushButton self.after_pushButton = QPushButton(self) after_frame_verticalLayout.addWidget(self.after_pushButton) queue_panel_verticalLayout.addWidget(self.limit_after_frame) category_tree_verticalLayout.addWidget(self.queue_panel_widget) # keep_awake_checkBox self.keep_awake_checkBox = QCheckBox(self) queue_panel_verticalLayout.addWidget(self.keep_awake_checkBox) self.category_tree_qwidget.setLayout(category_tree_verticalLayout) tabels_splitter.addWidget(self.category_tree_qwidget) # download table widget self.download_table_content_widget = QWidget(self) download_table_content_widget_verticalLayout = QVBoxLayout( self.download_table_content_widget) self.download_table = DownloadTableWidget(self) download_table_content_widget_verticalLayout.addWidget( self.download_table) tabels_splitter.addWidget(self.download_table_content_widget) self.download_table.setColumnCount(13) self.download_table.setSelectionBehavior(QAbstractItemView.SelectRows) self.download_table.setEditTriggers(QAbstractItemView.NoEditTriggers) self.download_table.verticalHeader().hide() # hide gid and download dictioanry section self.download_table.setColumnHidden(8, True) self.download_table.setColumnHidden(9, True) download_table_header = [QCoreApplication.translate("mainwindow_ui_tr", 'File Name'), QCoreApplication.translate("mainwindow_ui_tr",'Status'), QCoreApplication.translate("mainwindow_ui_tr", 'Size'), QCoreApplication.translate("mainwindow_ui_tr", 'Downloaded'), QCoreApplication.translate("mainwindow_ui_tr", 'Percentage'), QCoreApplication.translate("mainwindow_ui_tr", 'Connections'), QCoreApplication.translate("mainwindow_ui_tr", 'Transfer rate'), QCoreApplication.translate("mainwindow_ui_tr",'Estimated time left'), 'Gid', QCoreApplication.translate("mainwindow_ui_tr",'Link'), QCoreApplication.translate("mainwindow_ui_tr", 'First try date'), QCoreApplication.translate("mainwindow_ui_tr", 'Last try date'), QCoreApplication.translate("mainwindow_ui_tr",'Category')] self.download_table.setHorizontalHeaderLabels(download_table_header) # fixing the size of download_table when window is Maximized! self.download_table.horizontalHeader().setSectionResizeMode(0) self.download_table.horizontalHeader().setStretchLastSection(True) tabels_splitter.setStretchFactor(0, 3) # category_tree width tabels_splitter.setStretchFactor(1, 10) # ratio of tables's width download_table_horizontalLayout.addWidget(tabels_splitter) self.frame.setLayout(download_table_horizontalLayout) self.verticalLayout.addWidget(self.frame) self.setCentralWidget(self.centralwidget) # menubar self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 600, 24)) self.setMenuBar(self.menubar) fileMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", '&File')) editMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", '&Edit')) viewMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", '&View')) downloadMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", '&Download')) queueMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", '&Queue')) videoFinderMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", 'V&ideo Finder')) helpMenu = self.menubar.addMenu(QCoreApplication.translate("mainwindow_ui_tr", '&Help')) # viewMenu submenus sortMenu = viewMenu.addMenu(QCoreApplication.translate("mainwindow_ui_tr", 'Sort by')) # statusbar self.statusbar = QStatusBar(self) self.setStatusBar(self.statusbar) self.statusbar.showMessage(QCoreApplication.translate("mainwindow_ui_tr", "Persepolis Download Manager")) # toolBar self.toolBar2 = QToolBar(self) self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar2) self.toolBar2.setWindowTitle(QCoreApplication.translate("mainwindow_ui_tr", 'Menu')) self.toolBar2.setFloatable(False) self.toolBar2.setMovable(False) self.toolBar = QToolBar(self) self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) self.toolBar.setWindowTitle(QCoreApplication.translate("mainwindow_ui_tr", 'Toolbar')) self.toolBar.setFloatable(False) self.toolBar.setMovable(False) #toolBar and menubar and actions self.videoFinderAddLinkAction = QAction(QIcon(icons + 'video_finder'), QCoreApplication.translate("mainwindow_ui_tr", 'Find Video Links'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Download video or audio from Youtube, Vimeo, etc...'), triggered=self.showVideoFinderAddLinkWindow) QShortcut(QKeySequence('Ctrl+I'), self, self.showVideoFinderAddLinkWindow) videoFinderMenu.addAction(self.videoFinderAddLinkAction) self.stopAllAction = QAction(QIcon(icons + 'stop_all'), QCoreApplication.translate("mainwindow_ui_tr", 'Stop all active downloads'), self, statusTip='Stop all active downloads', triggered=self.stopAllDownloads) downloadMenu.addAction(self.stopAllAction) self.sort_file_name_Action = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'File name'), self, triggered=self.sortByName) sortMenu.addAction(self.sort_file_name_Action) self.sort_file_size_Action = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'File size'), self, triggered=self.sortBySize) sortMenu.addAction(self.sort_file_size_Action) self.sort_first_try_date_Action = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'First try date'), self, triggered=self.sortByFirstTry) sortMenu.addAction(self.sort_first_try_date_Action) self.sort_last_try_date_Action = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'Last try date'), self, triggered=self.sortByLastTry) sortMenu.addAction(self.sort_last_try_date_Action) self.sort_download_status_Action = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'Download status'), self, triggered=self.sortByStatus) sortMenu.addAction(self.sort_download_status_Action) self.trayAction = QAction(QCoreApplication.translate("mainwindow_ui_tr", 'Show system tray icon'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Show/Hide system tray icon"), triggered=self.showTray) self.trayAction.setCheckable(True) viewMenu.addAction(self.trayAction) self.showMenuBarAction = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'Show menubar'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Show menubar'), triggered=self.showMenuBar) self.showMenuBarAction.setCheckable(True) viewMenu.addAction(self.showMenuBarAction) self.showSidePanelAction = QAction( QCoreApplication.translate("mainwindow_ui_tr", 'Show side panel'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Show side panel'), triggered=self.showSidePanel) self.showSidePanelAction.setCheckable(True) viewMenu.addAction(self.showSidePanelAction) self.minimizeAction = QAction(QIcon(icons + 'minimize'), QCoreApplication.translate("mainwindow_ui_tr", 'Minimize to system tray'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Minimize to system tray"), triggered=self.minMaxTray) QShortcut(QKeySequence('Ctrl+W'), self, self.minMaxTray) viewMenu.addAction(self.minimizeAction) self.addlinkAction = QAction(QIcon(icons + 'add'), QCoreApplication.translate("mainwindow_ui_tr", 'Add New Download Link'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Add New Download Link"), triggered=self.addLinkButtonPressed) QShortcut(QKeySequence('Ctrl+N'), self, self.addLinkButtonPressed) fileMenu.addAction(self.addlinkAction) self.addtextfileAction = QAction(QIcon(icons + 'file'), QCoreApplication.translate("mainwindow_ui_tr", 'Import links from text file'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Create a Text file and put links in it.line by line!'), triggered=self.importText) fileMenu.addAction(self.addtextfileAction) self.resumeAction = QAction(QIcon(icons + 'play'), QCoreApplication.translate("mainwindow_ui_tr", 'Resume Download'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Resume Download"), triggered=self.resumeButtonPressed) QShortcut(QKeySequence('Ctrl+R'), self, self.resumeButtonPressed) downloadMenu.addAction(self.resumeAction) self.pauseAction = QAction(QIcon(icons + 'pause'), QCoreApplication.translate("mainwindow_ui_tr", 'Pause Download'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Pause Download"), triggered=self.pauseButtonPressed) QShortcut(QKeySequence('Ctrl+C'), self, self.pauseButtonPressed) downloadMenu.addAction(self.pauseAction) self.stopAction = QAction(QIcon(icons + 'stop'), QCoreApplication.translate("mainwindow_ui_tr", 'Stop Download'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Stop/Cancel Download"), triggered=self.stopButtonPressed) QShortcut(QKeySequence('Ctrl+S'), self, self.stopButtonPressed) downloadMenu.addAction(self.stopAction) self.propertiesAction = QAction(QIcon(icons + 'setting'), QCoreApplication.translate("mainwindow_ui_tr", 'Properties'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Properties"), triggered=self.propertiesButtonPressed) QShortcut(QKeySequence('Ctrl+P'), self, self.propertiesButtonPressed) downloadMenu.addAction(self.propertiesAction) self.progressAction = QAction(QIcon(icons + 'window'), QCoreApplication.translate("mainwindow_ui_tr", 'Progress'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Progress"), triggered=self.progressButtonPressed) QShortcut(QKeySequence('Ctrl+Z'), self, self.progressButtonPressed) downloadMenu.addAction(self.progressAction) self.openFileAction = QAction(QIcon( icons + 'file'), QCoreApplication.translate("mainwindow_ui_tr", 'Open file'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Open file'), triggered=self.openFile) fileMenu.addAction(self.openFileAction) self.openDownloadFolderAction = QAction(QIcon( icons + 'folder'), QCoreApplication.translate("mainwindow_ui_tr", 'Open download folder'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Open download folder'), triggered=self.openDownloadFolder) fileMenu.addAction(self.openDownloadFolderAction) self.openDefaultDownloadFolderAction = QAction(QIcon( icons + 'folder'), QCoreApplication.translate("mainwindow_ui_tr", 'Open default download folder'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Open default download folder'), triggered=self.openDefaultDownloadFolder) fileMenu.addAction(self.openDefaultDownloadFolderAction) self.exitAction = QAction(QIcon(icons + 'exit'), QCoreApplication.translate("mainwindow_ui_tr", 'Exit'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Exit"), triggered=self.closeEvent) QShortcut(QKeySequence('Ctrl+Q'), self, self.closeEvent) fileMenu.addAction(self.exitAction) self.clearAction = QAction(QIcon(icons + 'multi_remove'), QCoreApplication.translate("mainwindow_ui_tr", 'Clear download list'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Clear all items in download list'), triggered=self.clearDownloadList) editMenu.addAction(self.clearAction) self.removeSelectedAction = QAction(QIcon(icons + 'remove'), QCoreApplication.translate("mainwindow_ui_tr", 'Remove selected downloads from list'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Remove selected downloads form list'), triggered=self.removeSelected) editMenu.addAction(self.removeSelectedAction) self.removeSelectedAction.setEnabled(False) self.deleteSelectedAction = QAction(QIcon(icons + 'trash'), QCoreApplication.translate("mainwindow_ui_tr", 'Delete selected download files'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Delete selected download files'), triggered=self.deleteSelected) editMenu.addAction(self.deleteSelectedAction) self.deleteSelectedAction.setEnabled(False) self.createQueueAction = QAction(QIcon(icons + 'add_queue'), QCoreApplication.translate("mainwindow_ui_tr", 'Create new queue'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Create new download queue'), triggered=self.createQueue) queueMenu.addAction(self.createQueueAction) self.removeQueueAction = QAction(QIcon(icons + 'remove_queue'), QCoreApplication.translate("mainwindow_ui_tr", 'Remove this queue'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Remove this queue'), triggered=self.removeQueue) queueMenu.addAction(self.removeQueueAction) self.startQueueAction = QAction(QIcon( icons + 'start_queue'), QCoreApplication.translate("mainwindow_ui_tr", 'Start this queue'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Start this queue'), triggered=self.startQueue) queueMenu.addAction(self.startQueueAction) self.stopQueueAction = QAction(QIcon( icons + 'stop_queue'), QCoreApplication.translate("mainwindow_ui_tr", 'Stop this queue'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Stop this queue'), triggered=self.stopQueue) queueMenu.addAction(self.stopQueueAction) self.moveUpSelectedAction = QAction(QIcon(icons + 'multi_up'), QCoreApplication.translate("mainwindow_ui_tr", 'Move up selected items'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Move currently selected items up by one row'), triggered=self.moveUpSelected) queueMenu.addAction(self.moveUpSelectedAction) self.moveDownSelectedAction = QAction(QIcon(icons + 'multi_down'), QCoreApplication.translate("mainwindow_ui_tr", 'Move down selected items'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Move currently selected items down by one row'), triggered=self.moveDownSelected) queueMenu.addAction(self.moveDownSelectedAction) self.preferencesAction = QAction(QIcon(icons + 'preferences'), QCoreApplication.translate("mainwindow_ui_tr", 'Preferences'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Preferences'), triggered=self.openPreferences, menuRole=5) editMenu.addAction(self.preferencesAction) self.aboutAction = QAction(QIcon( icons + 'about'), QCoreApplication.translate("mainwindow_ui_tr", 'About'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'About'), triggered=self.openAbout, menuRole=4) helpMenu.addAction(self.aboutAction) self.issueAction = QAction(QIcon(icons + 'about'), QCoreApplication.translate("mainwindow_ui_tr", 'Report an issue'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Report an issue'), triggered=self.reportIssue) helpMenu.addAction(self.issueAction) self.updateAction = QAction(QIcon(icons + 'about'), QCoreApplication.translate("mainwindow_ui_tr", 'Check for newer version'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Check for newer release'), triggered=self.newUpdate) helpMenu.addAction(self.updateAction) self.logAction = QAction(QIcon(icons + 'about'), QCoreApplication.translate("mainwindow_ui_tr", 'Show log file'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Help'), triggered=self.showLog) helpMenu.addAction(self.logAction) self.helpAction = QAction(QIcon(icons + 'about'), QCoreApplication.translate("mainwindow_ui_tr", 'Help'), self, statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Help'), triggered=self.persepolisHelp) helpMenu.addAction(self.helpAction) self.qmenu = MenuWidget(self) self.toolBar2.addWidget(self.qmenu) # labels self.queue_panel_show_button.setText(QCoreApplication.translate("mainwindow_ui_tr", "Hide options")) self.start_checkBox.setText(QCoreApplication.translate("mainwindow_ui_tr", "Start Time")) self.end_checkBox.setText(QCoreApplication.translate("mainwindow_ui_tr", "End Time")) self.reverse_checkBox.setText(QCoreApplication.translate("mainwindow_ui_tr", "Download bottom of\n the list first")) self.limit_checkBox.setText(QCoreApplication.translate("mainwindow_ui_tr", "Limit Speed")) self.limit_comboBox.setItemText(0, "KiB/s") self.limit_comboBox.setItemText(1, "MiB/s") self.limit_pushButton.setText(QCoreApplication.translate("mainwindow_ui_tr", "Apply")) self.after_checkBox.setText(QCoreApplication.translate("mainwindow_ui_tr", "After download")) self.after_comboBox.setItemText(0, QCoreApplication.translate("mainwindow_ui_tr", "Shut Down")) self.keep_awake_checkBox.setText(QCoreApplication.translate("mainwindow_ui_tr", "Keep system awake!")) self.keep_awake_checkBox.setToolTip( QCoreApplication.translate("mainwindow_ui_tr", "<html><head/><body><p>This option is preventing system from going to sleep.\ This is necessary if your power manager is suspending system automatically. </p></body></html>")) self.after_pushButton.setText(QCoreApplication.translate("mainwindow_ui_tr", "Apply"))
class GeneralTab(TabWidget): def __init__(self, font, parent=None): super().__init__(parent, name="General") mainLayout = QGridLayout(self) familyNameLabel = QLabel("Family name:", self) styleNameLabel = QLabel("Style name:", self) designerLabel = QLabel("Designer:", self) designerURLLabel = QLabel("Designer URL:", self) manufacturerLabel = QLabel("Manufacturer:", self) manufacturerURLLabel = QLabel("Manufacturer URL:", self) copyrightLabel = QLabel("Copyright:", self) licenseLabel = QLabel("License:", self) licenseURLLabel = QLabel("License URL:", self) trademarkLabel = QLabel("Trademark:", self) # TODO: give visual feedback of input data validity using QLineEdit # lose focus event # http://snorf.net/blog/2014/08/09/using-qvalidator-in-pyqt4-to-validate-user-input/ # noqa versionLabel = QLabel("Version:", self) versionDotLabel = QLabel(".", self) self.loadString(font, "familyName", "familyName") self.loadString(font, "styleName", "styleName") self.loadString(font, "openTypeNameDesigner", "designer") self.loadString(font, "openTypeNameDesignerURL", "designerURL") self.loadString(font, "openTypeNameManufacturer", "manufacturer") self.loadString(font, "openTypeNameManufacturerURL", "manufacturerURL") self.loadMultilineString(font, "copyright", "copyright") self.loadMultilineString(font, "openTypeNameLicense", "license") self.loadString(font, "openTypeNameLicenseURL", "licenseURL") self.loadString(font, "trademark", "trademark") self.loadInteger(font, "versionMajor", "versionMajor") self.versionMajorEdit.setAlignment(Qt.AlignRight) self.loadPositiveInteger(font, "versionMinor", "versionMinor") mainLayout.addWidget(familyNameLabel, 0, 0) mainLayout.addWidget(self.familyNameEdit, 0, 1, 1, 3) mainLayout.addWidget(styleNameLabel, 0, 4) mainLayout.addWidget(self.styleNameEdit, 0, 5) mainLayout.addWidget(designerLabel, 1, 0) mainLayout.addWidget(self.designerEdit, 1, 1, 1, 5) mainLayout.addWidget(designerURLLabel, 2, 0) mainLayout.addWidget(self.designerURLEdit, 2, 1, 1, 5) mainLayout.addWidget(manufacturerLabel, 3, 0) mainLayout.addWidget(self.manufacturerEdit, 3, 1, 1, 5) mainLayout.addWidget(manufacturerURLLabel, 4, 0) mainLayout.addWidget(self.manufacturerURLEdit, 4, 1, 1, 5) mainLayout.addWidget(copyrightLabel, 5, 0) mainLayout.addWidget(self.copyrightEdit, 5, 1, 1, 5) mainLayout.addWidget(versionLabel, 6, 0) mainLayout.addWidget(self.versionMajorEdit, 6, 1) mainLayout.addWidget(versionDotLabel, 6, 2) mainLayout.addWidget(self.versionMinorEdit, 6, 3) dateCreatedLabel = QLabel("Date created:", self) dateTime = QDateTime() # dateTime.fromString(font.info.openTypeHeadCreated, "yyyy/MM/dd # hh:mm:ss") # XXX: why does this not work? dateCreated = font.info.openTypeHeadCreated if dateCreated: parse = dateCreated.split(" ") if len(parse) == 2: date = parse[0].split("/") date = QDate(*(int(val) for val in date)) dateTime.setDate(date) time = parse[1].split(":") time = QTime(*(int(val) for val in time)) dateTime.setTime(time) else: cur = QDateTime.currentDateTime() dateTime.setDate(cur.date()) dateTime.setTime(cur.time()) self.dateCreatedEdit = QDateTimeEdit(dateTime, self) mainLayout.addWidget(dateCreatedLabel, 6, 4) mainLayout.addWidget(self.dateCreatedEdit, 6, 5) mainLayout.addWidget(licenseLabel, 7, 0) mainLayout.addWidget(self.licenseEdit, 7, 1, 1, 5) mainLayout.addWidget(licenseURLLabel, 8, 0) mainLayout.addWidget(self.licenseURLEdit, 8, 1, 1, 5) mainLayout.addWidget(trademarkLabel, 9, 0) mainLayout.addWidget(self.trademarkEdit, 9, 1, 1, 5) self.setLayout(mainLayout) def writeValues(self, font): self.writeString(font, "familyName", "familyName") self.writeString(font, "styleName", "styleName") self.writeString(font, "trademark", "trademark") self.writeMultilineString(font, "copyright", "copyright") self.writeString(font, "designer", "openTypeNameDesigner") self.writeString(font, "designerURL", "openTypeNameDesignerURL") self.writeString(font, "manufacturer", "openTypeNameManufacturer") self.writeString( font, "manufacturerURL", "openTypeNameManufacturerURL") self.writeMultilineString(font, "license", "openTypeNameLicense") self.writeString(font, "licenseURL", "openTypeNameLicenseURL") self.writeInteger(font, "versionMajor", "versionMajor") self.writePositiveInteger(font, "versionMinor", "versionMinor") font.info.openTypeHeadCreated = \ self.dateCreatedEdit.dateTime().toString("yyyy/MM/dd hh:mm:ss")