def initUI(self): self.setWindowTitle("上传文件") self.setWindowIcon(QIcon("./icon/upload.ico")) self.logo = QLabel() self.logo.setPixmap(QPixmap("./icon/logo3.gif")) self.logo.setStyleSheet("background-color:rgb(0,153,255);") self.logo.setAlignment(Qt.AlignCenter) # btn 1 self.btn_chooseDir = QPushButton("选择文件夹", self) self.btn_chooseDir.setObjectName("btn_chooseDir") self.btn_chooseDir.setObjectName("btn_chooseDir") self.btn_chooseDir.setIcon(QIcon("./icon/folder.gif")) # btn 2 self.btn_chooseMutiFile = QPushButton("选择多文件", self) self.btn_chooseDir.setObjectName("btn_chooseMutiFile") self.btn_chooseMutiFile.setObjectName("btn_chooseMutiFile") self.btn_chooseMutiFile.setIcon(QIcon("./icon/file.ico")) # btn 3 self.btn_deleteSelect = QPushButton("删除", self) self.btn_deleteSelect.setObjectName("btn_deleteSelect") self.btn_deleteSelect.setIcon(QIcon("./icon/delete.ico")) # 列表 self.list_view = QListView(self) self.list_view.setViewMode(QListView.ListMode) self.slm = QStandardItem() self.model = QStandardItemModel() self.list_view.setModel(self.model) self.model.removeRows(0, self.model.rowCount()) # 清除旧的选择 self.list_view.setEditTriggers(QAbstractItemView.NoEditTriggers) self.list_view.setSelectionBehavior(QAbstractItemView.SelectRows) self.list_view.setSelectionMode(QAbstractItemView.ExtendedSelection) self.buttonBox = QDialogButtonBox() self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) grid = QGridLayout() grid.setSpacing(10) grid.addWidget(self.logo, 1, 0, 1, 3) grid.addWidget(self.btn_chooseDir, 2, 0) grid.addWidget(self.btn_chooseMutiFile, 2, 2) grid.addWidget(self.list_view, 3, 0, 2, 3) grid.addWidget(self.btn_deleteSelect, 5, 0) grid.addWidget(self.buttonBox, 5, 1, 1, 2) self.setLayout(grid) self.setMinimumWidth(350) # 设置信号 self.btn_chooseDir.clicked.connect(self.slot_btn_chooseDir) self.btn_chooseMutiFile.clicked.connect(self.slot_btn_chooseMutiFile) self.btn_deleteSelect.clicked.connect(self.slot_btn_deleteSelect) self.buttonBox.accepted.connect(self.slot_btn_ok) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.clear_old) self.buttonBox.rejected.connect(self.reject)
def findExamOnClick(self): model = QStandardItemModel(self.findExamList) for i in Exam.find_by_date(self.findExamInput.date().toString("dd.MM.yyyy")): item = QStandardItem(i.to_string()) model.appendRow(item) self.findExamList.setModel(model)
def findExaminerClick(self): model = QStandardItemModel(self.findExaminerList) for i in Examiner.findBySurname(self.findExaminerInput.text()): item = QStandardItem(i.to_string()) model.appendRow(item) self.findExaminerList.setModel(model)
def __init__(self, parent=None): # pylint: disable=too-many-statements super(WatchersPanel, self).__init__(parent=parent) self._app_window = parent if self._app_window.dwarf is None: print('Watcherpanel created before Dwarf exists') return self._uppercase_hex = True self.setAutoFillBackground(True) # connect to dwarf self._app_window.dwarf.onWatcherAdded.connect(self._on_watcher_added) self._app_window.dwarf.onWatcherRemoved.connect( self._on_watcher_removed) # setup our model self._watchers_model = QStandardItemModel(0, 5) self._watchers_model.setHeaderData(0, Qt.Horizontal, 'Address') self._watchers_model.setHeaderData(1, Qt.Horizontal, 'R') self._watchers_model.setHeaderData(1, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self._watchers_model.setHeaderData(2, Qt.Horizontal, 'W') self._watchers_model.setHeaderData(2, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self._watchers_model.setHeaderData(3, Qt.Horizontal, 'X') self._watchers_model.setHeaderData(3, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self._watchers_model.setHeaderData(4, Qt.Horizontal, 'S') self._watchers_model.setHeaderData(4, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) # setup ui v_box = QVBoxLayout(self) v_box.setContentsMargins(0, 0, 0, 0) self.list_view = DwarfListView() self.list_view.setModel(self._watchers_model) self.list_view.header().setSectionResizeMode(0, QHeaderView.Stretch) self.list_view.header().setSectionResizeMode( 1, QHeaderView.ResizeToContents | QHeaderView.Fixed) self.list_view.header().setSectionResizeMode( 2, QHeaderView.ResizeToContents | QHeaderView.Fixed) self.list_view.header().setSectionResizeMode( 3, QHeaderView.ResizeToContents | QHeaderView.Fixed) self.list_view.header().setSectionResizeMode( 4, QHeaderView.ResizeToContents | QHeaderView.Fixed) self.list_view.header().setStretchLastSection(False) self.list_view.doubleClicked.connect(self._on_item_dblclick) self.list_view.setContextMenuPolicy(Qt.CustomContextMenu) self.list_view.customContextMenuRequested.connect(self._on_contextmenu) v_box.addWidget(self.list_view) #header = QHeaderView(Qt.Horizontal, self) h_box = QHBoxLayout() h_box.setContentsMargins(5, 2, 5, 5) btn1 = QPushButton(QIcon(utils.resource_path('assets/icons/plus.svg')), '') btn1.setFixedSize(20, 20) btn1.clicked.connect(self._on_additem_clicked) btn2 = QPushButton(QIcon(utils.resource_path('assets/icons/dash.svg')), '') btn2.setFixedSize(20, 20) btn2.clicked.connect(self.delete_items) btn3 = QPushButton( QIcon(utils.resource_path('assets/icons/trashcan.svg')), '') btn3.setFixedSize(20, 20) btn3.clicked.connect(self.clear_list) h_box.addWidget(btn1) h_box.addWidget(btn2) h_box.addSpacerItem( QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Preferred)) h_box.addWidget(btn3) # header.setLayout(h_box) # header.setFixedHeight(25) # v_box.addWidget(header) v_box.addLayout(h_box) # create a centered dot icon _section_width = self.list_view.header().sectionSize(2) self._new_pixmap = QPixmap(_section_width, 20) self._new_pixmap.fill(Qt.transparent) painter = QPainter(self._new_pixmap) rect = QRect((_section_width * 0.5), 0, 20, 20) painter.setBrush(QColor('#666')) painter.setPen(QColor('#666')) painter.drawEllipse(rect) self._dot_icon = QIcon(self._new_pixmap) # shortcuts shortcut_add = QShortcut(QKeySequence(Qt.CTRL + Qt.Key_W), self._app_window, self._on_additem_clicked) shortcut_add.setAutoRepeat(False) self.setLayout(v_box)
def __init__(self): super(MyWindow, self).__init__() self.lz = [] self.ts = 0 self.zahlenListe = [] dir = os.path.dirname(sys.argv[0]) self.settingsfile = "%s/%s" % (dir, "Lotto.conf") self.zahlen = "%s/%s" % (dir, "zahlen.txt") print(self.settingsfile) self.settings = QSettings(self.settingsfile, QSettings.IniFormat) self.setStyleSheet(stylesheet(self)) self.lottolink = 'https://www.dielottozahlende.net/lotto-6-aus-49' self.mysuper = 5 self.model = QStandardItemModel(self) self.model.setRowCount(7) self.tableview = QTableView(self) self.tableview.setSortingEnabled(False) self.tableview.setGridStyle(1) if int(sys.version[0]) > 2: self.tableview.setFixedHeight(149) else: self.tableview.setFixedHeight(171) self.tableview.setSizeAdjustPolicy(QAbstractScrollArea.AdjustIgnored) self.tableview.horizontalHeader().setStretchLastSection(True) self.tableview.verticalHeader().setStretchLastSection(False) self.tableview.setCornerButtonEnabled(True) self.tableview.setShowGrid(True) self.tableview.setModel(self.model) self.tableview.hideRow(6) self.tableview.hideColumn(13) self.pushButtonLoad = QPushButton() self.pushButtonLoad.setText("Zahlen holen") self.pushButtonLoad.setIcon(QIcon.fromTheme("view-refresh")) self.pushButtonLoad.clicked.connect(self.getLotto) self.pushButtonLoad.setFixedWidth(110) self.pushButtonLoad.setFixedHeight(24) self.zahlenAction = QAction(QIcon.fromTheme("edit"), "Editor", self, triggered=self.edit_Tipps, shortcut="F5") self.addAction(self.zahlenAction) self.superAction = QAction(QIcon.fromTheme("edit"), "Superzahl", self, triggered=self.setMySuper, shortcut="F6") self.addAction(self.superAction) self.infoAction = QAction(QIcon.fromTheme("help-info"), "Information", self, triggered=self.showInfo, shortcut="F1") self.addAction(self.infoAction) self.lbl = QLabel() self.hbox = QHBoxLayout() self.hbox.addWidget(self.pushButtonLoad) grid = QVBoxLayout() grid.setSpacing(10) grid.addLayout(self.hbox) grid.addWidget(self.tableview) grid.addWidget(self.lbl) mywidget = QWidget() mywidget.setLayout(grid) self.setCentralWidget(mywidget) self.readSettings() self.tableview.resizeColumnsToContents() self.tableview.resizeRowsToContents() self.setHeaders() print("Wilkommen bei Lotto") self.statusBar().showMessage( "%s %s" % ("Willkommen bei LottoCheck", " *** F5 Lottozahlen ändern *** F6 Superzahl ändern"), 0)
def __init__(self): super().__init__() # Get the keys for the autocompletion. self.genreKeysList = [] self.characterKeysList = [] self.ratingKeysList = {} self.formatKeysList = [] self.otherKeysList = [] self.authorRoleList = [] for g in self.acbfGenreList.values(): self.genreKeysList.append(g) for r in self.acbfAuthorRolesList.values(): self.authorRoleList.append(r) mainP = Path(os.path.abspath(__file__)).parent self.get_auto_completion_keys(mainP) extraKeyP = Path(QDir.homePath()) / Application.readSetting( self.configGroup, "extraKeysLocation", str()) self.get_auto_completion_keys(extraKeyP) # Setup the dialog. self.setLayout(QVBoxLayout()) mainWidget = QTabWidget() self.layout().addWidget(mainWidget) self.setWindowTitle(i18n("Comic Metadata")) buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) self.layout().addWidget(buttons) buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) # Title, concept, summary, genre, characters, format, rating, language, series, other keywords metadataPage = QWidget() mformLayout = QFormLayout() metadataPage.setLayout(mformLayout) self.lnTitle = QLineEdit() self.lnTitle.setToolTip(i18n("The proper title of the comic.")) self.teSummary = QPlainTextEdit() self.teSummary.setToolTip( i18n("What will you tell others to entice them to read your comic?" )) self.lnGenre = QLineEdit() genreCompletion = multi_entry_completer() genreCompletion.setModel(QStringListModel(self.genreKeysList)) self.lnGenre.setCompleter(genreCompletion) genreCompletion.setCaseSensitivity(False) self.lnGenre.setToolTip( i18n( "The genre of the work. Prefilled values are from the ACBF, but you can fill in your own. Separate genres with commas. Try to limit the amount to about two or three." )) self.lnCharacters = QLineEdit() characterCompletion = multi_entry_completer() characterCompletion.setModel(QStringListModel(self.characterKeysList)) characterCompletion.setCaseSensitivity(False) characterCompletion.setFilterMode( Qt.MatchContains ) # So that if there is a list of names with last names, people can type in a last name. self.lnCharacters.setCompleter(characterCompletion) self.lnCharacters.setToolTip( i18n( "The names of the characters that this comic revolves around. Comma-separated." )) self.lnFormat = QLineEdit() formatCompletion = multi_entry_completer() formatCompletion.setModel(QStringListModel(self.formatKeysList)) formatCompletion.setCaseSensitivity(False) self.lnFormat.setCompleter(formatCompletion) ratingLayout = QHBoxLayout() self.cmbRatingSystem = QComboBox() self.cmbRatingSystem.addItems(self.ratingKeysList.keys()) self.cmbRatingSystem.setEditable(True) self.cmbRating = QComboBox() self.cmbRating.setEditable(True) self.cmbRatingSystem.currentIndexChanged.connect( self.slot_refill_ratings) ratingLayout.addWidget(self.cmbRatingSystem) ratingLayout.addWidget(self.cmbRating) self.lnSeriesName = QLineEdit() self.lnSeriesName.setToolTip( i18n( "If this is part of a series, enter the name of the series and the number." )) self.spnSeriesNumber = QSpinBox() self.spnSeriesNumber.setPrefix(i18n("No. ")) self.spnSeriesVol = QSpinBox() self.spnSeriesVol.setPrefix(i18n("Vol. ")) seriesLayout = QHBoxLayout() seriesLayout.addWidget(self.lnSeriesName) seriesLayout.addWidget(self.spnSeriesVol) seriesLayout.addWidget(self.spnSeriesNumber) otherCompletion = multi_entry_completer() otherCompletion.setModel(QStringListModel(self.otherKeysList)) otherCompletion.setCaseSensitivity(False) otherCompletion.setFilterMode(Qt.MatchContains) self.lnOtherKeywords = QLineEdit() self.lnOtherKeywords.setCompleter(otherCompletion) self.lnOtherKeywords.setToolTip( i18n( "Other keywords that do not fit in the previously mentioned sets. As always, comma-separated." )) self.cmbLanguage = language_combo_box() self.cmbCountry = country_combo_box() self.cmbLanguage.currentIndexChanged.connect( self.slot_update_countries) self.cmbReadingMode = QComboBox() self.cmbReadingMode.addItem(i18n("Left to Right")) self.cmbReadingMode.addItem(i18n("Right to Left")) self.cmbCoverPage = QComboBox() self.cmbCoverPage.setToolTip( i18n( "Which page is the cover page? This will be empty if there are no pages." )) mformLayout.addRow(i18n("Title:"), self.lnTitle) mformLayout.addRow(i18n("Cover page:"), self.cmbCoverPage) mformLayout.addRow(i18n("Summary:"), self.teSummary) mformLayout.addRow(i18n("Language:"), self.cmbLanguage) mformLayout.addRow("", self.cmbCountry) mformLayout.addRow(i18n("Reading direction:"), self.cmbReadingMode) mformLayout.addRow(i18n("Genre:"), self.lnGenre) mformLayout.addRow(i18n("Characters:"), self.lnCharacters) mformLayout.addRow(i18n("Format:"), self.lnFormat) mformLayout.addRow(i18n("Rating:"), ratingLayout) mformLayout.addRow(i18n("Series:"), seriesLayout) mformLayout.addRow(i18n("Other:"), self.lnOtherKeywords) mainWidget.addTab(metadataPage, i18n("Work")) # The page for the authors. authorPage = QWidget() authorPage.setLayout(QVBoxLayout()) explanation = QLabel( i18n( "The following is a table of the authors that contributed to this comic. You can set their nickname, proper names (first, middle, last), role (penciller, inker, etc), email and homepage." )) explanation.setWordWrap(True) self.authorModel = QStandardItemModel(0, 8) labels = [ i18n("Nick Name"), i18n("Given Name"), i18n("Middle Name"), i18n("Family Name"), i18n("Role"), i18n("Email"), i18n("Homepage"), i18n("Language") ] self.authorModel.setHorizontalHeaderLabels(labels) self.authorTable = QTableView() self.authorTable.setModel(self.authorModel) self.authorTable.verticalHeader().setDragEnabled(True) self.authorTable.verticalHeader().setDropIndicatorShown(True) self.authorTable.verticalHeader().setSectionsMovable(True) self.authorTable.verticalHeader().sectionMoved.connect( self.slot_reset_author_row_visual) delegate = author_delegate() delegate.setCompleterData(self.authorRoleList, 4) delegate.setLanguageData(len(labels) - 1) self.authorTable.setItemDelegate(delegate) author_button_layout = QWidget() author_button_layout.setLayout(QHBoxLayout()) btn_add_author = QPushButton(i18n("Add Author")) btn_add_author.clicked.connect(self.slot_add_author) btn_remove_author = QPushButton(i18n("Remove Author")) btn_remove_author.clicked.connect(self.slot_remove_author) author_button_layout.layout().addWidget(btn_add_author) author_button_layout.layout().addWidget(btn_remove_author) authorPage.layout().addWidget(explanation) authorPage.layout().addWidget(self.authorTable) authorPage.layout().addWidget(author_button_layout) mainWidget.addTab(authorPage, i18n("Authors")) # The page with publisher information. publisherPage = QWidget() publisherLayout = QFormLayout() publisherPage.setLayout(publisherLayout) self.publisherName = QLineEdit() self.publisherName.setToolTip( i18n( "The name of the company, group or person who is responsible for the final version the reader gets." )) publishDateLayout = QHBoxLayout() self.publishDate = QDateEdit() self.publishDate.setDisplayFormat(QLocale().system().dateFormat()) currentDate = QPushButton(i18n("Set Today")) currentDate.setToolTip( i18n("Sets the publish date to the current date.")) currentDate.clicked.connect(self.slot_set_date) publishDateLayout.addWidget(self.publishDate) publishDateLayout.addWidget(currentDate) self.publishCity = QLineEdit() self.publishCity.setToolTip( i18n( "Traditional publishers are always mentioned in source with the city they are located." )) self.isbn = QLineEdit() self.license = license_combo_box( ) # Maybe ought to make this a QLineEdit... self.license.setEditable(True) self.license.completer().setCompletionMode(QCompleter.PopupCompletion) dataBaseReference = QVBoxLayout() self.ln_database_name = QLineEdit() self.ln_database_name.setToolTip( i18n( "If there is an entry in a comics data base, that should be added here. It is unlikely to be a factor for comics from scratch, but useful when doing a conversion." )) self.cmb_entry_type = QComboBox() self.cmb_entry_type.addItems(["IssueID", "SeriesID", "URL"]) self.cmb_entry_type.setEditable(True) self.ln_database_entry = QLineEdit() dbHorizontal = QHBoxLayout() dbHorizontal.addWidget(self.ln_database_name) dbHorizontal.addWidget(self.cmb_entry_type) dataBaseReference.addLayout(dbHorizontal) dataBaseReference.addWidget(self.ln_database_entry) publisherLayout.addRow(i18n("Name:"), self.publisherName) publisherLayout.addRow(i18n("City:"), self.publishCity) publisherLayout.addRow(i18n("Date:"), publishDateLayout) publisherLayout.addRow(i18n("ISBN:"), self.isbn) publisherLayout.addRow(i18n("License:"), self.license) publisherLayout.addRow(i18n("Database:"), dataBaseReference) mainWidget.addTab(publisherPage, i18n("Publisher"))
def __init__(self): super().__init__() self.setWindowTitle(self.stringName) # Setup layout: base = QHBoxLayout() widget = QWidget() widget.setLayout(base) baseLayout = QSplitter() base.addWidget(baseLayout) self.setWidget(widget) buttonLayout = QVBoxLayout() buttonBox = QWidget() buttonBox.setLayout(buttonLayout) baseLayout.addWidget(buttonBox) # Comic page list and pages model self.comicPageList = QListView() self.comicPageList.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.comicPageList.setDragEnabled(True) self.comicPageList.setDragDropMode(QAbstractItemView.InternalMove) self.comicPageList.setDefaultDropAction(Qt.MoveAction) self.comicPageList.setAcceptDrops(True) self.comicPageList.setItemDelegate(comic_page_delegate()) self.pagesModel = QStandardItemModel() self.comicPageList.doubleClicked.connect(self.slot_open_page) self.comicPageList.setIconSize(QSize(128, 128)) # self.comicPageList.itemDelegate().closeEditor.connect(self.slot_write_description) self.pagesModel.layoutChanged.connect(self.slot_write_config) self.pagesModel.rowsInserted.connect(self.slot_write_config) self.pagesModel.rowsRemoved.connect(self.slot_write_config) self.pagesModel.rowsMoved.connect(self.slot_write_config) self.comicPageList.setModel(self.pagesModel) pageBox = QWidget() pageBox.setLayout(QVBoxLayout()) zoomSlider = QSlider(Qt.Horizontal, None) zoomSlider.setRange(1, 8) zoomSlider.setValue(4) zoomSlider.setTickInterval(1) zoomSlider.setMinimumWidth(10) zoomSlider.valueChanged.connect(self.slot_scale_thumbnails) self.projectName = Elided_Text_Label() pageBox.layout().addWidget(self.projectName) pageBox.layout().addWidget(zoomSlider) pageBox.layout().addWidget(self.comicPageList) baseLayout.addWidget(pageBox) self.btn_project = QToolButton() self.btn_project.setPopupMode(QToolButton.MenuButtonPopup) self.btn_project.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) menu_project = QMenu() self.action_new_project = QAction(i18n("New Project"), self) self.action_new_project.triggered.connect(self.slot_new_project) self.action_load_project = QAction(i18n("Open Project"), self) self.action_load_project.triggered.connect(self.slot_open_config) menu_project.addAction(self.action_new_project) menu_project.addAction(self.action_load_project) self.btn_project.setMenu(menu_project) self.btn_project.setDefaultAction(self.action_load_project) buttonLayout.addWidget(self.btn_project) # Settings dropdown with actions for the different settings menus. self.btn_settings = QToolButton() self.btn_settings.setPopupMode(QToolButton.MenuButtonPopup) self.btn_settings.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) self.action_edit_project_settings = QAction(i18n("Project Settings"), self) self.action_edit_project_settings.triggered.connect(self.slot_edit_project_settings) self.action_edit_meta_data = QAction(i18n("Meta Data"), self) self.action_edit_meta_data.triggered.connect(self.slot_edit_meta_data) self.action_edit_export_settings = QAction(i18n("Export Settings"), self) self.action_edit_export_settings.triggered.connect(self.slot_edit_export_settings) menu_settings = QMenu() menu_settings.addAction(self.action_edit_project_settings) menu_settings.addAction(self.action_edit_meta_data) menu_settings.addAction(self.action_edit_export_settings) self.btn_settings.setDefaultAction(self.action_edit_project_settings) self.btn_settings.setMenu(menu_settings) buttonLayout.addWidget(self.btn_settings) self.btn_settings.setDisabled(True) # Add page drop down with different page actions. self.btn_add_page = QToolButton() self.btn_add_page.setPopupMode(QToolButton.MenuButtonPopup) self.btn_add_page.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) self.action_add_page = QAction(i18n("Add Page"), self) self.action_add_page.triggered.connect(self.slot_add_new_page_single) self.action_add_template = QAction(i18n("Add Page from Template"), self) self.action_add_template.triggered.connect(self.slot_add_new_page_from_template) self.action_add_existing = QAction(i18n("Add Existing Pages"), self) self.action_add_existing.triggered.connect(self.slot_add_page_from_url) self.action_remove_selected_page = QAction(i18n("Remove Page"), self) self.action_remove_selected_page.triggered.connect(self.slot_remove_selected_page) self.action_resize_all_pages = QAction(i18n("Batch Resize"), self) self.action_resize_all_pages.triggered.connect(self.slot_batch_resize) self.btn_add_page.setDefaultAction(self.action_add_page) self.action_show_page_viewer = QAction(i18n("View Page In Window"), self) self.action_show_page_viewer.triggered.connect(self.slot_show_page_viewer) self.action_scrape_authors = QAction(i18n("Scrape Author Info"), self) self.action_scrape_authors.setToolTip(i18n("Search for author information in documents and add it to the author list. This does not check for duplicates.")) self.action_scrape_authors.triggered.connect(self.slot_scrape_author_list) self.action_scrape_translations = QAction(i18n("Scrape Text for Translation"), self) self.action_scrape_translations.triggered.connect(self.slot_scrape_translations) actionList = [] menu_page = QMenu() actionList.append(self.action_add_page) actionList.append(self.action_add_template) actionList.append(self.action_add_existing) actionList.append(self.action_remove_selected_page) actionList.append(self.action_resize_all_pages) actionList.append(self.action_show_page_viewer) actionList.append(self.action_scrape_authors) actionList.append(self.action_scrape_translations) menu_page.addActions(actionList) self.btn_add_page.setMenu(menu_page) buttonLayout.addWidget(self.btn_add_page) self.btn_add_page.setDisabled(True) self.comicPageList.setContextMenuPolicy(Qt.ActionsContextMenu) self.comicPageList.addActions(actionList) # Export button that... exports. self.btn_export = QPushButton(i18n("Export Comic")) self.btn_export.clicked.connect(self.slot_export) buttonLayout.addWidget(self.btn_export) self.btn_export.setDisabled(True) self.btn_project_url = QPushButton(i18n("Copy Location")) self.btn_project_url.setToolTip(i18n("Copies the path of the project to the clipboard. Useful for quickly copying to a file manager or the like.")) self.btn_project_url.clicked.connect(self.slot_copy_project_url) self.btn_project_url.setDisabled(True) buttonLayout.addWidget(self.btn_project_url) self.page_viewer_dialog = comics_project_page_viewer.comics_project_page_viewer() self.pagesWatcher = QFileSystemWatcher() self.pagesWatcher.fileChanged.connect(self.slot_start_delayed_check_page_update) buttonLayout.addItem(QSpacerItem(0, 0, QSizePolicy.Minimum, QSizePolicy.MinimumExpanding))
def __init__(self, window): super().__init__() self.setupUi(self) self.video = api.video() self.control = api.control() self._window = window self.recordedSegments = [] self.totalRecordedFrames = 0 self.videoState = None self.regionBeingSaved = None self.saveCancelled = False #Use get and set marked regions, they redraw. self.markedRegions = [ {'region id': 'aaaaaaaa', 'hue': 240, 'mark end': 19900, 'mark start': 13002, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 1'}, {'region id': 'aaaaaaab', 'hue': 300, 'mark end': 41797, 'mark start': 40597, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 2'}, {'region id': 'aaaaaaac', 'hue': 420, 'mark end': 43897, 'mark start': 41797, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 3'}, {'region id': 'aaaaaaad', 'hue': 180, 'mark end': 53599, 'mark start': 52699, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 4'}, {'region id': 'aaaaaaae', 'hue': 360, 'mark end': 52699, 'mark start': 51799, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 5'}, {'region id': 'aaaaaaaf', 'hue': 210, 'mark end': 80000, 'mark start': 35290, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 6'}, {'region id': 'aaaaaaag', 'hue': 390, 'mark end': 42587, 'mark start': 16716, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 7'}, {'region id': 'aaaaaaah', 'hue': 270, 'mark end': 25075, 'mark start': 17016, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 8'}, {'region id': 'aaaaaaai', 'hue': 330, 'mark end': 36617, 'mark start': 28259, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 9'}, {'region id': 'aaaaaaaj', 'hue': 240, 'mark end': 39005, 'mark start': 32637, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 10'}, {'region id': 'aaaaaaak', 'hue': 300, 'mark end': 39668, 'mark start': 36219, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 11'}, {'region id': 'aaaaaaal', 'hue': 420, 'mark end': 39068, 'mark start': 37868, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 12'}, {'region id': 'aaaaaaam', 'hue': 180, 'mark end': 13930, 'mark start': 0, 'saved': 0.0, 'highlight': 0, 'segment ids': ['ldPxTT5R', 'KxIjG09V'], 'region name': 'Clip 13'}, ] self.markedRegions = [ {'region id': 'aaaaaaaa', 'hue': 240, 'mark end': 199, 'mark start': 130, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 1'}, {'region id': 'aaaaaaab', 'hue': 300, 'mark end': 417, 'mark start': 105, 'saved': 0.0, 'highlight': 0, 'segment ids': ['KxIjG09V'], 'region name': 'Clip 2'}, ] self.markedRegions = [] self.markedStart = None #Note: Mark start/end are reversed if start is after end. self.markedEnd = None # Panel init. self.setFixedSize(window.app.primaryScreen().virtualSize()) self.setWindowFlags(QtCore.Qt.FramelessWindowHint) self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True) #Put the video here. self.videoArea = self.uiVideoArea.geometry() self.uiVideoArea.deleteLater() #Don't need this any more! self.uiBatteryReadout.anchorPoint = self.uiBatteryReadout.rect() self.uiBatteryReadout.formatString = self.uiBatteryReadout.text() self.uiBatteryReadout.clicked.connect(lambda: window.show('power')) self.updateBatteryTimer = QtCore.QTimer() self.updateBatteryTimer.timeout.connect(self.updateBattery) self.updateBatteryTimer.setInterval(2000) #ms self.labelUpdateIdleDelayTimer = QtCore.QTimer() #Used to skip calling the api alltogether when seeking. self.labelUpdateIdleDelayTimer.setInterval(32) self.labelUpdateIdleDelayTimer.setSingleShot(True) self.labelUpdateTimer = QtCore.QTimer() self.labelUpdateTimer.setInterval(32) #ms, cap at 60fps. (Technically this is just a penalty, we need to *race* the timer and the dbus call but we can't easily do that because we need something like .~*Promise.all()*~. for that and it's a bit of a pain in the neck to construct right now.) self.labelUpdateTimer.setSingleShot(True) #Start the timer again after the update. lastKnownFrame = -1 lastKnownFilesaveStatus = False iteration = 0 noLoopUpdateCounter = 0 #When < 0, don't update slider to avoid the following issue: 1) Slider is updated. 2) D-Bus message is sent. 3) Slider is updated several times more. 4) D-Bus message returns and updates slider. 5) Slider is updated from old position, producing a jerk or a jump. def checkLastKnownFrame(status=None): nonlocal iteration nonlocal lastKnownFrame nonlocal lastKnownFilesaveStatus nonlocal noLoopUpdateCounter if not self.isVisible(): #Stop updates if screen has been exited. return iteration += 1 noLoopUpdateCounter += 1 #log.debug(f'iteration {iteration} (f{lastKnownFrame}, {lastKnownFilesaveStatus})') #log.debug(f'loop {noLoopUpdateCounter}') if status and self.videoState in ('play', 'filesave'): if status['position'] != lastKnownFrame: lastKnownFrame = status['position'] self.uiCurrentFrame.setValue(lastKnownFrame) if noLoopUpdateCounter > 0: self.uiSeekSlider.blockSignals(True) self.uiSeekSlider.setValue(lastKnownFrame) self.uiSeekSlider.blockSignals(False) if status['filesave'] != lastKnownFilesaveStatus: lastKnownFilesaveStatus = status['filesave'] if not lastKnownFilesaveStatus: #Restore the seek rate display to the manual play rate. self.uiSeekRate.setValue(self.seekRate) if self.videoState == 'filesave': region = [r for r in self.markedRegions if r['region id'] == self.regionBeingSaved][:1] if region: #Protect against resets in the middle of saving. region = region[0] region['saved'] = max( #We seem to get a few frames where we're incorrectly positioned before ending. Disallow negative progress. region['saved'], (lastKnownFrame - region['mark start']) / (region['mark end'] - region['mark start']) ) #Set the seek rate counter back to what the camera operator set it to. if lastKnownFilesaveStatus: self.uiSeekRate.setValue(status['framerate']) #Loop after a short timeout, if the screen is still visible. if noLoopUpdateCounter > 0: self.labelUpdateTimer.start() else: self.labelUpdateIdleDelayTimer.start() self.labelUpdateIdleDelayTimer.timeout.connect(checkLastKnownFrame) self.labelUpdateTimer.timeout.connect(lambda: #Now, the timer is not running, so we can't just stop it to stop this process. We may be waiting on the dbus call instead. self.video.call('status').then(checkLastKnownFrame) ) self.uiCurrentFrame.suffixFormatString = self.uiCurrentFrame.suffix() self.uiCurrentFrame.valueChanged.connect(lambda f: self.uiCurrentFrame.hasFocus() and self.video.call('playback', {'position':f}) ) self.seekRate = 60 self.uiSeekRate.setValue(self.seekRate) self.uiSeekBackward.pressed.connect( lambda: self.video.call('playback', {'framerate': -self.seekRate})) self.uiSeekBackward.released.connect(lambda: self.video.call('playback', {'framerate': 0})) self.uiSeekForward.pressed.connect( lambda: self.video.call('playback', {'framerate': +self.seekRate})) self.uiSeekForward.released.connect( lambda: self.video.call('playback', {'framerate': 0})) self.uiSeekFaster.clicked.connect(self.seekFaster) self.uiSeekSlower.clicked.connect(self.seekSlower) self.uiMarkStart.clicked.connect(self.markStart) self.uiMarkEnd.clicked.connect(self.markEnd) self.uiSave.clicked.connect(self.onSaveClicked) self.uiSaveCancel.clicked.connect(self.cancelSave) self.uiSaveCancel.hide() self.uiSavedFileSettings.clicked.connect(lambda: window.show('file_settings')) self.uiDone.clicked.connect(window.back) self.uiSeekSliderBaseStyleSheet = self.uiSeekSlider.styleSheet() settings.observe('theme', 'dark', lambda name: self.uiSeekSlider.setStyleSheet( self.uiSeekSliderBaseStyleSheet + f""" /* ----- Play And Save Screen Styling ----- */ Slider::handle:horizontal {{ image: url(:/assets/images/{theme(name).slider.videoSeekHandle}); /* File name fields: width x height + horizontal padding. */ margin: -200px -40px; /* y: -slider groove margin. x: touch padding outsidet the groove. Clipped by Slider width. Should be enough for most customizations if we move stuff around. */ }} Slider::groove {{ border: none; background-color: none; }} """ ) ) #Heatmap got delayed. Don't report different size/touchMargins for heatmap styling. self.uiSeekSlider.sliderSize = lambda: QtCore.QSize(156, 61) #Line up focus ring. #self.uiSeekSlider.touchMargins = lambda: { "top": 10, "left": 10, "bottom": 10, "right": 10, } #Report real margins. #self.uiSeekSlider.focusGeometryNudge = (0,0,0,0) self.uiSeekSlider.touchMargins = lambda: { "top": 10, "left": 0, "bottom": 10, "right": 0, } #Report real margins. self.uiSeekSlider.debounce.sliderMoved.connect(lambda frame: self.video.callSync('playback', {'position': frame}) ) self.uiSeekSlider.debounce.sliderMoved.connect(lambda frame: self.uiCurrentFrame.setValue(frame) ) #last_perf = perf_counter() #def countPerfs(*_): # nonlocal last_perf # log.debug(f'update took {(perf_counter() - last_perf)*1000}ms') # last_perf = perf_counter() #self.uiSeekSlider.debounce.sliderMoved.connect(countPerfs) def updateNoLoopUpdateCounter(*_): nonlocal noLoopUpdateCounter noLoopUpdateCounter = -10 #Delay updating until the d-bus call has had a chance to return. self.uiSeekSlider.debounce.sliderMoved.connect(updateNoLoopUpdateCounter) self.motionHeatmap = QImage() #Updated by updateMotionHeatmap, used by self.paintMotionHeatmap. self.uiTimelineVisualization.paintEvent = self.paintMotionHeatmap self.uiTimelineVisualization.hide() #Heatmap got delayed. Hide for now, some logic still depends on it. #Set up for marked regions. self._tracks = [] #Used as cache for updateMarkedRegions / paintMarkedRegions. self.uiEditMarkedRegions.formatString = self.uiEditMarkedRegions.text() self.uiMarkedRegionVisualization.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents, True) self.uiMarkedRegionVisualization.paintEvent = self.paintMarkedRegions self.regionsListModel = QStandardItemModel(parent=self.uiMarkedRegions) self.uiMarkedRegions.setModel(self.regionsListModel) self.regionsListModel.rowsRemoved.connect(self.regionListElementDeleted) self.regionsListModel.dataChanged.connect(self.regionListElementChanged) self.updateMarkedRegions() self.markedRegionMenu = MenuToggle( menu = self.uiMarkedRegionsPanel, button = self.uiEditMarkedRegions, focusTarget = self.uiMarkedRegions, xRange = (-self.uiMarkedRegionsPanel.width(), -1), duration = 30, ) #delay(self, 1, self.markedRegionMenu.toggle) #mmm, just like a crappy javascript app - work around a mysterious black bar appearing on the right-hand side of the window. #This doesn't work, never fires. #self.uiMarkedRegionsPanel.focusInEvent = self.uiMarkedRegions.setFocus self.uiMarkedRegionsPanelHeader.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents) self.uiMarkedRegionsPanelHeaderX.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents) self.uiMarkedRegionPanelClose.clicked.connect(self.markedRegionMenu.forceHide) self.uiMarkedRegions.setItemDelegate(EditMarkedRegionsItemDelegate()) self.lastSelectedRegion = None self.uiMarkedRegions.clicked.connect(self.selectMarkedRegion) api.observe('videoState', self.onVideoStateChangeAlways) api.observe('state', self.onStateChangeAlways) api.signal.observe('sof', self.onSOF) api.signal.observe('eof', self.onEOF)
def __init__(self, cols: dict, parent=None, address_space: dict=None): super(AnalyzerView, self).__init__(parent) self.cols = cols self.address_space = address_space self.dataformat = {} self.entry = QLineEdit(self) self.entry.setClearButtonEnabled(True) self.entry.setPlaceholderText('Base Address or Register Name') completer = QCompleter() completer.setCaseSensitivity(Qt.CaseInsensitive) completer.setFilterMode(Qt.MatchContains) self.entry.setCompleter(completer) self.entry.setMinimumWidth(500) self.entry.setMinimumHeight(35) self.close_btn = QPushButton('X', self,) self.close_btn.setMaximumWidth(40) hbox1 = QHBoxLayout() hbox1.addWidget(self.entry) hbox1.addStretch(1) # hbox1.addWidget() ctrl_box = QHBoxLayout() self.show_detail = QCheckBox('Show Detail', self) self.show_reserved = QCheckBox('Show Reserved', self) self.add_col = QPushButton('Add Column', self,) self.add_col.setDisabled(True) ctrl_box.addWidget(self.show_detail) # ctrl_box.addWidget(detail_label) ctrl_box.addWidget(self.show_reserved) ctrl_box.addWidget(self.add_col) ctrl_box.addStretch(1) ctrl_box.addWidget(self.close_btn) self.string_model = QStringListModel() completer.setModel(self.string_model) self.string_model.setStringList(self.address_space.keys()) self.model = QStandardItemModel() self.table = TableView(self) self.table.setWordWrap(True) self.table.setModel(self.model) self.table.setHorizontalHeader(MetaHeaderView(Qt.Horizontal, parent=self.table)) vbox = QVBoxLayout() vbox.addLayout(hbox1) # vbox.addWidget(self.entry) vbox.addLayout(ctrl_box) vbox.addWidget(self.table) self.setLayout(vbox) # self.table.horizontalHeader().setHidden(True) self.table.verticalHeader().setHidden(True) self.table.setShowGrid(False) self.table.setSizeAdjustPolicy( QAbstractScrollArea.AdjustToContents ) # self.table.setMinimumHeight(600) self.reserved_row = [] self.add_col.clicked.connect(self.add_column) self.close_btn.clicked.connect(self.close) self.show_detail.stateChanged.connect(self.detail) self.show_reserved.stateChanged.connect(self.hide_reserved) self.entry.textChanged.connect(self.create_rows) # self.table.dataChangedSignal.connect(self.test) self.default_col = list(self.cols.keys()).index('Default') self.create_cols() self.detail()
def load_data_2_table(self, header_data, detail_data): try: if self.content_tab_wg.count() and self.content_tab_wg.widget( 0).__getattribute__("attr") == "tab": if self.tab_page.model(): self.tab_page.model().deleteLater() else: self.tab_page = QTableView() self.tab_page.clicked.connect(self.slot_jump_2_web_page) self.tab_page.__setattr__("attr", "tab") self.tab_page.setAlternatingRowColors(True) self.content_tab_wg.addTab(self.tab_page, "数据表页") col_num = 3 if [ x for x in list(detail_data.values()) if isinstance(x, str) ] else 2 row_num = len(detail_data) self.tab_page_model = QStandardItemModel(row_num, col_num) if col_num == 2: self.tab_page_model.setHorizontalHeaderLabels( [header_data, "项目"]) else: self.tab_page_model.setHorizontalHeaderLabels( [header_data, "项目", "查看详情"]) for col_idx in range(col_num): if col_idx == 0: # 第一列类别 for row_idx in range(row_num): self.tab_page_model.setItem( row_idx, col_idx, QStandardItem(list(detail_data.keys())[row_idx])) elif col_num == 2: # 无第三列,第二列显示子项 标题内容 col2_content = [ x for x in list(detail_data.values()) if isinstance(x, dict) and "标签" not in list( detail_data.keys()) and len(x) <= 10 ] if col2_content: for row_idx in range(row_num): self.tab_page_model.setItem( row_idx, col_idx, QStandardItem("、".join( map(self.strip_colon, col2_content[row_idx].keys())))) else: school_count_list = [] for x in detail_data.values(): if not x: school_count_list.append("") else: school_count_list.append(len(x)) for row_idx in range(row_num): self.tab_page_model.setItem( row_idx, col_idx, QStandardItem(str(school_count_list[row_idx]))) elif col_num == 3 and col_idx == 1: # 有第三列,第二列显示详情 for row_idx in range(row_num): school_content = list(detail_data.values())[row_idx] if isinstance(school_content, dict): school_content = "、".join(school_content.keys()) elif isinstance(school_content, list): school_content = "、".join(school_content) self.tab_page_model.setItem( row_idx, col_idx, QStandardItem(school_content)) elif col_num == 3 and col_idx == 2: # 有第三列,第三列跳转页面 for row_idx in range(row_num): school_content = list(detail_data.keys())[row_idx] if school_content not in ["专业列表", "标签", "优势专业"]: self.tab_page_model.setItem( row_idx, col_idx, QStandardItem("跳转")) self.tab_page.setModel(self.tab_page_model) self.tab_page.setEditTriggers(QTableView.NoEditTriggers) self.tab_page.horizontalHeader().setSectionResizeMode( QHeaderView.ResizeToContents) self.content_tab_wg.setCurrentIndex(0) except Exception as e: logger_current.error("更新数据表信息:%s, 异常:%s" % (header_data, e))
def getModel(self): self.m_model = QStandardItemModel(0, 1, self) m_completer = QCompleter(self.m_model, self) self.lineEdit.setCompleter(m_completer) m_completer.activated[str].connect(self.onUrlChoosed)
def __init__(self, parent=None): super(MyWindow, self).__init__(parent) #uic.loadUi('gui_template.ui',self) try: self.path_home = os.path.expanduser("~\\Desktop\\") except Exception: self.path_home = "" for curren_dir in ["interim_image"]: if os.path.exists(curren_dir): if os.path.isdir(curren_dir): print(curren_dir + " is here") else: try: os.mkdir(curren_dir) except OSError: print("Error generate dir " + curren_dir) else: try: os.mkdir(curren_dir) except OSError: print("Error generate dir " + curren_dir) # Load last path for files try: with open('last_path.json', "r") as f: path_dict = {i: j for i, j in json.load(f).items()} self.path_image = path_dict["path_image"] self.path_dir_images = path_dict["path_dir_images"] self.path_dir_dirs = path_dict["path_dir_dirs"] self.path_excel = path_dict["path_excel"] self.path_excels = path_dict["path_excels"] self.path_vez_excel = path_dict["path_vez_excel"] self.path_ro_excel = path_dict["path_ro_excel"] self.path_ro_word = path_dict["path_ro_word"] except Exception: self.path_image = self.path_home self.path_dir_images = self.path_home self.path_dir_dirs = self.path_home self.path_excel = self.path_home self.path_excels = self.path_home self.path_vez_excel = self.path_home self.path_ro_excel = self.path_home self.path_ro_word = self.path_home self.lv_c = 5 self.t_c = 0.5 self.imnam = "слои" desktop = QApplication.desktop() wd = desktop.width() hg = desktop.height() ww = 1000 wh = 500 if ww > wd: ww = int(0.7 * wd) if wh > hg: wh = int(0.7 * hg) x = (wd - ww) // 2 y = (hg - wh) // 2 self.setGeometry(x, y, ww, wh) topVBoxLayout = QVBoxLayout(self) topVBoxLayout.setContentsMargins(0, 0, 0, 0) SPFrame = QFrame() SPFrame.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) SPFrame.setMinimumSize(QSize(150, 100)) self.ImFrame = QFrame() self.ImFrame.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) #self.ImFrame.setMinimumSize(QSize(300, 100)) TbFrame = QFrame() TbFrame.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) TbFrame.setMinimumSize(QSize(0, 100)) RFrame = QFrame() RFrame.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) RFrame.setMinimumSize(QSize(0, 100)) self.listView = CustomList() #QListView() self.listView.clicked.connect(self.OpenPict) self.select_able = True self.listView.setcloseEditorSignal(self.Rename) #self.listView.editingFinished.connect(self.Rename) #self.listView.edit.connect(self.Rename) BoxLayout1 = QVBoxLayout() self.progress_bar = QProgressBar() self.progress_bar.setAlignment(Qt.AlignHCenter) BoxLayout1.addWidget(self.progress_bar) BoxLayout1.addWidget(self.listView) SPFrame.setLayout(BoxLayout1) self.Table = CustomTable() #QTableWidget() self.Table.setcloseEditorSignal( lambda: self.WriteTable(who_edited="table")) #self.Table.itemChanged(lambda:print("change2")) self.Table.cellClicked[int, int].connect(self.PosChangedCell) self.Table.setColumnCount(3) self.Table.setHorizontalHeaderLabels(["p", "h", "d"]) self.Table.setRowCount(30) self.Table.setColumnWidth(0, 50) self.Table.setColumnWidth(1, 50) self.Table.setColumnWidth(2, 50) self.Table.setItemDelegate(DownloadDelegate(self)) BoxLayout2 = QHBoxLayout() BoxLayout2.addWidget(self.Table) TbFrame.setLayout(BoxLayout2) self.pe1 = QLabel("Рэ1=") self.pe2 = QLabel("Рэ2=") self.pe = QLabel("Рэ=") lb1 = QLabel("Длинна вертикального") lb2 = QLabel("заземлителя lв, м") lb3 = QLabel("Глубина заложения") lb4 = QLabel("вертикального заземлителя t, м") lb5 = QLabel("Эквивалентное сопротивление") lb6 = QLabel("Двухслойная модель") lb7 = QLabel("Однослойная модель") lb8 = QLabel("Шаблон искомого изображения") lb9 = QLabel("Название проекта") lb10 = QLabel("Название ВЛ") self.vl = QDoubleSpinBox() self.vl.setValue(self.lv_c) self.vl.valueChanged.connect(self.WriteTable) self.t = QDoubleSpinBox() self.t.setValue(self.t_c) self.t.valueChanged.connect(self.WriteTable) self.pe1_le = QLineEdit() self.pe2_le = QLineEdit() self.pe_le = QLineEdit() self.ImageName = QLineEdit() self.ImageName.setText(self.imnam) self.NPrj = QLineEdit() self.NVL = QLineEdit() self.ImageName.editingFinished.connect(self.ReadImName) spacerItem = QSpacerItem(2, 20, QSizePolicy.Minimum, QSizePolicy.Expanding) BoxLayout3 = QVBoxLayout() BoxLayout4 = QHBoxLayout() BoxLayout5 = QHBoxLayout() BoxLayout6 = QHBoxLayout() BoxLayout3.addWidget(lb8) BoxLayout3.addWidget(self.ImageName) BoxLayout3.addWidget(lb9) BoxLayout3.addWidget(self.NPrj) BoxLayout3.addWidget(lb10) BoxLayout3.addWidget(self.NVL) BoxLayout3.addWidget(lb1) BoxLayout3.addWidget(lb2) BoxLayout3.addWidget(self.vl) BoxLayout3.addWidget(lb3) BoxLayout3.addWidget(lb4) BoxLayout3.addWidget(self.t) BoxLayout3.addWidget(lb5) BoxLayout3.addWidget(lb6) BoxLayout4.addWidget(self.pe1) BoxLayout4.addWidget(self.pe1_le) BoxLayout3.addLayout(BoxLayout4) BoxLayout5.addWidget(self.pe2) BoxLayout5.addWidget(self.pe2_le) BoxLayout3.addLayout(BoxLayout5) BoxLayout3.addWidget(lb7) BoxLayout6.addWidget(self.pe) BoxLayout6.addWidget(self.pe_le) BoxLayout3.addLayout(BoxLayout6) BoxLayout3.addItem(spacerItem) RFrame.setLayout(BoxLayout3) Splitter1 = QSplitter(Qt.Horizontal) Splitter1.addWidget(SPFrame) Splitter1.addWidget(self.ImFrame) Splitter1.addWidget(TbFrame) Splitter1.addWidget(RFrame) Splitter1.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) Splitter1.setStretchFactor(1, 4) Splitter1.setStretchFactor(1, 1) topVBoxLayout.addWidget(Splitter1) self.central_widget = QWidget() self.central_widget.setLayout(topVBoxLayout) self.setCentralWidget(self.central_widget) #self.resize() #self.central_widget.show() self.PaintForm = MyFrame(False, parent=self.ImFrame) self.statusBar() menubar = self.menuBar() exitAction = QAction('&Выход', self) #QIcon('exit.png'), exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Выход и программы') exitAction.triggered.connect(lambda: self.closeEvent(QCloseEvent())) Open0Action = QAction('&Открыть изображение', self) #QIcon('exit.png'), Open0Action.setShortcut('Ctrl+1') Open0Action.setStatusTip( 'Результаты ВЭЗ предоставлены одиночными изображениями') Open0Action.triggered.connect(self.Op0) Open1Action = QAction('&Открыть папку изображений', self) #QIcon('exit.png'), Open1Action.setShortcut('Ctrl+2') Open1Action.setStatusTip( 'Результаты ВЭЗ предоставлены одиночными изображениями') Open1Action.triggered.connect(lambda: self.Op12(0)) Open2Action = QAction('&Открыть папку каталогов', self) #QIcon('exit.png'), Open2Action.setShortcut('Ctrl+3') Open2Action.setStatusTip('Результаты ВЭЗ предоставлены набором файлов') Open2Action.triggered.connect(lambda: self.Op12(1)) Open3Action = QAction('&Открыть файл Ecxel', self) #QIcon('exit.png'), Open3Action.setShortcut('Ctrl+4') Open3Action.setStatusTip('Результаты ВЭЗ файле Ecxel') Open3Action.triggered.connect(self.Op3) Open4Action = QAction('&Открыть файлы Ecxel', self) #QIcon('exit.png'), Open4Action.setShortcut('Ctrl+5') Open4Action.setStatusTip('Результаты ВЭЗ в нескольких файлах Ecxel') Open4Action.triggered.connect(self.Op4) NewPick = QAction("Добавить точку", self) NewPick.setShortcut('Ctrl+A') NewPick.setStatusTip('Добавить новую точку') NewPick.triggered.connect(self.NewPick) DelPick = QAction("Удалить точку", self) DelPick.setShortcut('Ctrl+D') DelPick.setStatusTip('Удалить точку из списка') DelPick.triggered.connect(self.DelPick) ReRead = QAction("Прочитать изображение", self) ReRead.setShortcut('Ctrl+R') ReRead.setStatusTip('Принудительно считывает информацию с изображения') ReRead.triggered.connect(self.ReReadImage) Select = QAction("Выбрать все точки", self) Select.setShortcut('Ctrl+W') Select.setStatusTip('Выбираем все точки из списка') Select.triggered.connect(self.select) ClearTable = QAction("Очистить таблицу", self) ClearTable.setShortcut('Ctrl+Shift+D') ClearTable.setStatusTip('Очищает текущую таблицу') ClearTable.triggered.connect(self.ClearTable) SetLvCheck = QAction("Установить lв выбранным точкам", self) SetLvCheck.setShortcut('Ctrl+E') SetLvCheck.setStatusTip('Изменяет lв выбраных точек на текущее') SetLvCheck.triggered.connect(self.SetLvCheck) SetTCheck = QAction("Установить t выбранным точкам", self) SetTCheck.setShortcut('Ctrl+T') SetTCheck.setStatusTip('Изменяет t выбраных точек на текущее') SetTCheck.triggered.connect(self.SetTCheck) Save1VEZExcel = QAction("Сохранить ВЭЗ в Excel", self) Save1VEZExcel.setShortcut('Ctrl+6') Save1VEZExcel.setStatusTip('Сохраняет выбраные ВЭЗ в Excel файл') Save1VEZExcel.triggered.connect(lambda: self.Save1VEZExcel(1)) Save2VEZExcel = QAction("Сохранить Pэ в Excel", self) Save2VEZExcel.setShortcut('Ctrl+7') Save2VEZExcel.setStatusTip('Сохраняет выбраные Рэ в Excel файл') Save2VEZExcel.triggered.connect(lambda: self.Save1VEZExcel(2)) Save3VEZExcel = QAction("Сохранить Pэ в Word", self) Save3VEZExcel.setShortcut('Ctrl+8') Save3VEZExcel.setStatusTip('Сохраняет выбраные Рэ в Word файл') Save3VEZExcel.triggered.connect(lambda: self.Save1VEZExcel(3)) EditWord = QAction("Редактировать шаблон Word", self) EditWord.setShortcut('Ctrl+G') EditWord.setStatusTip('Запускает окно для редактирования шаблона Word') EditWord.triggered.connect(self.EditWord) zoomIn = QAction("Увеличить изображение", self) zoomIn.setShortcut('Ctrl++') zoomIn.setStatusTip('Увеличивает открытое изображение') zoomIn.triggered.connect(self.PaintForm.zoomIn) zoomOut = QAction("Уменьшить изображение", self) zoomOut.setShortcut('Ctrl+-') zoomOut.setStatusTip('Уменьшает открытое изображение') zoomOut.triggered.connect(self.PaintForm.zoomOut) Rotate1 = QAction("Повернуть изображение по ч.с", self) Rotate1.setShortcut('Ctrl+Shift++') Rotate1.setStatusTip('Поворачивает изображение по часовой стрелке') Rotate1.triggered.connect(lambda: self.PaintForm.Rotate(1)) Rotate2 = QAction("Повернуть изображение против ч.с", self) Rotate2.setShortcut('Ctrl+Shift+-') Rotate2.setStatusTip( 'Поворачивает изображение ппротив часовой стрелке') Rotate2.triggered.connect(lambda: self.PaintForm.Rotate(-1)) NormalSize = QAction("Вернуть исходный размер", self) NormalSize.setShortcut('Ctrl+F') NormalSize.setStatusTip('Вернуть исходный размер изображения') NormalSize.triggered.connect(self.PaintForm.normalSize) fileMenu = menubar.addMenu('&Файл') fileMenu.addAction(Open0Action) fileMenu.addAction(Open1Action) fileMenu.addAction(Open2Action) fileMenu.addAction(Open3Action) fileMenu.addAction(Open4Action) fileMenu.addAction(exitAction) editMenu = menubar.addMenu('&Правка') editMenu.addAction(NewPick) editMenu.addAction(DelPick) editMenu.addAction(ReRead) editMenu.addAction(Select) editMenu.addAction(SetLvCheck) editMenu.addAction(SetTCheck) editMenu.addAction(ClearTable) imageMenu = menubar.addMenu('&Изображение') imageMenu.addAction(zoomIn) imageMenu.addAction(zoomOut) imageMenu.addAction(Rotate1) imageMenu.addAction(Rotate2) imageMenu.addAction(NormalSize) reportMenu = menubar.addMenu('&Отчёт') reportMenu.addAction(Save1VEZExcel) reportMenu.addAction(Save2VEZExcel) reportMenu.addAction(Save3VEZExcel) reportMenu.addAction(EditWord) self.setWindowTitle('VEZRead') self.setWindowIcon(QIcon('images\\op1.png')) self.d = {} self.sp_m = [] self.file_path = [] self.file_name = [] self.arr = [] self.stst = [] self.arr_lv = [] self.arr_t = [] self.adres = None self.ski = QStandardItemModel() self.listView.setModel(self.ski) self.listView.pressed.connect(self.presseditem) self.sel = True self.block = True self.back_colors = ((255, 255, 255, 255), (255, 0, 0, 50), (255, 255, 0, 50), (0, 255, 0, 50)) self.pos_changed_cell = (0, 0)
def initLandmarkList(self): # initialize the landmarkTableModel (QTableView) landmark_model = QStandardItemModel(0, 0) landmark_model.setHorizontalHeaderItem(0, QStandardItem('')) landmark_model.setHorizontalHeaderItem(1, QStandardItem('Source x')) landmark_model.setHorizontalHeaderItem(2, QStandardItem('Source y')) landmark_model.setHorizontalHeaderItem(3, QStandardItem('Target x')) landmark_model.setHorizontalHeaderItem(4, QStandardItem('Target y')) landmark_model.setHorizontalHeaderItem(5, QStandardItem('Set')) landmark_model.setHorizontalHeaderItem(6, QStandardItem('Move')) landmark_model.setHorizontalHeaderItem(7, QStandardItem('Clear')) self.lTable.setModel(landmark_model) header = self.lTable.horizontalHeader() for i in range(8): if i not in [3,4]: # fixed width for target columns header.setSectionResizeMode( i, QHeaderView.ResizeToContents) self.lTable.setColumnWidth(3, 70) self.lTable.setColumnWidth(4, 70) self.lTable.verticalHeader().setSectionResizeMode( QHeaderView.ResizeToContents) landmark_model = self.lTable.model() for id,(key,source_target) \ in enumerate(self.gm.magc_landmarks.items()): # source_target is a dictionary for each landmark # that contains two keys # source: the landmark in source coordinates # target: the landmark in target coordinates # the target key does not exist until it is either # manually defined # or inferred when enough (2) other target landmarks # have been defined item0 = QStandardItem(str(key)) item1 = QStandardItem(str(source_target['source'][0])) item2 = QStandardItem(str(source_target['source'][1])) item5 = QPushButton('Set') item5.setFixedSize(QSize(50, 40)) item5.clicked.connect(self.set_landmark(id)) item6 = QPushButton('Go to') item6.setFixedSize(QSize(60, 40)) item6.clicked.connect(self.goto_landmark(id)) if self.cfg['sys']['simulation_mode'] == 'True': item5.setEnabled(False) item6.setEnabled(False) item7 = QPushButton('Clear') item7.setFixedSize(QSize(60, 40)) item7.clicked.connect(self.clear_landmark(id)) if 'target' in source_target: item0.setBackground(GREEN) item3 = QStandardItem(str(source_target['target'][0])) item3.setBackground(GREEN) item4 = QStandardItem(str(source_target['target'][1])) item4.setBackground(GREEN) else: item0.setBackground(GRAY) item3 = QStandardItem('') item3.setBackground(GRAY) item4 = QStandardItem('') item4.setBackground(GRAY) item6.setEnabled(False) item7.setEnabled(False) item3.setCheckable(False) item4.setCheckable(False) landmark_model.appendRow([item0, item1, item2, item3, item4]) self.lTable.setIndexWidget(landmark_model.index(id, 5), item5) self.lTable.setIndexWidget(landmark_model.index(id, 6), item6) self.lTable.setIndexWidget(landmark_model.index(id, 7), item7)
def __init__(self, parent=None): # pylint: disable=too-many-statements super(ModulesPanel, self).__init__(parent) self._app_window = parent if self._app_window.dwarf is None: print('ModulesPanel created before Dwarf exists') return self._app_window.dwarf.onSetModules.connect(self.set_modules) self._uppercase_hex = True # setup models self.modules_list = None self.modules_model = QStandardItemModel(0, 4, self) self.modules_model.setHeaderData(0, Qt.Horizontal, 'Name') self.modules_model.setHeaderData(1, Qt.Horizontal, 'Base') self.modules_model.setHeaderData(1, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self.modules_model.setHeaderData(2, Qt.Horizontal, 'Size') self.modules_model.setHeaderData(2, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self.modules_model.setHeaderData(3, Qt.Horizontal, 'Path') self.imports_list = None self.imports_model = QStandardItemModel(0, 4, self) self.imports_model.setHeaderData(0, Qt.Horizontal, 'Import') self.imports_model.setHeaderData(1, Qt.Horizontal, 'Address') self.imports_model.setHeaderData(1, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self.imports_model.setHeaderData(2, Qt.Horizontal, 'Module') self.imports_model.setHeaderData(2, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self.imports_model.setHeaderData(3, Qt.Horizontal, 'Type') self.exports_list = None self.exports_model = QStandardItemModel(0, 3, self) self.exports_model.setHeaderData(0, Qt.Horizontal, 'Export') self.exports_model.setHeaderData(1, Qt.Horizontal, 'Address') self.exports_model.setHeaderData(1, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self.exports_model.setHeaderData(2, Qt.Horizontal, 'Type') self.symbols_list = None self.symbols_model = QStandardItemModel(0, 3, self) self.symbols_model.setHeaderData(0, Qt.Horizontal, 'Export') self.symbols_model.setHeaderData(1, Qt.Horizontal, 'Address') self.symbols_model.setHeaderData(1, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self.symbols_model.setHeaderData(2, Qt.Horizontal, 'Type') # setup ui main_wrapper = QVBoxLayout() main_wrapper.setContentsMargins(0, 0, 0, 0) h_box = QHBoxLayout() self.modules_list = DwarfListView() self.modules_list.setContextMenuPolicy(Qt.CustomContextMenu) self.modules_list.customContextMenuRequested.connect( self._on_modules_contextmenu) self.modules_list.setEditTriggers(self.modules_list.NoEditTriggers) self.modules_list.clicked.connect(self._module_clicked) self.modules_list.doubleClicked.connect(self._module_dblclicked) self.modules_list.setModel(self.modules_model) self.modules_list.header().setSectionResizeMode( 0, QHeaderView.ResizeToContents) self.modules_list.header().setSectionResizeMode( 1, QHeaderView.ResizeToContents) self.modules_list.header().setSectionResizeMode( 2, QHeaderView.ResizeToContents) h_box.addWidget(self.modules_list) self.modules_list.selectionModel().selectionChanged.connect( self._module_clicked) hv_box = QVBoxLayout() self.imports_list = DwarfListView() self.imports_list.setContextMenuPolicy(Qt.CustomContextMenu) self.imports_list.customContextMenuRequested.connect( self._on_imports_contextmenu) self.imports_list.setEditTriggers(self.modules_list.NoEditTriggers) self.imports_list.doubleClicked.connect(self._import_dblclicked) self.imports_list.setModel(self.imports_model) self.imports_list.header().setSectionResizeMode( 0, QHeaderView.ResizeToContents) self.imports_list.header().setSectionResizeMode( 1, QHeaderView.ResizeToContents) self.imports_list.header().setSectionResizeMode( 2, QHeaderView.ResizeToContents) self.imports_list.setVisible(False) self.exports_list = DwarfListView() self.exports_list.setContextMenuPolicy(Qt.CustomContextMenu) self.exports_list.customContextMenuRequested.connect( self._on_exports_contextmenu) self.exports_list.setEditTriggers(self.modules_list.NoEditTriggers) self.exports_list.doubleClicked.connect(self._export_dblclicked) self.exports_list.setModel(self.exports_model) self.exports_list.header().setSectionResizeMode( 0, QHeaderView.ResizeToContents) self.exports_list.header().setSectionResizeMode( 1, QHeaderView.ResizeToContents) self.exports_list.header().setSectionResizeMode( 2, QHeaderView.ResizeToContents) self.exports_list.setVisible(False) self.symbols_list = DwarfListView() self.symbols_list.setContextMenuPolicy(Qt.CustomContextMenu) self.symbols_list.doubleClicked.connect(self._symbol_dblclicked) self.symbols_list.setModel(self.symbols_model) self.symbols_list.header().setSectionResizeMode( 0, QHeaderView.ResizeToContents) self.symbols_list.header().setSectionResizeMode( 1, QHeaderView.ResizeToContents) self.symbols_list.header().setSectionResizeMode( 2, QHeaderView.ResizeToContents) self.symbols_list.setVisible(False) hv_box.addWidget(self.imports_list) hv_box.addWidget(self.exports_list) hv_box.addWidget(self.symbols_list) h_box.addLayout(hv_box) main_wrapper.addLayout(h_box) self.setLayout(main_wrapper)
def createLabelModel(self): # LABEL, REQUIRED, NODEKEY model = QStandardItemModel(0, 1) model.setHeaderData(LABEL, Qt.Horizontal, "Label") return model
# -*- coding: utf-8 -*- # Ref: http://doc.qt.io/qt-5/modelview.html#2-1-a-read-only-table import sys from PyQt5.QtGui import QStandardItemModel, QStandardItem from PyQt5.QtWidgets import QApplication, QTreeView if __name__ == '__main__': app = QApplication(sys.argv) tree_view = QTreeView() ### model = QStandardItemModel(None) rootItem = model.invisibleRootItem() # Defining a couple of items americaItem = QStandardItem("America") canadaItem = QStandardItem("Canada") europeItem = QStandardItem("Europe") franceItem = QStandardItem("France") brittanyItem = QStandardItem("Brittany") # Building up the hierarchy rootItem.appendRow(americaItem) rootItem.appendRow(europeItem) americaItem.appendRow(canadaItem) europeItem.appendRow(franceItem)
def createMailModel(self,parent): model = QStandardItemModel(0, 3, parent) model.setHeaderData(self.FROM, Qt.Horizontal, "From") model.setHeaderData(self.SUBJECT, Qt.Horizontal, "Subject") model.setHeaderData(self.DATE, Qt.Horizontal, "Date") return model
def __init__(self, parent=None): super().__init__(parent) self.setupUi(self) self.setWindowTitle("{} - {}".format(__title__, __version__)) # Private members self._applicationDir = ROOT self._currentDir = self._applicationDir self._settingsFile = os.path.join(ROOT, "data", "settings.ini") self._recentFiles = [] self._recentFilesActions = [] self._proxiesModel = OrderedDict([ # (name, ColumnData(label, width)) ("ip", ColumnData("IP", 200)), ("port", ColumnData("Port", 100)), # ("user", ColumnData("Username", None)), # ("pass", ColumnData("Password", None)), ("country", ColumnData("Country", 150)), ("type", ColumnData("Type", 150)), ("anon", ColumnData("Level", 50)), ("ssl", ColumnData("SSL", 50)), ("speed", ColumnData("Speed", 100)), ("status", ColumnData("Status", None)), ]) self._proxiesModelColumns = list(self._proxiesModel.keys()) self._proxies = set() self._checkedProxiesCount = 0 self._liveProxiesCount = 0 self._transparentProxiesCount = 0 self._anonymousProxiesCount = 0 self._eliteProxiesCount = 0 self._progressTotal = 0 self._progressDone = 0 self._threadsCount = THREADS self._threads = [] self._workers = [] self._realIP = None self._requestTimeout = TIMEOUT self._requestsDelay = DELAY # UI self.quitAction.setShortcut(QKeySequence(Qt.CTRL + Qt.Key_Q)) # TODO: custom model for proxies self.proxiesModel = QStandardItemModel() self.proxiesModel.setHorizontalHeaderLabels( [col.label for _, col in self._proxiesModel.items()]) self.proxiesTable.setModel(self.proxiesModel) self.proxiesTable.setColumnWidth(0, 200) self.proxySourcesModel = QStandardItemModel(self) self.proxySourcesModel.setHorizontalHeaderLabels(["URL", "Status"]) for i, url in enumerate(PROXY_SOURCES): self.proxySourcesModel.appendRow([ QStandardItem(url), QStandardItem(""), ]) self.testButton.setVisible(False) self.realIPLabel = QtWidgets.QLabel( REAL_IP_LABEL.format("___.___.___.___")) self.proxiesCountLabel = QtWidgets.QLabel( PROXIES_COUNT_LABEL.format(len(self._proxies), self._checkedProxiesCount, self._liveProxiesCount)) self.transparentProxiesCountLabel = QtWidgets.QLabel( TRANSPARENT_PROXIES_COUNT_LABEL.format( self._transparentProxiesCount)) self.anonymousProxiesCountLabel = QtWidgets.QLabel( ANONYMOUS_PROXIES_COUNT_LABEL.format(self._anonymousProxiesCount)) self.eliteProxiesCountLabel = QtWidgets.QLabel( ELITE_PROXIES_COUNT_LABEL.format(self._eliteProxiesCount)) self.activeThreadsLabel = QtWidgets.QLabel( ACTIVE_THREADS_LABEL.format(MyThread.activeCount)) self.statusbar.addPermanentWidget(self.realIPLabel) self.statusbar.addPermanentWidget(self.proxiesCountLabel) self.statusbar.addPermanentWidget(self.transparentProxiesCountLabel) self.statusbar.addPermanentWidget(self.anonymousProxiesCountLabel) self.statusbar.addPermanentWidget(self.eliteProxiesCountLabel) self.statusbar.addPermanentWidget(self.activeThreadsLabel) # Connections ## File Menu self.importProxiesAction.triggered.connect(self.importProxies) # self.exportProxiesAction.triggered.connect(self.exportProxies) self.clearRecentFilesAction.triggered.connect(self.clearRecentFiles) self.quitAction.triggered.connect( lambda: QtWidgets.QApplication.quit()) ## Edit menu self.removeSelectedAction.triggered.connect(self.removeSelected) self.clearTableAction.triggered.connect(self.clearTable) self.optionsAction.triggered.connect(self.options) ## Help Menu self.aboutAction.triggered.connect(self.about) ## self.scrapeProxiesButton.clicked.connect(self.scrapeProxies) self.checkProxiesButton.clicked.connect(self.checkProxies) self.stopButton.clicked.connect(self.stop) self.testButton.clicked.connect(self.test) self.pulseTimer = QTimer(self) self.pulseTimer.timeout.connect(self.pulse) self.pulseTimer.start(1000) # Events self.proxiesTable.contextMenuEvent = self.onProxiesTableMenu self.showEvent = self.onShow self.resizeEvent = self.onResize self.closeEvent = self.onClose # Init self.centerWindow() self.loadSettings() self.initRecentFiles() self.statusbar.showMessage("Ready.") # Test if os.path.isfile("data/proxies.txt"): self.testButton.setVisible(True) proxies = self.loadProxiesFromFile("data/proxies.txt") if proxies: for proxy in proxies: self.appendModelRow(self.proxiesModel, ("ip", "port"), (proxy.ip, proxy.port))
nitems = 0 indexes = [] labels = [] positions = [] t0 = time.time() for i in range(-110, 110, 110): for j in range(-70, 70, 70): indexes.append(nitems) labels.append(str(nitems)) positions.append(QPointF(i, j)) nitems += 1 scene.addNodes(indexes, labels, positions) model = QStandardItemModel(4, 1) for row in range(4): item = QStandardItem("") item.setData(float(row), Qt.UserRole + 1) model.setItem(row, 0, item) def easing_function(value: float) -> int: return int(value * 10) scene.setNodesRadiiFromModel(model, 0, Qt.UserRole + 1) print(f"{time.time()-t0}s") print(f"{nitems} items")
def __init__(self, parent=None): super(WelcomeDialog, self).__init__(parent=parent) self._prefs = parent.prefs self._sub_titles = [ ['duck', 'dumb', 'doctor', 'dutch', 'dark', 'dirty'], ['warriors', 'wardrobes', 'waffles', 'wishes'], ['are', 'aren\'t', 'ain\'t', 'appears to be'], ['rich', 'real', 'riffle', 'retarded', 'rock'], [ 'as f**k', 'fancy', 'f****d', 'front-ended', 'falafel', 'french fries' ], ] self._recent_list_model = QStandardItemModel(0, 6) self._recent_list_model.setHeaderData(0, Qt.Horizontal, 'Path') self._recent_list_model.setHeaderData(1, Qt.Horizontal, 'Session') self._recent_list_model.setHeaderData(1, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self._recent_list_model.setHeaderData(2, Qt.Horizontal, 'Hooks') self._recent_list_model.setHeaderData(2, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self._recent_list_model.setHeaderData(3, Qt.Horizontal, 'Watchers') self._recent_list_model.setHeaderData(3, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self._recent_list_model.setHeaderData(4, Qt.Horizontal, 'OnLoads') self._recent_list_model.setHeaderData(4, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self._recent_list_model.setHeaderData(5, Qt.Horizontal, 'Bookmarks') self._recent_list_model.setHeaderData(5, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) #self._recent_list_model.setHeaderData(6, Qt.Horizontal, 'Custom script') #self._recent_list_model.setHeaderData(6, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self._recent_list = DwarfListView(self) self._recent_list.setModel(self._recent_list_model) self._recent_list.header().setSectionResizeMode( 0, QHeaderView.ResizeToContents | QHeaderView.Interactive) self._recent_list.header().setSectionResizeMode(1, QHeaderView.Stretch) self._recent_list.header().setSectionResizeMode(2, QHeaderView.Stretch) self._recent_list.header().setSectionResizeMode(3, QHeaderView.Stretch) self._recent_list.header().setSectionResizeMode(4, QHeaderView.Stretch) self._recent_list.header().setSectionResizeMode(5, QHeaderView.Stretch) #self._recent_list.header().setSectionResizeMode(6, QHeaderView.Stretch) self._recent_list.setContextMenuPolicy(Qt.CustomContextMenu) self._recent_list.customContextMenuRequested.connect( self._on_recent_sessions_context_menu) self._recent_list.doubleClicked.connect( self._on_recent_session_double_click) # setup size and remove/disable titlebuttons self.setFixedSize(860, 420) self.setSizeGripEnabled(False) self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) self.setWindowFlag(Qt.WindowContextHelpButtonHint, False) self.setWindowFlag(Qt.WindowCloseButtonHint, True) self.setModal(True) # setup ui elements self.setup_ui() self.update_commits_thread = DwarfCommitsThread(parent) self.update_commits_thread.on_update_available.connect( self._on_dwarf_isupdate) self.update_commits_thread.start() # center self.setGeometry( QStyle.alignedRect(Qt.LeftToRight, Qt.AlignCenter, self.size(), qApp.desktop().availableGeometry()))
def __init__(self, parent=None): super(QWidget, self).__init__(parent) self.headers = "id,motor_tag,potencia,fator_potencia,rotação,rendimento,n_ensaios,data,apagar".split(',') self.model = QStandardItemModel(100,8) self.model.setHorizontalHeaderLabels(self.headers) self.table = QTableView(self) self.table.setEditTriggers(QAbstractItemView.NoEditTriggers) self.label = ["motor_"+str(x) for x in range(10)] self.addTab = QIcon("C:/Users/ZZZZZZ/Desktop/projeto_dashboardApp/src/icons/tab_icon.png") self.clear = QPushButton('limpar') self.hbox = QHBoxLayout() for row, item in enumerate(self.label): tabletItem = QStandardItem(item) tabletItem.setTextAlignment(Qt.AlignHCenter) self.model.setItem(row,1,tabletItem) for row, item in enumerate(self.label): delete_row = QPushButton() delete_row.setStyleSheet("""background-color:qlineargradient(x1:0 y1:0, x2:1 y2:1, stop:0 #e4ede4, stop:1 #d1e3d1); border-radius:0px; border:0px; """) delete_row.setIcon(QIcon("C:/Users/ZZZZZZ/Desktop/projeto_dashboardApp/src/icons/delete_icon.png")) delete_row.setIconSize(QSize(20,20)) delete_row.clicked.connect(self.deleteRow) self.table.setIndexWidget(self.model.index(row,8), delete_row) show_tab = QPushButton(str(row)) show_tab.setIcon(self.addTab) show_tab.setStyleSheet("""background-color:qlineargradient(x1:0 y1:0, x2:1 y2:1, stop:0 #e4ede4, stop:1 #d1e3d1); border-radius:0px; border:0px; color:black; """) show_tab.setIconSize(QSize(20,20)) show_tab.clicked.connect(self.handleButtonClicked) self.table.setItemDelegateForColumn(0, ShowButton(self)) self.proxy = QSortFilterProxyModel() self.proxy.setSourceModel(self.model) self.table.setModel(self.proxy) self.search = QLineEdit() self.search.textChanged.connect(self.find_tag) self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) self.vbox = QVBoxLayout(self) self.hbox.addWidget(self.search) self.hbox.addWidget(self.clear) self.vbox.addLayout(self.hbox) self.vbox.addWidget(self.table) self.setLayout(self.vbox)
def createOutboundSocksSettingPanel(self): labelAddress = QLabel( self.translate("OutboundSocksPanel", "Server Address: "), self) self.lineEditOutboundSocksAddress = QLineEdit() labelPort = QLabel(self.translate("OutboundSocksPanel", "Port: "), self) self.spinBoxOutboundSocksPort = QSpinBox() labelUserName = QLabel(self.translate("OutboundSocksPanel", "User: "******"OutboundSocksPanel", "Password: "******"OutboundSocksPanel", "User Level: ")) self.spinBoxOutboundSocksuerLevel = QSpinBox() self.spinBoxOutboundSocksuerLevel.setRange(0, 65535) self.spinBoxOutboundSocksuerLevel.setValue(0) self.spinBoxOutboundSocksuerLevel.setDisabled(True) hboxuserLevel = QHBoxLayout() hboxuserLevel.addWidget(labelLevel) hboxuserLevel.addWidget(self.spinBoxOutboundSocksuerLevel) hboxuserLevel.addStretch() self.btnOutboundSocksClear = QPushButton( self.translate("OutboundSocksPanel", "Clear")) self.btnOutboundSocksChange = QPushButton( self.translate("OutboundSocksPanel", "Modify")) self.btnOutboundSocksAdd = QPushButton( self.translate("OutboundSocksPanel", "Add")) self.btnOutboundSocksDelete = QPushButton( self.translate("OutboundSocksPanel", "Delete")) self.spinBoxOutboundSocksPort.setRange(0, 65535) self.spinBoxOutboundSocksPort.setValue(1080) hboxAdress = QHBoxLayout() hboxAdress.addWidget(labelAddress) hboxAdress.addWidget(self.lineEditOutboundSocksAddress) hboxAdress.addWidget(labelPort) hboxAdress.addWidget(self.spinBoxOutboundSocksPort) hboxAdress.addStretch() hboxUser = QHBoxLayout() hboxUser.addWidget(labelUserName) hboxUser.addWidget(self.lineEditOutboundSocksUserName) hboxUser.addWidget(labelPassowrd) hboxUser.addWidget(self.lineEditOutboundSocksPassword) hboxUser.addStretch() vboxBtnUser = QVBoxLayout() vboxBtnUser.addStretch() vboxBtnUser.addWidget(self.btnOutboundSocksAdd) vboxBtnUser.addWidget(self.btnOutboundSocksClear) vboxBtnUser.addWidget(self.btnOutboundSocksChange) vboxBtnUser.addWidget(self.btnOutboundSocksDelete) self.treeViewoutSocksAddress = treeViewoutSocksAddress = QTreeView() treeViewoutSocksAddress.setSelectionMode( QAbstractItemView.SingleSelection) treeViewoutSocksAddress.setSelectionBehavior( QAbstractItemView.SelectRows) treeViewoutSocksAddress.setUniformRowHeights(True) treeViewoutSocksAddress.setEditTriggers( QAbstractItemView.NoEditTriggers) self.treeViewoutSocksAddressMode = QStandardItemModel() self.treeViewoutSocksAddressMode.setHorizontalHeaderLabels( self.labeloutSocks) self.treeViewoutSocksAddress.setModel(self.treeViewoutSocksAddressMode) hboxtreeView = QHBoxLayout() hboxtreeView.addWidget(self.treeViewoutSocksAddress) hboxtreeView.addLayout(vboxBtnUser) vboxOutboundSocks = QVBoxLayout() vboxOutboundSocks.addLayout(hboxAdress) vboxOutboundSocks.addLayout(hboxUser) vboxOutboundSocks.addLayout(hboxuserLevel) vboxOutboundSocks.addLayout(hboxtreeView) groupBoxOutboundSocksPanel = QGroupBox( self.translate("OutboundSocksPanel", "Socks"), self) groupBoxOutboundSocksPanel.setLayout(vboxOutboundSocks) if (v2rayshellDebug): self.__btnDebug = QPushButton("__DebugTest", self) vboxOutboundSocks.addWidget(self.__btnDebug) self.__btnDebug.clicked.connect(self.__DebugTest) self.settingOutboundSocksPanelFromJSONFile( self.outboundSocksJSONFile, True) self.createOutboundSocksPanelSignals() return groupBoxOutboundSocksPanel
def initWidgets(self): # layout layout = QVBoxLayout() layout.setSpacing(5) layout.setContentsMargins(10, 10, 10, 10) # layout.setSizeConstraint(QLayout.SetFixedSize) # file lblFile = QLabel("Export Samples To:") self.txtFile = QLineEdit() self.txtFile.setMinimumWidth(400) self.txtFile.setText(self.exportOptions["Filename"]) btnFile = QPushButton("...") btnFile.setMaximumWidth( btnFile.fontMetrics().boundingRect(" ... ").width()) btnFile.clicked.connect(self.browseForFile) boxFile = QGridLayout() boxFile.setContentsMargins(0, 0, 0, 0) boxFile.addWidget(lblFile, 0, 0, 1, 2) boxFile.addWidget(self.txtFile, 1, 0, 1, 1) boxFile.addWidget(btnFile, 1, 1, 1, 1) pnlFile = QWidget() pnlFile.setLayout(boxFile) layout.addWidget(pnlFile, 0, Qt.AlignTop) # sample features self.lstSampleFeatures = QListView() model = QStandardItemModel() # optional attributes for i in range(0, len(common.SampleFeatures)): item = QStandardItem(common.SampleFeatures[i][1]) item.setEditable(False) item.setCheckable(True) # date, time, space - are required if i < 3: item.setCheckState(Qt.Checked) item.setEnabled(False) # everything else is optional elif i in self.exportOptions["Features"]: item.setCheckState(Qt.Checked) model.appendRow(item) self.lstSampleFeatures.setModel(model) boxFeatures = QVBoxLayout() boxFeatures.addWidget(self.lstSampleFeatures) grpAttr = QGroupBox("Sample Features:", self) grpAttr.setLayout(boxFeatures) layout.addWidget(grpAttr, 1) # HDR self.chxHDR = QCheckBox() boxHDR = QHBoxLayout() boxHDR.addWidget(self.chxHDR) grpHDR = QGroupBox("HDR", self) grpHDR.setLayout(boxHDR) # source extension self.cbxSourceExt = QComboBox() self.cbxSourceExt.setSizeAdjustPolicy(QComboBox.AdjustToContents) self.cbxSourceExt.addItems([str(cm.name) for cm in common.SourceExt]) boxSource = QHBoxLayout() boxSource.addWidget(self.cbxSourceExt) grpSource = QGroupBox("Source:", self) grpSource.setLayout(boxSource) # color model self.cbxColorModel = QComboBox() self.cbxColorModel.setSizeAdjustPolicy(QComboBox.AdjustToContents) self.cbxColorModel.addItems([str(cm.name) for cm in common.ColorModel]) boxColor = QHBoxLayout() boxColor.addWidget(self.cbxColorModel) grpColor = QGroupBox("Color:", self) grpColor.setLayout(boxColor) # pixel region self.chxPixRegCalc = QCheckBox() self.chxPixRegCalc.stateChanged.connect(self.pixRegCalcChanged) lblPixRegCalc = QLabel("compute") self.cbxPixRegFixed = QComboBox() self.cbxPixRegFixed.setSizeAdjustPolicy(QComboBox.AdjustToContents) # self.cbxPixelRegion.currentIndexChanged.connect(self.pixelRegionEntered) self.cbxPixRegFixed.addItems([ str(x) for x in range(common.PixelRegionMin, common.PixelRegionMax + 1, 2) ]) lblPixRegFixed = QLabel("fixed") boxPixelRegion = QHBoxLayout() boxPixelRegion.addWidget(self.chxPixRegCalc) boxPixelRegion.addWidget(lblPixRegCalc) boxPixelRegion.addWidget(self.cbxPixRegFixed) boxPixelRegion.addWidget(lblPixRegFixed) grpPixelRegion = QGroupBox("Pixel Region:", self) grpPixelRegion.setLayout(boxPixelRegion) # pixel weighting self.cbxPixelWeighting = QComboBox() self.cbxPixelWeighting.setSizeAdjustPolicy(QComboBox.AdjustToContents) self.cbxPixelWeighting.addItems( [str(pw.name) for pw in common.PixelWeighting]) boxPixelWeighting = QHBoxLayout() boxPixelWeighting.addWidget(self.cbxPixelWeighting) grpPixelWeighting = QGroupBox("Pixel Weighting:", self) grpPixelWeighting.setLayout(boxPixelWeighting) # add all pixel options to window boxPixelOptions = QHBoxLayout() boxPixelOptions.addWidget(grpHDR, 0, Qt.AlignLeft) boxPixelOptions.addWidget(grpSource, 0, Qt.AlignLeft) boxPixelOptions.addWidget(grpColor, 0, Qt.AlignLeft) boxPixelOptions.addWidget(grpPixelRegion, 0, Qt.AlignLeft) boxPixelOptions.addWidget(grpPixelWeighting, 1) boxPixelOptions.setContentsMargins(0, 0, 0, 0) pnlPixelOptions = QWidget() pnlPixelOptions.setLayout(boxPixelOptions) layout.addWidget(pnlPixelOptions, 0, Qt.AlignTop) # coordinate system self.cbxCoords = QComboBox() self.cbxCoords.setSizeAdjustPolicy(QComboBox.AdjustToContents) self.cbxCoords.addItems([str(c.name) for c in common.CoordSystem]) boxCoords = QHBoxLayout() boxCoords.addWidget(self.cbxCoords) grpCoords = QGroupBox("Coordinates:", self) grpCoords.setLayout(boxCoords) # spectrum range self.txtRangeStart = QLineEdit() self.txtRangeStart.setFixedWidth( self.txtRangeStart.fontMetrics().width('0') * 8) self.txtRangeStart.setValidator( QIntValidator(common.SpectrumRange[0], common.SpectrumRange[1])) self.txtRangeStart.setEnabled(False) self.txtRangeEnd = QLineEdit() self.txtRangeEnd.setFixedWidth( self.txtRangeEnd.fontMetrics().width('0') * 8) self.txtRangeEnd.setValidator( QIntValidator(common.SpectrumRange[0], common.SpectrumRange[1])) boxRange = QHBoxLayout() boxRange.addWidget(self.txtRangeStart) boxRange.addWidget(QLabel("to")) boxRange.addWidget(self.txtRangeEnd) boxRange.addWidget(QLabel("(nm)")) grpRange = QGroupBox("Spectral Range:", self) grpRange.setLayout(boxRange) # spectrum resolution self.txtResolution = QLineEdit() self.txtResolution.setValidator(QIntValidator(1, 100)) boxResolution = QHBoxLayout() boxResolution.addWidget(self.txtResolution) boxResolution.addWidget(QLabel("(nm)"), 0, Qt.AlignRight) grpResolution = QGroupBox("Spectral Resolution:", self) grpResolution.setLayout(boxResolution) # add final row of options boxStuffOptions = QHBoxLayout() boxStuffOptions.addWidget(grpCoords, 0, Qt.AlignLeft) boxStuffOptions.addWidget(grpRange, 0, Qt.AlignLeft) boxStuffOptions.addWidget(grpResolution, 1) boxStuffOptions.setContentsMargins(0, 0, 0, 0) pnlStuffOptions = QWidget() pnlStuffOptions.setLayout(boxStuffOptions) layout.addWidget(pnlStuffOptions, 0, Qt.AlignTop) # accept/decline buttons boxButtons = QDialogButtonBox() btn = boxButtons.addButton("Cancel", QDialogButtonBox.RejectRole) btn.clicked.connect(self.reject) btn = boxButtons.addButton("Save", QDialogButtonBox.AcceptRole) btn.clicked.connect(self.savePressed) layout.addWidget(boxButtons, 0, Qt.AlignBottom | Qt.AlignRight) self.setLayout(layout)
def createMailModel(parent): model = QStandardItemModel(0, 3, parent) model.setHeaderData(0, Qt.Horizontal, "Subject") model.setHeaderData(1, Qt.Horizontal, "Sender") model.setHeaderData(2, Qt.Horizontal, "Date") addMail( model, "Happy New Year!", "Grace K. <*****@*****.**>", QDateTime(QDate(2006, 12, 31), QTime(17, 3)), ) addMail( model, "Radically new concept", "Grace K. <*****@*****.**>", QDateTime(QDate(2006, 12, 22), QTime(9, 44)), ) addMail( model, "Accounts", "*****@*****.**", QDateTime(QDate(2006, 12, 31), QTime(12, 50)), ) addMail( model, "Expenses", "Joe Bloggs <*****@*****.**>", QDateTime(QDate(2006, 12, 25), QTime(11, 39)), ) addMail( model, "Re: Expenses", "Andy <*****@*****.**>", QDateTime(QDate(2007, 1, 2), QTime(16, 5)), ) addMail( model, "Re: Accounts", "Joe Bloggs <*****@*****.**>", QDateTime(QDate(2007, 1, 3), QTime(14, 18)), ) addMail( model, "Re: Accounts", "Andy <*****@*****.**>", QDateTime(QDate(2007, 1, 3), QTime(14, 26)), ) addMail( model, "Sports", "Linda Smith <*****@*****.**>", QDateTime(QDate(2007, 1, 5), QTime(11, 33)), ) addMail( model, "AW: Sports", "Rolf Newschweinstein <*****@*****.**>", QDateTime(QDate(2007, 1, 5), QTime(12, 0)), ) addMail( model, "RE: Sports", "Petra Schmidt <*****@*****.**>", QDateTime(QDate(2007, 1, 5), QTime(12, 1)), ) return model
def __init__(self, parent=None): super().__init__(parent) # Window creation bg = self.palette() bg.setColor(QPalette.Window, Qt.white) self.setPalette(bg) self.setFixedSize(340, 450) self.setWindowTitle("HPLC a Excel") self.setAcceptDrops(True) # Button creation self.btn_load_files = QPushButton("Cargar archivos", self) self.btn_export = QPushButton("Exportar todos a Excel", self) self.btn_remove_checked = QPushButton("Descartar seleccionados", self) self.btn_config = QPushButton("", self) self.btn_config.setIcon(QIcon("ui/gear.png")) self.btn_config.setMaximumWidth(30) self.btn_config.setToolTip("Configuración (Ctrl + K)") self.btn_config.setShortcut(Qt.CTRL + Qt.Key_K) # Label creation self.copyright = QLabel("DIQB UC - Víctor Tirreau - 2018", self) self.copyright.setStyleSheet("color: #444444;") self.copyright.setAlignment(Qt.AlignCenter) # Button connection self.btn_load_files.clicked.connect(self.get_files) self.btn_remove_checked.clicked.connect(self.remove_checked) self.btn_export.clicked.connect(self.open_export_dialog) self.btn_config.clicked.connect(self.open_config_dialog) # Signal connection self.back = backend.PDFToExcel(self) self.add_path_signal.connect(self.back.add_paths) self.remove_path_signal.connect(self.back.remove_paths) self.add_drag_n_drop_path_signal.connect( self.back.add_paths_drag_n_drop) self.export_all_signal.connect(self.back.export_pdf_to_excel) # List self.list = QListView(self) self.model = QStandardItemModel(self.list) self.list.setModel(self.model) # Layout top_h_box = QHBoxLayout() top_h_box.addWidget(self.btn_load_files) top_h_box.addWidget(self.btn_config) lower_h_box = QHBoxLayout() lower_h_box.addWidget(self.btn_remove_checked) lower_h_box.addStretch(10) lower_h_box.addWidget(self.btn_export) v_box = QVBoxLayout() v_box.addLayout(top_h_box) v_box.addWidget(self.list) v_box.addLayout(lower_h_box) v_box.addWidget(self.copyright) h_box = QHBoxLayout() h_box.addLayout(v_box) self.setLayout(h_box) # Config self.include_od = False
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(':/icon.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) # inserting items in category_tree for item in ['All Downloads', 'Single Downloads']: qstandarditem = QStandardItem(item) font = QtGui.QFont() font.setBold(True) qstandarditem.setFont(font) qstandarditem.setEditable(False) self.category_tree_model.appendRow(qstandarditem) # 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) horizontalLayout_5 = QHBoxLayout() self.start_hour_spinBox = QSpinBox(self.start_frame) self.start_hour_spinBox.setMaximum(23) horizontalLayout_5.addWidget(self.start_hour_spinBox) self.start_label = QLabel(self.start_frame) horizontalLayout_5.addWidget(self.start_label) self.start_minute_spinBox = QSpinBox(self.start_frame) self.start_minute_spinBox.setMaximum(59) horizontalLayout_5.addWidget(self.start_minute_spinBox) start_frame_verticalLayout.addLayout(horizontalLayout_5) 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) horizontalLayout_6 = QHBoxLayout() self.end_hour_spinBox = QSpinBox(self.end_frame) self.end_hour_spinBox.setMaximum(23) horizontalLayout_6.addWidget(self.end_hour_spinBox) self.end_label = QLabel(self.end_frame) horizontalLayout_6.addWidget(self.end_label) self.end_minute_spinBox = QSpinBox(self.end_frame) self.end_minute_spinBox.setMaximum(59) horizontalLayout_6.addWidget(self.end_minute_spinBox) end_frame_verticalLayout.addLayout(horizontalLayout_6) 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 = QSpinBox(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() # self.download_table.setSortingEnabled(True) # 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', 'Info', '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.browserAction = QAction(QIcon(icons + 'browser'), 'Browser integration', self, statusTip='Browser inegration', triggered=self.browserIntegration) helpMenu.addAction(self.browserAction) 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.start_label.setText(":") self.end_checkBox.setText("End Time") self.end_label.setText(":") 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 findEnrolleeClick(self): model = QStandardItemModel(self.findEnrolleeList) for i in Enrollee.findBySurname(self.findEnrolleeInput.text()): item = QStandardItem(i.to_string()) model.appendRow(item) self.findEnrolleeList.setModel(model)
def analyze(self): ui_Runner.parse = LR_Parser(ui_Runner.c) ui_Runner.parse.parse3(ui_Runner.r) SELECT = ui_Runner.parse.CFG.SELECT SELECT_model = QStandardItemModel(len(SELECT), 50) SELECT_model.setHorizontalHeaderLabels( list(map(lambda x: str(x), list(range(1, 51))))) count = -1 for (key, value) in SELECT.items(): count += 1 c = 0 SELECT_model.setItem(count, c, QStandardItem(str(key))) for t in value: c += 1 item = QStandardItem(t.s) SELECT_model.setItem(count, c, item) ui.tableView_SELECT.setModel(SELECT_model) FOLLOW = ui_Runner.parse.CFG.FOLLOW FOLLOW_model = QStandardItemModel(len(FOLLOW), 50) FOLLOW_model.setHorizontalHeaderLabels( list(map(lambda x: str(x), list(range(1, 51))))) count = -1 for (key, value) in FOLLOW.items(): count += 1 c = 0 FOLLOW_model.setItem(count, c, QStandardItem(str(key))) for t in value: c += 1 item = QStandardItem(t.s) FOLLOW_model.setItem(count, c, item) ui.tableView_FOLLOW.setModel(FOLLOW_model) FIRST = ui_Runner.parse.CFG.FIRST FIRST_model = QStandardItemModel(len(FIRST), 50) FIRST_model.setHorizontalHeaderLabels( list(map(lambda x: str(x), list(range(1, 51))))) count = -1 for (key, value) in FIRST.items(): count += 1 c = 0 FIRST_model.setItem(count, c, QStandardItem(str(key))) for t in value: c += 1 item = QStandardItem(t.s) FIRST_model.setItem(count, c, item) ui.tableView_FIRST.setModel(FIRST_model) table = ui_Runner.parse.PDA.table_LR1 nt_idx, t_idx = {}, {} for (key, value) in table.nt.items(): nt_idx[value] = key for (key, value) in table.t.items(): t_idx[value] = key ntlist, tlist = [], [] for idx in range(len(nt_idx)): ntlist.append(nt_idx[idx]) for idx in range(len(t_idx)): tlist.append(t_idx[idx]) ACTION = table.ACTION GOTO = table.GOTO ACTION_model = QStandardItemModel(len(ACTION), len(ACTION[0])) ACTION_model.setHorizontalHeaderLabels( list(map(lambda x: str(x), tlist))) GOTO_model = QStandardItemModel(len(GOTO), len(GOTO[0])) GOTO_model.setHorizontalHeaderLabels( list(map(lambda x: str(x), ntlist))) for i in range(len(ACTION)): for j in range(len(ACTION[0])): if len(ACTION[i][j]) == 0: continue ACTION_model.setItem(i, j, QStandardItem(str(ACTION[i][j]))) for i in range(len(GOTO)): for j in range(len(GOTO[0])): if len(GOTO[i][j]) == 0: continue GOTO_model.setItem(i, j, QStandardItem(str(GOTO[i][j][0][1]))) ui.tableView_GOTO.setModel(GOTO_model) ui.tableView_Action.setModel(ACTION_model) ui.plainTextEdit_SysOutput.setPlainText(str(ui_Runner.parse)) errors = [] for es in ui_Runner.parse.error: errors.append('Error at Line ' + str(es[-1]) + ' : with token <' + str(es[0]) + '-' + str(es[1]) + '>') ui.plainTextEdit_Error.setPlainText('\n'.join(errors)) print('fin')
def __init__(self, parent=None): # pylint: disable=too-many-statements super(HooksPanel, self).__init__(parent=parent) self._app_window = parent if self._app_window.dwarf is None: print('HooksPanel created before Dwarf exists') return # connect to dwarf self._app_window.dwarf.onAddJavaHook.connect(self._on_add_hook) self._app_window.dwarf.onAddNativeHook.connect(self._on_add_hook) self._app_window.dwarf.onAddNativeOnLoadHook.connect(self._on_add_hook) self._app_window.dwarf.onAddJavaOnLoadHook.connect(self._on_add_hook) self._app_window.dwarf.onHitNativeOnLoad.connect(self._on_hit_native_on_load) self._app_window.dwarf.onHitJavaOnLoad.connect(self._on_hit_java_on_load) self._app_window.dwarf.onDeleteHook.connect(self._on_hook_deleted) self._hooks_list = DwarfListView() self._hooks_list.doubleClicked.connect(self._on_dblclicked) self._hooks_list.setContextMenuPolicy(Qt.CustomContextMenu) self._hooks_list.customContextMenuRequested.connect(self._on_context_menu) self._hooks_model = QStandardItemModel(0, 5) self._hooks_model.setHeaderData(0, Qt.Horizontal, 'Address') self._hooks_model.setHeaderData(1, Qt.Horizontal, 'T') self._hooks_model.setHeaderData(1, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self._hooks_model.setHeaderData(2, Qt.Horizontal, 'Input') self._hooks_model.setHeaderData(3, Qt.Horizontal, '{}') self._hooks_model.setHeaderData(3, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self._hooks_model.setHeaderData(4, Qt.Horizontal, '<>') self._hooks_model.setHeaderData(4, Qt.Horizontal, Qt.AlignCenter, Qt.TextAlignmentRole) self._hooks_list.setModel(self._hooks_model) self._hooks_list.header().setStretchLastSection(False) self._hooks_list.header().setSectionResizeMode( 0, QHeaderView.ResizeToContents | QHeaderView.Interactive) self._hooks_list.header().setSectionResizeMode( 1, QHeaderView.ResizeToContents) self._hooks_list.header().setSectionResizeMode(2, QHeaderView.Stretch) self._hooks_list.header().setSectionResizeMode( 3, QHeaderView.ResizeToContents) self._hooks_list.header().setSectionResizeMode( 4, QHeaderView.ResizeToContents) v_box = QVBoxLayout(self) v_box.setContentsMargins(0, 0, 0, 0) v_box.addWidget(self._hooks_list) #header = QHeaderView(Qt.Horizontal, self) h_box = QHBoxLayout() h_box.setContentsMargins(5, 2, 5, 5) self.btn1 = QPushButton(QIcon(utils.resource_path('assets/icons/plus.svg')), '') self.btn1.setFixedSize(20, 20) self.btn1.clicked.connect(self._on_additem_clicked) btn2 = QPushButton(QIcon(utils.resource_path('assets/icons/dash.svg')), '') btn2.setFixedSize(20, 20) btn2.clicked.connect(self.delete_items) btn3 = QPushButton(QIcon(utils.resource_path('assets/icons/trashcan.svg')), '') btn3.setFixedSize(20, 20) btn3.clicked.connect(self.clear_list) h_box.addWidget(self.btn1) h_box.addWidget(btn2) h_box.addSpacerItem( QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Preferred)) h_box.addWidget(btn3) # header.setLayout(h_box) # header.setFixedHeight(25) # v_box.addWidget(header) v_box.addLayout(h_box) self.setLayout(v_box) self._bold_font = QFont(self._hooks_list.font()) self._bold_font.setBold(True) shortcut_addnative = QShortcut( QKeySequence(Qt.CTRL + Qt.Key_N), self._app_window, self._on_addnative) shortcut_addnative.setAutoRepeat(False) shortcut_addjava = QShortcut( QKeySequence(Qt.CTRL + Qt.Key_J), self._app_window, self._on_addjava) shortcut_addjava.setAutoRepeat(False) shortcut_add_native_on_load = QShortcut( QKeySequence(Qt.CTRL + Qt.Key_O), self._app_window, self._on_add_native_on_load) shortcut_add_native_on_load.setAutoRepeat(False) # new menu self.new_menu = QMenu('New') self.new_menu.addAction('Native', self._on_addnative) self.new_menu.addAction('Java', self._on_addjava) self.new_menu.addAction('Module loading', self._on_add_native_on_load)
def refresh_list_view(self): task_name_list = self.task_manager.get_task_name_list() model = QStandardItemModel() for task_name in task_name_list: model.appendRow(QStandardItem(task_name)) self.ui.task_list_view.setModel(model)