コード例 #1
0
ファイル: brush_size.py プロジェクト: xsyann/mediocre
 def createListWidget(self):
     listWidget = QListWidget()
     w, h = self.ITEM_SIZE
     scroll_size = 16
     listWidget.setFixedWidth(w + scroll_size)
     listWidget.setAttribute(Qt.WA_MacShowFocusRect, False)
     for x in xrange(self._min_size, self._max_size):
         h = max(x + self.MARGIN * 2.0, h)
         pixmap = QPixmap(w, h)
         pixmap.fill(Qt.transparent)
         painter = QPainter(pixmap)
         center = h / 2.0
         painter.fillRect(QRectF(self.MARGIN, center - x / 2.0,
                                 w - self.MARGIN * 2.0, x), Qt.black)
         painter.end()
         label = QLabel()
         label.setPixmap(pixmap)
         item = QListWidgetItem(listWidget)
         item.setSizeHint(QSize(w, h))
         item.setData(Qt.UserRole, x)
         listWidget.addItem(item)
         listWidget.setItemWidget(item, label)
         if self._size == x:
             listWidget.setCurrentItem(item)
     return listWidget
コード例 #2
0
ファイル: i18n.py プロジェクト: dragondjf/PySideDemo
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)

        self.createGroupBox()

        listWidget = QListWidget()

        for le in MainWindow.listEntries:
            listWidget.addItem(self.tr(le))

        mainLayout = QVBoxLayout()
        mainLayout.addWidget(self.groupBox)
        mainLayout.addWidget(listWidget)
        self.centralWidget.setLayout(mainLayout)

        exitAction = QAction(self.tr("E&xit"), self,
                triggered=QApplication.instance().quit)

        fileMenu = self.menuBar().addMenu(self.tr("&File"))
        fileMenu.setPalette(QPalette(Qt.red))
        fileMenu.addAction(exitAction)

        self.setWindowTitle(self.tr("Language: %s") % self.tr("English"))
        self.statusBar().showMessage(self.tr("Internationalization Example"))

        if self.tr("LTR") == "RTL":
            self.setLayoutDirection(Qt.RightToLeft)
コード例 #3
0
    def __init__(self, opPixelClassification, parent):
        super( QDialog, self ).__init__(parent=parent)
        self._op = opPixelClassification
        classifier_listwidget = QListWidget(parent=self)
        classifier_listwidget.setSelectionMode( QListWidget.SingleSelection )

        classifier_factories = self._get_available_classifier_factories()
        for name, classifier_factory in list(classifier_factories.items()):
            item = QListWidgetItem( name )
            item.setData( Qt.UserRole, classifier_factory )
            classifier_listwidget.addItem(item)

        buttonbox = QDialogButtonBox( Qt.Horizontal, parent=self )
        buttonbox.setStandardButtons( QDialogButtonBox.Ok | QDialogButtonBox.Cancel )
        buttonbox.accepted.connect( self.accept )
        buttonbox.rejected.connect( self.reject )
        
        layout = QVBoxLayout()
        layout.addWidget( classifier_listwidget )
        layout.addWidget( buttonbox )

        self.setLayout(layout)
        self.setWindowTitle( "Select Classifier Type" )
        
        # Save members
        self._classifier_listwidget = classifier_listwidget
コード例 #4
0
	def initUI(self):
		main_layout = QVBoxLayout(self)
		sub_layout = QHBoxLayout()
		# Left Panel
		left_panel = QListWidget()
		left_panel.setViewMode(left_panel.ListMode)
		#left_panel.setIconSize(QSize(40,40))
		left_panel.setTextElideMode(Qt.ElideRight)
		left_panel.setMaximumWidth(200)
		left_panel.itemClicked.connect(self.change)
		#web.setText('Web')
		self.application = QListWidgetItem()
		self.application.setText('Application')
		self.web = QListWidgetItem()
		self.web.setText('Web')
		self.visual = QListWidgetItem()
		self.visual.setText('Visual')
		self.advanced = QListWidgetItem()
		self.advanced.setText('Advanced')
		self.about = QListWidgetItem()
		self.about.setText('About')

		#main.setIcon(QIcon(os.path.join(app_constants.static_dir, 'plus2.png')))
		left_panel.addItem(self.application)
		left_panel.addItem(self.web)
		left_panel.addItem(self.visual)
		left_panel.addItem(self.advanced)
		left_panel.addItem(self.about)
		left_panel.setMaximumWidth(100)

		# right panel
		self.right_panel = QStackedLayout()
		self.init_right_panel()

		# bottom
		bottom_layout = QHBoxLayout()
		ok_btn = QPushButton('Ok')
		ok_btn.clicked.connect(self.accept)
		cancel_btn = QPushButton('Cancel')
		cancel_btn.clicked.connect(self.close)
		info_lbl = QLabel()
		info_lbl.setText('<a href="https://github.com/Pewpews/happypanda">'+
				   'Visit GitHub Repo</a> | Options marked with * requires application restart.')
		info_lbl.setTextFormat(Qt.RichText)
		info_lbl.setTextInteractionFlags(Qt.TextBrowserInteraction)
		info_lbl.setOpenExternalLinks(True)
		self.spacer = QWidget()
		self.spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
		bottom_layout.addWidget(info_lbl, 0, Qt.AlignLeft)
		bottom_layout.addWidget(self.spacer)
		bottom_layout.addWidget(ok_btn, 0, Qt.AlignRight)
		bottom_layout.addWidget(cancel_btn, 0, Qt.AlignRight)

		sub_layout.addWidget(left_panel)
		sub_layout.addLayout(self.right_panel)
		main_layout.addLayout(sub_layout)
		main_layout.addLayout(bottom_layout)

		self.restore_options()
コード例 #5
0
class MainWidget(QWidget):
    """
    MainWidget class
    Main widget for the main window

    """
    def __init__(self, parent):
        super(MainWidget, self).__init__(parent)
        self.layout = QVBoxLayout(self)

        self.load_button = QPushButton("Load data")
        self.load_button.clicked.connect(self.scrape_data)
        self.layout.addWidget(self.load_button)

        self.status_label = QLabel()
        self.layout.addWidget(self.status_label)

        self.list_widget = QListWidget()
        self.list_widget.itemClicked.connect(self.item_clicked)
        self.layout.addWidget(self.list_widget)

        # Load the data from the database
        self.load_data()

        self.setLayout(self.layout)

    def scrape_data(self):
        """
        Scrape the data and load it into the list widget

        """
        scrape_and_save()
        self.load_data()
        self.status_label.setText("Data loaded")

    def load_data(self):
        """
        Load the data from the database into the list widget

        """
        self.list_widget.clear()
        data = Database.load_data_from_db()
        for item in data:
            self.list_widget.addItem(item.date + " : " + item.title + " - " +
                                     item.image)

    def item_clicked(self, item):
        """
        When a user clicks on the item in the list widget get the url for the
        item image and open it in the browser
        :param item: List widget item

        """
        text = item.text()
        image = text.split(' - ')
        image = image[1]
        import webbrowser
        webbrowser.open(image)
コード例 #6
0
ファイル: Gantt.py プロジェクト: MaximeCheramy/simso-gui
class GanttConfigure(QDialog):
    def __init__(self, sim, start, end):
        QDialog.__init__(self)
        #self.setCaption("Gantt configuration")
        self.layout = QVBoxLayout(self)

#        self._slider = QxtSpanSliderWidget(
#            sim.observe_window[0] // sim.cycles_per_ms,
#            min(sim.now(), sim.observe_window[1]) // sim.cycles_per_ms,
#            self)
        self._slider = QxtSpanSliderWidget(
            0,
            min(sim.now(), sim.duration) // sim.cycles_per_ms,
            self)
        self._slider.setSpan(start, end)
        self.layout.addWidget(self._slider)

        self._list_elements = QListWidget(self)
        for processor in sim.processors:
            item = QListWidgetItem(processor.name, self._list_elements)
            item.setData(Qt.UserRole, processor)
            self._list_elements.addItem(item)
        for task in sim.task_list:
            item = QListWidgetItem(task.name, self._list_elements)
            item.setData(Qt.UserRole, task)
            self._list_elements.addItem(item)
        #self._list_elements.setDragDropMode(QListWidget.InternalMove)
        for row in range(0, self._list_elements.count()):
            self._list_elements.item(row).setCheckState(Qt.Checked)
        self.layout.addWidget(self._list_elements)

        buttons = QWidget(self)
        buttons_layout = QHBoxLayout()
        buttons.setLayout(buttons_layout)
        buttons_layout.addStretch()
        ok_button = QPushButton("Ok")
        cancel_button = QPushButton("Cancel")
        ok_button.clicked.connect(self.accept)
        cancel_button.clicked.connect(self.reject)
        buttons_layout.addWidget(ok_button)
        buttons_layout.addWidget(cancel_button)
        self.layout.addWidget(buttons)

    def get_start_date(self):
        return self._slider.lowerValue

    def get_end_date(self):
        return self._slider.upperValue

    def get_selected_items(self):
        res = []
        for row in range(0, self._list_elements.count()):
            if self._list_elements.item(row).checkState() == Qt.Checked:
                data = self._list_elements.item(row).data(Qt.UserRole)
                res.append(data)
        return res
コード例 #7
0
ファイル: wizard.py プロジェクト: khuno/rpg
class PatchesPage(QtWidgets.QWizardPage):
    def __init__(self, Wizard, parent=None):
        super(PatchesPage, self).__init__(parent)

        self.base = Wizard.base

        self.setTitle(self.tr("Patches page"))
        self.setSubTitle(self.tr("Select patches"))

        self.addButton = QPushButton("+")
        self.removeButton = QPushButton("-")
        patchesLabel = QLabel("Patches")
        self.listPatches = QListWidget()
        self.addButton.setMaximumWidth(68)
        self.addButton.setMaximumHeight(60)
        self.addButton.clicked.connect(self.openPatchesPageFileDialog)
        self.removeButton.setMaximumWidth(68)
        self.removeButton.setMaximumHeight(60)
        self.removeButton.clicked.connect(self.removeItemFromListWidget)

        grid = QGridLayout()
        grid.addWidget(patchesLabel, 0, 0)
        grid.addWidget(self.addButton, 0, 1,)
        grid.addWidget(self.removeButton, 0, 2)
        grid.addWidget(self.listPatches, 1, 0, 1, 0)

        self.setLayout(grid)

    def removeItemFromListWidget(self):
        self.item = self.listPatches.takeItem(self.listPatches.currentRow())
        self.item = None

    def openPatchesPageFileDialog(self):
        brows = QFileDialog()
        self.getPath = brows.getOpenFileName(self,
                                             "Choose patches",
                                             "/home",
                                             "All files (*)")
        self.newPath = self.getPath[0]
        self.listPatches.addItem(self.newPath)

    def validatePage(self):
        self.itemsCount = self.listPatches.count()
        self.pathes = []
        for i in range(0, self.itemsCount):
            self.pathes.append(self.listPatches.item(i).text())

        self.base.apply_patches(self.pathes)
        self.base.run_patched_sources_analysis()
        return True

    def nextId(self):
        return Wizard.PageScripts
コード例 #8
0
class CustomFieldsEditor(QDialog):

    def __init__(self, parent, fields):
        QDialog.__init__(self, parent)

        layout = QVBoxLayout(self)

        self._list_elements = QListWidget(self)
        self._fields = dict(fields)
        for field, ftype in fields.items():
            self._list_elements.addItem(field + ' (' + ftype + ')')

        self._list_elements.setSelectionMode(
            QAbstractItemView.ExtendedSelection)

        layout.addWidget(self._list_elements)

        add_remove = AddRemoveButtonBar(self, 'Remove selected field(s)',
                                        self.remove, 'Add field', self.add)
        layout.addWidget(add_remove)

        buttons = QWidget(self)
        buttons_layout = QHBoxLayout()
        buttons.setLayout(buttons_layout)
        buttons_layout.addStretch()
        ok_button = QPushButton("Ok")
        cancel_button = QPushButton("Cancel")
        ok_button.clicked.connect(self.accept)
        cancel_button.clicked.connect(self.reject)
        buttons_layout.addWidget(ok_button)
        buttons_layout.addWidget(cancel_button)
        layout.addWidget(buttons)

        self.setLayout(layout)

    def remove(self):
        res = []
        for item in self._list_elements.selectedItems():
            del self._fields[str(item.text()).split(' ')[0]]
            res.append(self._list_elements.row(item))

        for row in sorted(res, key=lambda x: -x):
            self._list_elements.takeItem(row)

    def add(self):
        dialog = AddFieldDialog(self)
        if dialog.exec_():
            self._fields[str(dialog.name)] = dialog.ftype
            self._list_elements.addItem(
                dialog.name + ' (' + dialog.ftype + ')')

    def get_fields(self):
        return self._fields
コード例 #9
0
ファイル: popup.py プロジェクト: Grumbel/dirtool
class PopupThing(QWidget):

    def __init__(self, parent):
        super().__init__(parent,
                         Qt.Window |
                         Qt.WindowStaysOnTopHint |
                         Qt.X11BypassWindowManagerHint |
                         Qt.FramelessWindowHint)

        vbox = QVBoxLayout()
        self.listwidget = QListWidget()
        self.listwidget.addItem("Test")
        vbox.addWidget(self.listwidget)
        vbox.setContentsMargins(4, 4, 4, 4)
        self.setLayout(vbox)
コード例 #10
0
ファイル: app.py プロジェクト: peaceandpizza/happypanda
			def skipped_gs(s_list):
				"Skipped galleries"
				msg_box = QMessageBox(self)
				msg_box.setIcon(QMessageBox.Question)
				msg_box.setText('Do you want to view skipped paths?')
				msg_box.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
				msg_box.setDefaultButton(QMessageBox.No)
				if msg_box.exec() == QMessageBox.Yes:
					list_wid = QListWidget(self)
					for g in s_list:
						list_wid.addItem(g)
					list_wid.setWindowTitle('{} skipped paths'.format(len(s_list)))
					list_wid.setWindowFlags(Qt.Window)
					list_wid.resize(500,500)
					list_wid.show()
コード例 #11
0
ファイル: Dialog.py プロジェクト: gstark31897/Akai-Python
class AddFriendDialog(QDialog):
   def __init__(self, client_socket):
      super().__init__()
      self.client_socket = client_socket 
      self.client_socket.recv_user_search.connect(self.recvUserSearch)
      self.selected_user = None
      self.initUI()

   def initUI(self):
      self.grid = QGridLayout(self)

      self.search_box_label = QLabel("Search:")
      self.grid.addWidget(self.search_box_label, 0, 0, 1, 1)

      self.search_box = QLineEdit()
      self.grid.addWidget(self.search_box, 0, 1, 1, 2)

      self.search_button = QPushButton("Search")
      self.search_button.pressed.connect(self.searchUser)
      self.grid.addWidget(self.search_button, 0, 3, 1, 1)

      self.search_result = QListWidget()
      self.grid.addWidget(self.search_result, 1, 0, 2, 2)

      #TODO get user avatars to work
      self.add_friend_button = QPushButton("Add Friend")
      self.add_friend_button.pressed.connect(self.addFriend)
      self.grid.addWidget(self.add_friend_button, 1, 2, 1, 2)

      self.cancel_button = QPushButton("Cancel")
      self.cancel_button.pressed.connect(self.cancel)
      self.grid.addWidget(self.cancel_button, 2, 2, 1, 2)

   def searchUser(self):
      self.client_socket.searchUser(self.search_box.text())

   def recvUserSearch(self, found_users):
      self.search_result.clear()
      for user in found_users:
         self.search_result.addItem(QListWidgetItem(user))

   def addFriend(self):
      self.selected_user = self.search_result.selectedItems()[0].text()
      config.friends[self.selected_user] = {}
      self.close()

   def cancel(self):
      self.close()
コード例 #12
0
ファイル: logwidget.py プロジェクト: rinsewester/SDFkit
class LogWidget(QWidget):

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

        self.initUI()

        self.show()

    def initUI(self):

        self.btnclear = QPushButton("Clear messages", self)
        self.btnclear.clicked.connect(self._clearClicked)
        
        self.lwmessages = QListWidget(self)
        for _, msgtype, msgtext in Log.getLogMessages():
            self.addLogItem(msgtype, msgtext)

        self.hboxlayout = QHBoxLayout()
        self.hboxlayout.addWidget(self.btnclear)
        self.hboxlayout.addStretch()

        self.vboxlayout = QVBoxLayout()
        self.vboxlayout.addLayout(self.hboxlayout)
        self.vboxlayout.addWidget(self.lwmessages)

        self.setLayout(self.vboxlayout)

        # Make sure this widget listens to new logevents
        Log.setNewMessageCallBack(self._newMessageAddedToLog)

    def _clearClicked(self):
        self.lwmessages.clear()
        Log.clearMessages()

    def _newMessageAddedToLog(self, msgtype, msgtext):
        self.addLogItem(msgtype, msgtext)

    def addLogItem(self, msgtype, msgtext):
        if msgtype == Log.INFO:
            icon = QIcon('images/information.png')
        elif msgtype == Log.WARNING:
            icon = QIcon('images/warning.png')
        else:
            icon = QIcon('images/error.png')
        item = QListWidgetItem(icon, msgtext)
        self.lwmessages.addItem(item)
コード例 #13
0
ファイル: settings.py プロジェクト: gpiantoni/phypno
    def create_settings(self):
        """Create the widget, organized in two parts.

        Notes
        -----
        When you add widgets in config, remember to update show_settings too
        """
        bbox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Apply |
                                QDialogButtonBox.Cancel)
        self.idx_ok = bbox.button(QDialogButtonBox.Ok)
        self.idx_apply = bbox.button(QDialogButtonBox.Apply)
        self.idx_cancel = bbox.button(QDialogButtonBox.Cancel)
        bbox.clicked.connect(self.button_clicked)

        page_list = QListWidget()
        page_list.setSpacing(1)
        page_list.currentRowChanged.connect(self.change_widget)

        pages = ['General', 'Overview', 'Signals', 'Channels', 'Spectrum',
                 'Notes', 'Video']
        for one_page in pages:
            page_list.addItem(one_page)

        self.stacked = QStackedWidget()
        self.stacked.addWidget(self.config)
        self.stacked.addWidget(self.parent.overview.config)
        self.stacked.addWidget(self.parent.traces.config)
        self.stacked.addWidget(self.parent.channels.config)
        self.stacked.addWidget(self.parent.spectrum.config)
        self.stacked.addWidget(self.parent.notes.config)
        self.stacked.addWidget(self.parent.video.config)

        hsplitter = QSplitter()
        hsplitter.addWidget(page_list)
        hsplitter.addWidget(self.stacked)

        btnlayout = QHBoxLayout()
        btnlayout.addStretch(1)
        btnlayout.addWidget(bbox)

        vlayout = QVBoxLayout()
        vlayout.addWidget(hsplitter)
        vlayout.addLayout(btnlayout)

        self.setLayout(vlayout)
コード例 #14
0
ファイル: session.py プロジェクト: ismlsmile/nimbus
class SessionManager(QMainWindow):
    def __init__(self, parent=None):
        QListWidget.__init__(self, parent)
        self.setWindowTitle(tr("Saved Sessions"))
        self.setWindowFlags(Qt.Dialog)
        hideAction = QAction(self)
        hideAction.setShortcuts(["Esc", "Ctrl+W"])
        hideAction.triggered.connect(self.hide)
        self.addAction(hideAction)
        self.sessionList = QListWidget(self)
        self.sessionList.itemActivated.connect(self.loadSession)
        self.setCentralWidget(self.sessionList)
        self.toolBar = QToolBar(self)
        self.toolBar.setMovable(False)
        self.toolBar.setContextMenuPolicy(Qt.CustomContextMenu)
        self.addToolBar(Qt.BottomToolBarArea, self.toolBar)
        self.loadButton = QPushButton(tr("&Load"), self)
        self.loadButton.clicked.connect(lambda: self.loadSession(self.sessionList.currentItem()))
        self.toolBar.addWidget(self.loadButton)
        self.saveButton = QPushButton(tr("&Save"), self)
        self.saveButton.clicked.connect(saveSessionManually)
        self.saveButton.clicked.connect(self.refresh)
        self.toolBar.addWidget(self.saveButton)
        deleteAction = QAction(self)
        deleteAction.setShortcut("Del")
        deleteAction.triggered.connect(self.delete)
        self.addAction(deleteAction)
    def refresh(self):
        self.sessionList.clear()
        if os.path.exists(settings.session_folder):
            sessions = os.listdir(settings.session_folder)
            for session in sessions:
                self.sessionList.addItem(session)
    def delete(self):
        if self.sessionList.hasFocus():
            try: os.remove(os.path.join(settings.session_folder, self.sessionList.currentItem().text()))
            except: pass
            self.refresh()
    def show(self):
        self.refresh()
        QMainWindow.show(self)
    def loadSession(self, item):
        if os.path.exists(settings.session_folder):
            loadSession(os.path.join(settings.session_folder, item.text()))
        self.hide()
コード例 #15
0
ファイル: tab_group.py プロジェクト: Salmista-94/Ninja_PyQt5
class TabGroup(QWidget, itab_item.ITabItem):

    def __init__(self, project, name, actions):
        super(TabGroup, self).__init__()
        vbox = QVBoxLayout(self)
        self.actions = actions
        self.project = project
        self.ID = self.project
        self.name = name
        self.tabs = []
        self.listWidget = QListWidget()
        hbox = QHBoxLayout()
        btnExpand = QPushButton(_translate("TabGroup", "Expand this Files"))
        btnExpandAll = QPushButton(_translate("TabGroup", "Expand all Groups"))
        hbox.addWidget(btnExpandAll)
        hbox.addSpacerItem(QSpacerItem(20, 20, QSizePolicy.Expanding))
        hbox.addWidget(btnExpand)
        vbox.addLayout(hbox)
        vbox.addWidget(self.listWidget)

        btnExpand.clicked['bool'].connect(self.expand_this)
        btnExpandAll.clicked['bool'].connect(self.actions.deactivate_tabs_groups)

    def add_widget(self, widget):
        self.tabs.append(widget)
        self.listWidget.addItem(widget.ID)

    def expand_this(self):
        self.actions.group_tabs_together()
        for tab in self.tabs:
            tabName = file_manager.get_basename(tab.ID)
            self.actions.ide.mainContainer.add_tab(tab, tabName)
        index = self.actions.ide.mainContainer._tabMain.indexOf(self)
        self.actions.ide.mainContainer._tabMain.removeTab(index)
        self.tabs = []
        self.listWidget.clear()

    def only_expand(self):
        for tab in self.tabs:
            tabName = file_manager.get_basename(tab.ID)
            self.actions.ide.mainContainer.add_tab(tab, tabName)
        index = self.actions.ide.mainContainer._tabMain.indexOf(self)
        self.actions.ide.mainContainer._tabMain.removeTab(index)
        self.tabs = []
        self.listWidget.clear()
コード例 #16
0
class PeersDiscoveryDialog(QDialog):

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

        self.setWindowModality(Qt.ApplicationModal)
        self.setLayout(QVBoxLayout())
        self.setMaximumSize(300, 200)
        self.setMinimumSize(300, 200)
        self.resize(300, 200)

        self.listWidget = QListWidget(self)
        self.listWidget.setAlternatingRowColors(True)
        self.listWidget.setSelectionMode(self.listWidget.MultiSelection)
        self.layout().addWidget(self.listWidget)

        self.dialogButton = QDialogButtonBox(self)
        self.dialogButton.setStandardButtons(self.dialogButton.Ok)
        self.dialogButton.accepted.connect(self.accept)
        self.layout().addWidget(self.dialogButton)

        self.retranslateUi()

        self._discoverer = Discoverer()
        self._discoverer.discovered.connect(self._new_peer)

    def retranslateUi(self):
        self.setWindowTitle("Discovering peers ...")

    def accept(self):
        self._discoverer.stop()
        return super().accept()

    def exec_(self):
        self._discoverer.start()
        return super().exec_()

    def get_peers(self):
        return [item.adders for item in self.listWidget.selectedItems()]

    def _new_peer(self, peer):
        item = QListWidgetItem(peer[1] + ' at ' + peer[0])
        item.adders = peer[0]

        self.listWidget.addItem(item)
コード例 #17
0
ファイル: settings_dialog.py プロジェクト: ismlsmile/nimbus
class AdremoverSettingsPanel(SettingsPanel):
    def __init__(self, parent=None):
        super(AdremoverSettingsPanel, self).__init__(parent)

        filterEntryRow = custom_widgets.LineEditRow(tr("Add filter:"), self)
        self.filterEntry = filterEntryRow.lineEdit
        self.filterEntry.returnPressed.connect(self.addFilter)
        self.layout().addWidget(filterEntryRow)

        self.addFilterButton = QPushButton(tr("Add"))
        self.addFilterButton.clicked.connect(self.addFilter)
        filterEntryRow.layout().addWidget(self.addFilterButton)

        # Ad Remover filter list.
        self.filterList = QListWidget(self)
        self.layout().addWidget(self.filterList)

        self.removeFilterButton = QPushButton(tr("Remove"))
        self.removeFilterButton.clicked.connect(lambda: self.removeFilter(True))
        self.layout().addWidget(self.removeFilterButton)

        self.removeAction = QAction(self)
        self.removeAction.setShortcut("Del")
        self.removeAction.triggered.connect(self.removeFilter)
        self.addAction(self.removeAction)

    def removeFilter(self, forceFocus=False):
        if self.filterList.hasFocus() or forceFocus:
            self.filterList.takeItem(self.filterList.row(self.filterList.currentItem()))

    def addFilter(self):
        self.filterList.addItem(self.filterEntry.text())
        self.filterEntry.clear()

    def loadSettings(self):
        settings.load_adremover_filters()
        self.filterList.clear()
        for f in settings.adremover_filters:
            self.filterList.addItem(f)

    def saveSettings(self):
        settings.adremover_filters = [self.filterList.item(f).text() for f in range(0, self.filterList.count())]
        settings.save_adremover_filters()
コード例 #18
0
ファイル: settings_dialog.py プロジェクト: ismlsmile/nimbus
class JavaScriptExceptionsPanel(SettingsPanel):
    def __init__(self, parent=None):
        super(JavaScriptExceptionsPanel, self).__init__(parent)

        domainEntryRow = custom_widgets.LineEditRow(tr("Add domain:"), self)
        self.domainEntry = domainEntryRow.lineEdit
        self.domainEntry.returnPressed.connect(self.addDomain)
        self.layout().addWidget(domainEntryRow)

        self.addDomainButton = QPushButton(tr("Add"))
        self.addDomainButton.clicked.connect(self.addDomain)
        domainEntryRow.layout().addWidget(self.addDomainButton)

        self.domainList = QListWidget(self)
        self.layout().addWidget(self.domainList)

        self.removeDomainButton = QPushButton(tr("Remove"))
        self.removeDomainButton.clicked.connect(lambda: self.removeDomain(True))
        self.layout().addWidget(self.removeDomainButton)

        self.removeAction = QAction(self)
        self.removeAction.setShortcut("Del")
        self.removeAction.triggered.connect(self.removeDomain)
        self.addAction(self.removeAction)

    def removeDomain(self, forceFocus=False):
        if self.domainList.hasFocus() or forceFocus:
            self.domainList.takeItem(self.domainList.row(self.domainList.currentItem()))

    def addDomain(self):
        self.domainList.addItem(self.domainEntry.text())
        self.domainEntry.clear()

    def loadSettings(self):
        settings.js_exceptions = settings.setting_to_list("content/JavaScriptExceptions")
        self.domainList.clear()
        for f in settings.js_exceptions:
            self.domainList.addItem(f)

    def saveSettings(self):
        settings.js_exceptions = [self.domainList.item(f).text() for f in range(0, self.domainList.count())]
        settings.settings.setValue("content/JavaScriptExceptions", settings.js_exceptions)
        settings.settings.sync()
コード例 #19
0
class MatchDlg(QDialog):

    def __init__(self, blocks, fileText, parent=None):
        super().__init__(parent)

        self.setWindowTitle("Approximate matches")
        self.setGeometry(100, 300, 1000, 200)

        NContext = 30

        self.listWidget = QListWidget(self)

        for row, block in enumerate(blocks):
            item = QListWidgetItem()

            before = fileText[block["start"]-NContext:block["start"]]
            after = fileText[block["end"]:block["end"]+NContext]

            item.setSizeHint(QSize(1000, 50))
            textEdit = TextEdit(row, self)
            textEdit.insertHtml('{}<b>{}</b>{}'.format(before, block["candidate"], after))
            self.listWidget.addItem(item)
            self.listWidget.setItemWidget(item, textEdit)

            textEdit.clicked.connect(self.selectText)

        self.listWidget.showMaximized()

        self.listWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.listWidget.setSelectionMode(QAbstractItemView.SingleSelection)

        layout = QVBoxLayout()
        layout.addWidget(QLabel('The text to annotate has not been found. Similar entries are listed below. Please choose correct one.', self))
        layout.addWidget(self.listWidget)
        self.setLayout(layout)

        self.blocks = blocks
        self.chosenBlock = None

    @pyqtSlot(int)
    def selectText(self, row):
        self.chosenBlock = self.blocks[row]
        self.accept()
コード例 #20
0
ファイル: test.py プロジェクト: rzzzwilson/Random-Stuff
class Template(QWidget):

    def __init__(self):
        super().__init__()
        self.list = QListWidget(self)
        for s in ['alpha', 'beta', 'gamma']:
            self.list.addItem(s)
        self.list.currentItemChanged.connect(self.updateMe)
        self.setGeometry(300, 300, 200, 100)
        self.show()

#    def updateMe(self, item):
#        print(item.text())

    def updateMe(self, curr, prev):
        if prev:
            print(f'curr={curr.text()}, prev={prev.text()}')
        else:
            print(f'curr={curr.text()}, prev=None')
コード例 #21
0
class PythonDetectDialog(QDialog):

    def __init__(self, suggested, parent=None):
        super(PythonDetectDialog, self).__init__(parent, Qt.Dialog)
        self.setMaximumSize(QSize(0, 0))
        self.setWindowTitle("Configure Python Path")

        vbox = QVBoxLayout(self)
        msg_str = ("We have detected that you are using "
                   "Windows,\nplease choose the proper "
                   "Python application for you:")
        lblMessage = QLabel(self.tr(msg_str))
        vbox.addWidget(lblMessage)

        self.listPaths = QListWidget()
        self.listPaths.setSelectionMode(QListWidget.SingleSelection)
        vbox.addWidget(self.listPaths)

        hbox = QHBoxLayout()
        hbox.addSpacerItem(QSpacerItem(1, 0, QSizePolicy.Expanding))
        btnCancel = QPushButton(self.tr("Cancel"))
        btnAccept = QPushButton(self.tr("Accept"))
        hbox.addWidget(btnCancel)
        hbox.addWidget(btnAccept)
        vbox.addLayout(hbox)

        btnAccept.clicked['bool'].connect(self._set_python_path)
        btnCancel.clicked['bool'].connect(self.close)

        for path in suggested:
            self.listPaths.addItem(path)
        self.listPaths.setCurrentRow(0)

    def _set_python_path(self):
        python_path = self.listPaths.currentItem().text()

        qsettings = QSettings(resources.SETTINGS_PATH, QSettings.IniFormat)
        settings.PYTHON_PATH = python_path
        settings.PYTHON_EXEC = python_path
        settings.PYTHON_EXEC_CONFIGURED_BY_USER = True
        qsettings.setValue('preferences/execution/pythonExec', python_path)
        qsettings.setValue('preferences/execution/pythonExecConfigured', True)
        self.close()
コード例 #22
0
class MessageBoxWithList(QMessageBox):
    def __init__(self, parent = None):
        super().__init__(parent)
        self._listWidget = QListWidget(self)
        self.layout().addWidget(self._listWidget, 3, 1)
        self._listWidget.hide()

    def addToList(self, val):
        self._listWidget.addItem(val)

    def listCount(self):
        return self._listWidget.count()

    def exec(self):
        if self._listWidget.count() > 0:
            self._listWidget.show()
        else:
            self._listWidget.hide()
        super().exec()
コード例 #23
0
ファイル: qtlib.py プロジェクト: wxgeo/geophar
class MultipleChoiceDialog(QDialog):
    def __init__(self, parent, title, text, items):
        QDialog.__init__(self, parent)
        self.setWindowTitle(title)
        self.layout = QVBoxLayout()
        label = QLabel(text)
        self.layout.addWidget(label)
        self.listwidget = QListWidget(self)
        self.listwidget.setSelectionMode(QAbstractItemView.ExtendedSelection)
        for item in items:
            self.listwidget.addItem(item)
        self.layout.addWidget(self.listwidget)
        buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel)
        buttonBox.accepted.connect(self.accept)
        buttonBox.rejected.connect(self.reject)
        self.layout.addWidget(buttonBox)
        self.setLayout(self.layout)

    def selectedItems(self):
        return self.listwidget.selectedItems()
コード例 #24
0
ファイル: misc.py プロジェクト: utterbull/happypanda
class SingleGalleryChoices(BasePopup):
	"""
	Represent a single gallery with a list of choices below.
	Pass a gallery and a list of tuple/list where the first index is a string in each
	if text is passed, the text will be shown alongside gallery, else gallery be centered
	"""
	USER_CHOICE = pyqtSignal(tuple)
	def __init__(self, gallery, tuple_first_idx, text=None, parent = None):
		super().__init__(parent, flags= Qt.Dialog | Qt.FramelessWindowHint)
		main_layout = QVBoxLayout()
		self.main_widget.setLayout(main_layout)
		g_showcase = GalleryShowcaseWidget()
		g_showcase.set_gallery(gallery, (170//1.40, 170))
		if text:
			t_layout = QHBoxLayout()
			main_layout.addLayout(t_layout)
			t_layout.addWidget(g_showcase, 1)
			info = QLabel(text)
			info.setWordWrap(True)
			t_layout.addWidget(info)
		else:
			main_layout.addWidget(g_showcase, 0, Qt.AlignCenter)
		self.list_w = QListWidget(self)
		main_layout.addWidget(self.list_w, 3)
		main_layout.addLayout(self.buttons_layout)
		for t in tuple_first_idx:
			item = GalleryListItem(t)
			item.setText(t[0])
			self.list_w.addItem(item)
		buttons = self.add_buttons('Choose')
		buttons[0].clicked.connect(self.finish)
		self.resize(400, 400)
		self.show()

	def finish(self):
		item = self.list_w.selectedItems()
		if item:
			item = item[0]
			self.USER_CHOICE.emit(item.gallery)
			self.close()
コード例 #25
0
ファイル: clientapp.py プロジェクト: buffalobill571/typeracer
 def displayall(self):
     clearLayout(self.lay)
     listof = QListWidget()
     stat = copy.deepcopy(self.clientresult)
     stat = sorted(stat)
     stat = stat[::-1]
     for i in stat:
         if type(i[1]) == str:
             i[1], i[0] = i[0], i[1]
         i[1] = str(i[1]) + ' WPM'
         a = '  '.join(i)
         a = QListWidgetItem(a)
         listof.addItem(a)
     self.lay.addWidget(listof)
     goback = QPushButton('Back to chat')
     goback.clicked.connect(self.startserver)
     self.lay.addWidget(goback)
     self.counter = 0
     self.errorcount = 0
     self.countlength = 0
     self.before = ''
     self.typing = []
コード例 #26
0
    def initUI(self):
        but_add_dictionary = QPushButton("Добавить в словарь")
        but_exit = QPushButton("Выход")

        leb1 = QLabel("Ключевые слова")
        leb2 = QLabel("Кандидаты на добавление")

        list_keywords1 = QListWidget()
        list_keywords1.resize(300, 120)

        list_keywords1.addItem("паралельные вычисления");
        list_keywords1.addItem("дисковые массивы");
        list_keywords1.addItem("сертификация");
        list_keywords1.addItem("тестирование");

        list_keywords2 = QListWidget()
        list_keywords2.resize(300, 120)
        
        list_keywords2.addItem("открытое татистическое исследование");
        list_keywords2.addItem("статистическое исследование");



        grid = QGridLayout()
        grid.setSpacing(10)

        grid.addWidget(leb1, 1, 0)
        grid.addWidget(leb2, 1, 1)
        grid.addWidget(list_keywords1, 2, 0)
        grid.addWidget(list_keywords2, 2, 1)
        grid.addWidget(but_add_dictionary, 3, 0)
        grid.addWidget(but_exit, 3, 1)


        self.setLayout(grid)

        self.setGeometry(300, 300, 700, 400)
        self.setWindowTitle('Добавлеие ключевых слов в словарь')
        self.show()
コード例 #27
0
ファイル: languagechooser.py プロジェクト: trawl/gamelog
class LanguageChooser(QDialog):

    newQM = QtCore.pyqtSignal(str)
    supportedLanguages = {'Español': 'es_ES',
                          'English': 'en_GB', 'Català': 'ca_ES'}

    def __init__(self, parent=None):
        super(LanguageChooser, self).__init__(parent)
        self.initUI()

    def initUI(self):
        self.setWindowTitle(i18n(
            "LanguageChooser", "Language"))
        self.widgetLayout = QVBoxLayout(self)
        self.infoLabel = QLabel(self)
        self.infoLabel.setText(i18n(
            "LanguageChooser", "Select the desired language:"))
        self.widgetLayout.addWidget(self.infoLabel)
        self.languageListWidget = QListWidget(self)
        self.widgetLayout.addWidget(self.languageListWidget)
        for language in self.supportedLanguages.keys():
            self.languageListWidget.addItem(language)

        self.buttonBox = QDialogButtonBox(
            QDialogButtonBox.Ok | QDialogButtonBox.Cancel,
            QtCore.Qt.Horizontal, self)
        self.buttonBox.accepted.connect(self.changeLanguage)
        self.buttonBox.rejected.connect(self.close)
        self.widgetLayout.addWidget(self.buttonBox)

    def changeLanguage(self):

        ci = self.languageListWidget.currentItem()
        if ci:
            selected = ci.text()
            fname = self.supportedLanguages[selected]
            self.newQM.emit(fname)
        self.close()
コード例 #28
0
class BWPassengerWindow(QMdiSubWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setBaseSize(400, 400)

        self.centralwidget = QWidget(self)
        self.setWidget(self.centralwidget)

        layout = QHBoxLayout(self.centralwidget)
        self.passengerlist = QListWidget(self.centralwidget)
        layout.addWidget(self.passengerlist)
        self.setWindowTitle("Passengers")

    def reset(self):
        self.passengerlist.clearSelection()
        self.passengerlist.clear()

    def add_passenger(self, passenger_name, passenger_id):
        item = BWEntityEntry(passenger_id,
                             passenger_name)
        self.passengerlist.addItem(item)

    def set_title(self, entityname):
        self.setWindowTitle("Passengers - {0}".format(entityname))
コード例 #29
0
class UIColorSpace(object):
    def __init__(self):
        self.mainDialog = colorspacedialog.ColorSpaceDialog()
        self.mainLayout = QVBoxLayout(self.mainDialog)
        self.formLayout = QFormLayout()
        self.documentLayout = QVBoxLayout()
        self.refreshButton = QPushButton(QIcon(':/icons/refresh.svg'),
                                         "Refresh")
        self.widgetDocuments = QListWidget()
        self.colorModelComboBox = colormodelcombobox.ColorModelComboBox(self)
        self.colorDepthComboBox = colordepthcombobox.ColorDepthComboBox(self)
        self.colorProfileComboBox = colorprofilecombobox.ColorProfileComboBox(
            self)
        self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok
                                          | QDialogButtonBox.Cancel)

        self.kritaInstance = krita.Krita.instance()
        self.documentsList = []
        self.colorModelsList = []
        self.colorDepthsList = []
        self.colorProfilesList = []

        self.refreshButton.clicked.connect(self.refreshButtonClicked)
        self.buttonBox.accepted.connect(self.confirmButton)
        self.buttonBox.rejected.connect(self.mainDialog.close)

        self.mainDialog.setWindowModality(Qt.NonModal)
        self.widgetDocuments.setSelectionMode(QAbstractItemView.MultiSelection)
        self.widgetDocuments.setSizeAdjustPolicy(
            QAbstractScrollArea.AdjustToContents)

    def initialize(self):
        self.loadDocuments()
        self.loadColorModels()
        self.loadColorDepths()
        self.loadColorProfiles()

        self.documentLayout.addWidget(self.widgetDocuments)
        self.documentLayout.addWidget(self.refreshButton)

        self.formLayout.addRow('Documents', self.documentLayout)
        self.formLayout.addRow('Color Model', self.colorModelComboBox)
        self.formLayout.addRow('Color Depth', self.colorDepthComboBox)
        self.formLayout.addRow('Color Profile', self.colorProfileComboBox)

        self.line = QFrame()
        self.line.setFrameShape(QFrame.HLine)
        self.line.setFrameShadow(QFrame.Sunken)

        self.mainLayout.addLayout(self.formLayout)
        self.mainLayout.addWidget(self.line)
        self.mainLayout.addWidget(self.buttonBox)

        self.mainDialog.resize(500, 300)
        self.mainDialog.setWindowTitle("Color Space")
        self.mainDialog.setSizeGripEnabled(True)
        self.mainDialog.show()
        self.mainDialog.activateWindow()

    def loadColorModels(self):
        self.colorModelsList = sorted(self.kritaInstance.colorModels())

        self.colorModelComboBox.addItems(self.colorModelsList)

    def loadColorDepths(self):
        self.colorDepthComboBox.clear()

        colorModel = self.colorModelComboBox.currentText()
        self.colorDepthsList = sorted(
            self.kritaInstance.colorDepths(colorModel))

        self.colorDepthComboBox.addItems(self.colorDepthsList)

    def loadColorProfiles(self):
        self.colorProfileComboBox.clear()

        colorModel = self.colorModelComboBox.currentText()
        colorDepth = self.colorDepthComboBox.currentText()
        self.colorProfilesList = sorted(
            self.kritaInstance.profiles(colorModel, colorDepth))

        self.colorProfileComboBox.addItems(self.colorProfilesList)

    def loadDocuments(self):
        self.widgetDocuments.clear()

        self.documentsList = [
            document for document in self.kritaInstance.documents()
            if document.fileName()
        ]

        for document in self.documentsList:
            self.widgetDocuments.addItem(document.fileName())

    def refreshButtonClicked(self):
        self.loadDocuments()

    def confirmButton(self):
        selectedPaths = [
            item.text() for item in self.widgetDocuments.selectedItems()
        ]
        selectedDocuments = [
            document for document in self.documentsList
            for path in selectedPaths if path == document.fileName()
        ]

        self.msgBox = QMessageBox(self.mainDialog)
        if selectedDocuments:
            self.convertColorSpace(selectedDocuments)
            self.msgBox.setText("The selected documents has been converted.")
        else:
            self.msgBox.setText("Select at least one document.")
        self.msgBox.exec_()

    def convertColorSpace(self, documents):
        for document in documents:
            document.setColorSpace(self.colorModelComboBox.currentText(),
                                   self.colorDepthComboBox.currentText(),
                                   self.colorProfileComboBox.currentText())
コード例 #30
0
class MediaPlayer(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 400, 300)
        self.setWindowTitle('MediaPlayer')
        # Создание центрального виджета и настройка лайоута для поддержания формы интерфейса
        self.centerWindow = QWidget()
        self.mainGridLayout = QGridLayout()
        self.setCentralWidget(self.centerWindow)
        self.centralWidget().setLayout(self.mainGridLayout)
        # кнопки добавления и удаления трека
        self.addBtn = QPushButton('Add File', self)
        self.addBtn.clicked.connect(self.addFile)
        self.removeBtn = QPushButton('Remove File', self)
        self.removeBtn.clicked.connect(self.removeFile)
        self.mainGridLayout.addWidget(self.addBtn, 1, 0)
        self.mainGridLayout.addWidget(self.removeBtn, 1, 1)
        # Кнопка prev
        self.prevBtn = QPushButton('', self)
        prevIcon = QIcon()
        prevIcon.addFile('prev.png')
        # Назначаем иконку кнопке
        self.prevBtn.setIcon(prevIcon)
        # Размещаем кнопку на макете (лайоуте)
        self.mainGridLayout.addWidget(self.prevBtn, 3, 0)
        self.prevBtn.clicked.connect(self.PreviousTrack)
        # Кнопка play
        self.playBtn = QPushButton('', self)
        playIcon = QIcon()
        playIcon.addFile('play.png')
        self.playBtn.setIcon(playIcon)
        self.mainGridLayout.addWidget(self.playBtn, 3, 1)
        self.playBtn.clicked.connect(self.PlayMusic)
        # Кнопка pause
        self.pause = QPushButton('', self)
        pauseIcon = QIcon()
        pauseIcon.addFile('pause.png')
        self.pause.setIcon(pauseIcon)
        self.mainGridLayout.addWidget(self.pause, 3, 2)
        self.pause.clicked.connect(self.PauseMusic)
        # Кнопка next
        self.nextBtn = QPushButton('', self)
        nextIcon = QIcon()
        nextIcon.addFile('next.png')
        self.nextBtn.setIcon(nextIcon)
        self.mainGridLayout.addWidget(self.nextBtn, 3, 3)
        self.nextBtn.clicked.connect(self.NextTrack)
        # создание и настройка таймера и слайдеров
        self.timer = QTimer()
        self.timer.setInterval(100)
        self.timer.timeout.connect(self.Timercheck)
        self.timer.start()
        # Таймлайн
        self.TimeLine = QSlider(Qt.Horizontal, self)
        self.mainGridLayout.addWidget(self.TimeLine, 2, 0, 1, 4)
        self.TimeLine.sliderPressed.connect(self.TLPress)
        self.TimeLine.sliderReleased.connect(self.TLRelease)
        # Громкость
        self.Volume = QSlider(Qt.Vertical, self)
        self.Volume.setValue(50)
        self.mainGridLayout.addWidget(self.Volume, 1, 4, 3, 1)
        self.Volume.valueChanged[int].connect(self.changeVolume)
        # создаем экземпляр медиаплеера
        self.player = QMediaPlayer()
        self.player.stateChanged.connect(self.media_status_changed)
        # Создаем QListWidget() в котором будут хранится имена фалов
        self.listbox = QListWidget()
        self.listbox.doubleClicked.connect(self.PlayMusic)
        # Добавляем наш листбокс в макет  addWidget(ОБЪЕКТ, СТРОКА, СТОЛБЕЦ,  в высоту, в ширину )
        self.mainGridLayout.addWidget(self.listbox, 0, 0, 1, 0)
        self.LoopCheckbox = QCheckBox('Зациклить', self)
        self.mainGridLayout.addWidget(self.LoopCheckbox, 1, 2)
        self.LoopCheckbox.stateChanged.connect(self.CheckboxState)
        # Создаем список в котором будут хранится имена и пути файлов в список будем добавлять объекты типа plItem
        self.playList = []
        # Признак зацикленности плейлиста и флаг изменения состояния плеера
        self.loop = True
        self.IgnoreStateChange = False

    def CheckboxState(self, state):
        if state == Qt.Checked:
            self.IgnoreStateChange = True
        else:
            self.IgnoreStateChange = False

    # функционал таймера, кнопок и ползунков
    def addFile(self):
        # Получаем полное имя (с путём)
        fullFileName = QFileDialog.getOpenFileName(
            self, 'Add File', '', "Music files (*.mp3 *.ogg)")[0]
        # Разбиваем на части, используя re.split(r'[\\/]') из библиотеки работы с регулярными выражениями
        # регулярное выражение r'[\\/]' для того, что бы и виндовс и линукс нормально разбивало путь вин \, лин /
        splittedFileName = re.split(r'[\\/]', fullFileName)
        # Получаем имя файла
        shortFileName = splittedFileName[splittedFileName.__len__() - 1]
        # Добавляем в плейлист (который список) имя и соответсвующий ему полый путь с именем
        self.playList.append(plItem(fullFileName, shortFileName))
        # Добавляем в listbox только имя файла
        self.listbox.addItem(shortFileName)

        # Удаление файла из листбокса
    def removeFile(self):
        if self.listbox.selectedItems():
            self.playList.pop(self.listbox.currentIndex().row())
            self.listbox.takeItem(self.listbox.currentIndex().row())

    # Зависимости таймера и таймлайна
    def TLPress(self):
        self.timer.stop()
        self.player.setPosition(
            (self.player.duration() / 100) * self.TimeLine.value())

    def TLRelease(self):
        self.player.setPosition(
            (self.player.duration() / 100) * self.TimeLine.value())
        self.timer.start()

    def TLMoved(self):
        self.player.setPosition(
            (self.player.duration() / 100) * self.TimeLine.value())

    def Timercheck(self):
        if self.player.duration() != 0:
            pos = self.player.position() / (self.player.duration() / 100)
            self.TimeLine.setValue(pos.__int__())

    # Предыдущий трэк
    def PreviousTrack(self):
        if self.listbox.selectedItems() and (self.listbox.currentRow() != 0):
            self.IgnoreStateChange = True
            self.listbox.setCurrentRow(self.listbox.currentIndex().row() - 1)
            self.PlayMusic()
            self.IgnoreStateChange = False
        elif self.listbox.selectedItems() and (self.listbox.currentRow() == 0):
            self.IgnoreStateChange = True
            self.listbox.setCurrentRow(self.listbox.__len__() - 1)
            self.PlayMusic()
            self.IgnoreStateChange = False

    # Следующий трэк
    def NextTrack(self):
        if self.listbox.selectedItems() and (self.listbox.currentRow() !=
                                             self.listbox.__len__() - 1):
            self.IgnoreStateChange = True
            self.listbox.setCurrentRow(self.listbox.currentIndex().row() + 1)
            self.PlayMusic()
            self.IgnoreStateChange = False
        elif self.listbox.selectedItems() and (self.listbox.currentRow()
                                               == self.listbox.__len__() - 1):
            self.IgnoreStateChange = True
            self.listbox.setCurrentRow(0)
            self.PlayMusic()
            self.IgnoreStateChange = False

    # громкость, play, pause
    def changeVolume(self, value):
        self.player.setVolume(value)

    def PauseMusic(self):
        self.player.pause()

    def PlayMusic(self):
        if self.listbox.selectedItems():
            file = QUrl.fromLocalFile(
                self.playList[self.listbox.currentIndex().row()].fPath)
            content = QMediaContent(file)
            self.player.setMedia(content)
            self.player.setVolume(self.Volume.value())
            self.player.play()
        elif self.listbox.__len__() > 0:
            self.listbox.setCurrentRow(0)
            file = QUrl.fromLocalFile(
                self.playList[self.listbox.currentIndex().row()].fPath)
            content = QMediaContent(file)
            self.player.setMedia(content)
            self.player.setVolume(self.Volume.value())
            self.player.play()

    # Переход на след трек
    def media_status_changed(self, status):
        if not self.IgnoreStateChange:
            if status == QMediaPlayer.StoppedState:
                if (self.listbox.currentIndex().row()
                        == self.listbox.__len__() - 1) and self.loop:
                    self.listbox.setCurrentRow(0)
                    file = QUrl.fromLocalFile(
                        self.playList[self.listbox.currentIndex().row()].fPath)
                    content = QMediaContent(file)
                    self.player.setMedia(content)
                    self.player.play()
                elif self.listbox.currentIndex().row(
                ) < self.listbox.__len__() - 1:
                    self.listbox.setCurrentRow(
                        self.listbox.currentIndex().row() + 1)
                    file = QUrl.fromLocalFile(
                        self.playList[self.listbox.currentIndex().row()].fPath)
                    content = QMediaContent(file)
                    self.player.setMedia(content)
                    self.player.play()
        if self.IgnoreStateChange:
            self.player.play()
コード例 #31
0
ファイル: gui.py プロジェクト: simon-the-shark/quizzo_learn
class MyTestsWindow(QWidget):
    """ shows the list of user`s tests """

    def __init__(self):
        super().__init__()
        self.setWindowIcon(QIcon(os.path.join(os.pardir, "res", "img", "logo.png")))
        self.setWindowTitle("QUIZZO LEARN")
        self.resize(900, 650)
        center(self)
        self.load_ui()

    def init_ui(self):
        self.show()

    def load_ui(self):
        box = QVBoxLayout()

        back_button = QPushButton("<= WRÓĆ")
        back_button.setStyleSheet("background-color: YellowGreen; color:purple")
        back_button.clicked.connect(self.back_button_act)

        font = QFont("Serif", 20)
        label = QLabel("MOJE TESTY:")
        label.setFont(font)
        label.setStyleSheet("color:AntiqueWhite; background-color:darkorange")

        self.QList = QListWidget()
        self.QList.setStyleSheet("background-color:PeachPuff ")

        hbox2 = QHBoxLayout()
        hbox2.addWidget(back_button)
        hbox2.addStretch(4)

        box.addWidget(label, 1)
        box.addLayout(hbox2, 1)
        box.addWidget(self.QList, 8)

        self.setLayout(box)

        self.load_tests()

    def back_button_act(self):
        self.close()
        menu_window.show()

    def load_tests(self):
        tests = quizzo_learn.files_interactions.list_of_tests(os.path.join(os.pardir, "res", "my_tests"))
        for test in tests:
            item = QListWidgetItem()
            item.name = test
            test_widget = QItemTest(test)
            item.setSizeHint(test_widget.sizeHint())

            self.QList.addItem(item)
            self.QList.setItemWidget(item, test_widget)

    def refresh(self):
        self.QList.clear()
        self.load_tests()

    def deleting(self, name):
        i = 0
        i2 = self.QList.count()
        while i < i2:
            item = self.QList.item(i)
            if item.name == name:
                self.QList.removeItemWidget(item)
                quizzo_learn.files_interactions.delete_file(
                    os.path.join(os.pardir, "res", "my_tests", name + ".test"))
                build_big_test_window.refresh()
                break
            i += 1

    def start_test(self, name):
        dicts_of_questions = quizzo_learn.files_interactions.read_test(
            os.path.join(os.pardir, "res", "my_tests", name + ".test"))
        self.close()
        start_window.label.setText(name)
        start_window.init_ui(dicts_of_questions)
コード例 #32
0
ファイル: dbListWidget.py プロジェクト: creepystaisy/OOP_4
 def addItem(self, code, text):
     self.__rowCode.appendRowCode(self.count(), code)
     QListWidget.addItem(self, text)
コード例 #33
0
ファイル: custom.py プロジェクト: yeyeye0529/novelWriter
class QuotesDialog(QDialog):

    selectedQuote = ""

    def __init__(self, theParent=None, currentQuote="\""):
        QDialog.__init__(self, parent=theParent)

        self.mainConf = nw.CONFIG

        self.outerBox = QVBoxLayout()
        self.innerBox = QHBoxLayout()
        self.labelBox = QVBoxLayout()

        self.selectedQuote = currentQuote

        qMetrics = QFontMetrics(self.font())
        pxW = 7 * qMetrics.boundingRectChar("M").width()
        pxH = 7 * qMetrics.boundingRectChar("M").height()
        pxH = 7 * qMetrics.boundingRectChar("M").height()

        lblFont = self.font()
        lblFont.setPointSizeF(4 * lblFont.pointSizeF())

        # Preview Label
        self.previewLabel = QLabel(currentQuote)
        self.previewLabel.setFont(lblFont)
        self.previewLabel.setFixedSize(QSize(pxW, pxH))
        self.previewLabel.setAlignment(Qt.AlignCenter)
        self.previewLabel.setFrameStyle(QFrame.Box | QFrame.Plain)

        # Quote Symbols
        self.listBox = QListWidget()
        self.listBox.itemSelectionChanged.connect(self._selectedSymbol)

        minSize = 100
        for sKey, sLabel in nwQuotes.SYMBOLS.items():
            theText = "[ %s ] %s" % (sKey, sLabel)
            minSize = max(minSize, qMetrics.boundingRect(theText).width())
            qtItem = QListWidgetItem(theText)
            qtItem.setData(Qt.UserRole, sKey)
            self.listBox.addItem(qtItem)
            if sKey == currentQuote:
                self.listBox.setCurrentItem(qtItem)

        self.listBox.setMinimumWidth(minSize + self.mainConf.pxInt(40))
        self.listBox.setMinimumHeight(self.mainConf.pxInt(150))

        # Buttons
        self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok
                                          | QDialogButtonBox.Cancel)
        self.buttonBox.accepted.connect(self._doAccept)
        self.buttonBox.rejected.connect(self._doReject)

        # Assemble
        self.labelBox.addWidget(self.previewLabel, 0, Qt.AlignTop)
        self.labelBox.addStretch(1)

        self.innerBox.addLayout(self.labelBox)
        self.innerBox.addWidget(self.listBox)

        self.outerBox.addLayout(self.innerBox)
        self.outerBox.addWidget(self.buttonBox)

        self.setLayout(self.outerBox)

        return

    ##
    #  Slots
    ##

    def _selectedSymbol(self):
        """Update the preview label and the selected quote style.
        """
        selItems = self.listBox.selectedItems()
        if selItems:
            theSymbol = selItems[0].data(Qt.UserRole)
            self.previewLabel.setText(theSymbol)
            self.selectedQuote = theSymbol
        return

    def _doAccept(self):
        """Ok button clicked.
        """
        self.accept()
        return

    def _doReject(self):
        """Cancel button clicked.
        """
        self.reject()
        return
コード例 #34
0
class RSSReaderWidget(QWidget):
    def __init__(self):
        super(RSSReaderWidget, self).__init__()

        self.feed_file_path = os.path.expanduser(
            "~/.emacs.d/eaf/rss-reader/feeds.json")

        self.feed_area = QWidget()
        self.feed_list = QListWidget()
        self.feed_list.setStyleSheet("""QListWidget{background: #4D5250;}""")
        panel_layout = QVBoxLayout()
        panel_layout.setSpacing(0)
        panel_layout.setContentsMargins(0, 0, 0, 0)
        panel_layout.addWidget(self.feed_list)
        self.feed_area.setLayout(panel_layout)

        self.article_area = QWidget()
        self.article_list = QListWidget()
        self.article_list.verticalScrollBar().setStyleSheet(
            "QScrollBar {width:0px;}")
        article_layout = QVBoxLayout()
        article_layout.setSpacing(0)
        article_layout.setContentsMargins(0, 0, 0, 0)

        self.browser = BrowserView()

        article_layout.addWidget(self.article_list)
        article_layout.addWidget(self.browser)

        article_layout.setStretchFactor(self.article_list, 1)
        article_layout.setStretchFactor(self.browser, 3)

        self.article_area.setLayout(article_layout)

        self.welcome_page = QWidget()
        self.welcome_page_box = QVBoxLayout()
        self.welcome_page_box.setSpacing(10)
        self.welcome_page_box.setContentsMargins(0, 0, 0, 0)

        welcome_title_label = QLabel("Welcome to EAF RSS Reader!")
        welcome_title_label.setFont(QFont('Arial', 24))
        welcome_title_label.setStyleSheet(
            "QLabel {color: black; font-weight: bold; margin: 20px;}")
        welcome_title_label.setAlignment(Qt.AlignHCenter)

        add_subscription_label = QLabel("Press key 'a' to add subscription")
        add_subscription_label.setFont(QFont('Arial', 20))
        add_subscription_label.setStyleSheet("QLabel {color: #333;}")
        add_subscription_label.setAlignment(Qt.AlignHCenter)

        self.welcome_page_box.addStretch(1)
        self.welcome_page_box.addWidget(welcome_title_label)
        self.welcome_page_box.addWidget(add_subscription_label)
        self.welcome_page_box.addStretch(1)

        self.welcome_page.setLayout(self.welcome_page_box)

        self.right_area = QStackedWidget()
        self.right_area.addWidget(self.welcome_page)
        self.right_area.addWidget(self.article_area)

        self.right_area.setCurrentIndex(0)

        hbox = QHBoxLayout()
        hbox.setSpacing(0)
        hbox.setContentsMargins(0, 0, 0, 0)

        hbox.addWidget(self.feed_area)
        hbox.addWidget(self.right_area)

        hbox.setStretchFactor(self.feed_area, 1)
        hbox.setStretchFactor(self.right_area, 3)

        self.setLayout(hbox)

        self.feed_list.itemActivated.connect(self.handle_feed)
        self.article_list.itemActivated.connect(self.handle_article)

        self.feed_object_dict = {}

        self.fetch_feeds()

    def fetch_feeds(self):
        if os.path.exists(self.feed_file_path):
            try:
                with open(self.feed_file_path, "r") as feed_file:
                    feed_dict = json.loads(feed_file.read())
                    for index, feed_link in enumerate(feed_dict):
                        self.fetch_feed(feed_link, index == 0)
            except Exception:
                pass

    def handle_feed(self, feed_item):
        if feed_item.feed_link in self.feed_object_dict:
            self.update_article_area(
                self.feed_object_dict[feed_item.feed_link])

    def handle_article(self, article_item):
        self.browser.setUrl(QUrl(article_item.post_link))

    def fetch_feed(self, feed_link, refresh_ui):
        fetchThread = FetchRSSThread(feed_link)
        fetchThread.fetch_rss.connect(
            lambda f_object, f_link, f_title: self.handle_rss(
                f_object, f_link, f_title, refresh_ui))
        fetchThread.invalid_rss.connect(self.handle_invalid_rss)

        object_name = "feed_thread_" + feed_link
        setattr(self, object_name, fetchThread)
        getattr(self, object_name).start()

    def add_subscription(self, feed_link):
        if not self.feed_is_exits(feed_link):
            self.fetch_feed(feed_link, True)
        else:
            self.message_to_emacs.emit("Feed has exists: " + feed_link)

    def feed_is_exits(self, feed_link):
        if not os.path.exists(self.feed_file_path):
            return False

        try:
            with open(self.feed_file_path, "r") as feed_file:
                feed_dict = json.loads(feed_file.read())
                return feed_link in feed_dict
        except Exception:
            import traceback
            traceback.print_exc()

            return False

    def save_feed(self, feed_link, feed_title):
        if not os.path.exists(self.feed_file_path):
            basedir = os.path.dirname(self.feed_file_path)
            if not os.path.exists(basedir):
                os.makedirs(basedir)

            with open(self.feed_file_path, "a"):
                os.utime(self.feed_file_path, None)

        try:
            with open(self.feed_file_path, "r") as feed_file:
                feed_dict = json.loads(feed_file.read())
                if feed_link not in feed_dict:
                    feed_dict[feed_link] = {"title": feed_title}

                    with open(self.feed_file_path, "w") as f:
                        f.write(json.dumps(feed_dict))

                    self.message_to_emacs.emit("Add feed: " + feed_link)
        except Exception:
            import traceback
            traceback.print_exc()

            with open(self.feed_file_path, "w") as f:
                f.write(json.dumps({feed_link: {"title": feed_title}}))

            self.message_to_emacs.emit("Add feed: " + feed_link)

    def handle_rss(self, feed_object, feed_link, feed_title, refresh_ui):
        self.feed_object_dict[feed_link] = feed_object

        self.save_feed(feed_link, feed_title)

        self.right_area.setCurrentIndex(1)

        feed_item = QListWidgetItem(self.feed_list)
        feed_item.feed_link = feed_link
        feed_item_widget = RSSFeedItem(feed_object, len(feed_object.entries))
        feed_item.setSizeHint(feed_item_widget.sizeHint())
        self.feed_list.addItem(feed_item)
        self.feed_list.setItemWidget(feed_item, feed_item_widget)

        if refresh_ui:
            self.update_article_area(feed_object)

    def update_article_area(self, feed_object):
        self.browser.setUrl(QUrl(feed_object.entries[0].link))

        self.article_list.clear()
        for post in feed_object.entries:
            item_widget = RSSArticleItem(post)
            item = QListWidgetItem(self.article_list)
            item.post_link = item_widget.post_link
            item.setSizeHint(item_widget.sizeHint())
            self.article_list.addItem(item)
            self.article_list.setItemWidget(item, item_widget)

    def handle_invalid_rss(self, feed_link):
        self.message_to_emacs.emit("Invalid feed link: " + feed_link)
コード例 #35
0
ファイル: plotter.py プロジェクト: HolgerGraef/P13pt
class Plotter(QWidget):
    def __init__(self, parent=None):
        super(Plotter, self).__init__(parent)

        self.header = []
        self.data = []

        self.xvar = QListWidget(self)
        self.yvar = QListWidget(self)

        self.figure = plt.figure()
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas, self)
        self.btn_clear = QPushButton("Clear data", self)

        self.xvar.itemClicked.connect(self.plot)
        self.yvar.itemClicked.connect(self.plot)
        self.btn_clear.clicked.connect(self.clear)

        # set the layout
        configpanelayout = QGridLayout()
        configpanelayout.addWidget(QLabel('<b>X variable:</b>'), 0, 0)
        configpanelayout.addWidget(self.xvar, 1, 0)
        configpanelayout.addWidget(QLabel('<b>Y variable:</b>'), 0, 1)
        configpanelayout.addWidget(self.yvar, 1, 1)

        toolbarlayout = QHBoxLayout()
        toolbarlayout.addWidget(self.toolbar)
        toolbarlayout.addWidget(self.btn_clear)

        layout = QVBoxLayout()
        layout.addLayout(configpanelayout)
        layout.addLayout(toolbarlayout)
        layout.addWidget(self.canvas)
        layout.setStretch(0, 1)
        layout.setStretch(2, 2)
        self.setLayout(layout)

    @pyqtSlot()
    def clear(self):
        self.data = []
        self.plot()

    @pyqtSlot()
    def plot(self):
        # clear the plotting window
        ax = self.figure.add_subplot(111)
        ax.clear()

        # check if data to plot is available
        if self.data != []:
            # check if the user chose valid variables to plot
            ix = self.xvar.currentRow()
            iy = self.yvar.currentRow()
            if ix >= 0 and iy >= 0:
                # if yes, plot stuff and update axes lables
                ax.plot(np.asarray(self.data).T[ix], np.asarray(self.data).T[iy], '*-')
                ax.set_xlabel(self.header[ix])
                ax.set_ylabel(self.header[iy])

        self.canvas.draw()

    @pyqtSlot(list)
    def set_header(self, header):
        self.header = header
        self.xvar.clear()
        self.yvar.clear()
        ax = self.figure.add_subplot(111)
        ax.clear()
        self.canvas.draw()
        for col in header:
            self.xvar.addItem(col)
            self.yvar.addItem(col)

    @pyqtSlot(list)
    def new_data_handler(self, row):
        self.data.append(row)
        self.plot()
コード例 #36
0
class ConfDialog(QWidget):
    """config dialog"""
    def __init__(self, mainwin):
        super(ConfDialog, self).__init__()
        self._app = QApplication.instance()  # 获取app实例
        self.setWindowFlags(Qt.Tool | Qt.WindowStaysOnTopHint)
        self.win = mainwin
        self.initUI()

    def initUI(self):
        mainLayout = QVBoxLayout()
        layH1 = QHBoxLayout()
        layH2 = QHBoxLayout()
        self.conflist = QListWidget()
        self.stack = QStackedWidget()
        layH1.addWidget(self.conflist)
        layH1.addWidget(self.stack)
        self.okbtn = QPushButton(self.tr("OK"))
        self.cancelbtn = QPushButton(self.tr("Cancel"))
        layH2.addStretch(1)
        layH2.addWidget(self.okbtn)
        layH2.addWidget(self.cancelbtn)
        mainLayout.addLayout(layH1)
        mainLayout.addLayout(layH2)
        self.setLayout(mainLayout)

        # list
        self.conflist.addItem(self.tr("General"))
        self.conflist.addItem(self.tr("Editor"))
        self.conflist.setMaximumWidth(150)
        # general
        w = QWidget()
        layw = QVBoxLayout()

        g = QGroupBox(self.tr("General"))
        glayout = QFormLayout()
        label1 = QLabel(self.tr("select UI language:"))
        self.langCombo = QComboBox()
        self.setLangItems(self.langCombo)  # .addItems(self.getLangList())
        self.langCombo.setMinimumWidth(150)
        label2 = QLabel(self.tr("Number of recent files:"))
        self.recentcountspin = QSpinBox()
        self.recentcountspin.setMinimum(1)
        self.recentcountspin.setMaximum(30)
        label3 = QLabel(self.tr("Font Size:"))
        self.fontsizespin = QSpinBox()
        self.fontsizespin.setMinimum(1)
        self.fontsizespin.setMaximum(30)

        glayout.addRow(label1, self.langCombo)
        glayout.addRow(label2, self.recentcountspin)
        glayout.addRow(label3, self.fontsizespin)
        g.setLayout(glayout)

        layw.addWidget(g)
        layw.addStretch(1)
        w.setLayout(layw)
        self.stack.addWidget(w)

        # editor
        from ui.editor.settings import EditorSettings
        w = EditorSettings(self.win.editor)
        self.stack.addWidget(w)

        self.conflist.currentRowChanged.connect(self.stack.setCurrentIndex)
        self.cancelbtn.clicked.connect(self.close)
        self.cancelbtn.setVisible(False)
        self.okbtn.clicked.connect(self.close)

        # action
        self.fontsizespin.valueChanged.connect(
            self.win.editor.font().setPointSize)

        def setCount(x):
            self.win.recent.maxcount = x

        self.recentcountspin.valueChanged.connect(setCount)
        self.langCombo.currentIndexChanged.connect(self.chLang)

    def setLangItems(self, combo):
        from i18n.language import Language
        langs = Language.getLangs()
        for l in langs:
            combo.addItem(l["nativename"], l["lang"])
        return True

    def chLang(self):
        # print("Change language to "+lang)
        # try:
        #     if lang.lower()=="english":
        #         self._app.removeTranslator(self.win.trans)
        #         return
        #     self.win.trans.load("i18n-"+lang+".qm")
        #     self._app.installTranslator(self.win.trans)
        #     #self._app.retranslateUi(self)# 重新翻译界面
        # except Exception as Argument:
        #     print(Argument)
        lang = self.langCombo.currentData()
        print("Setting Language to " + lang)
        self.win.config.getSec("general")["language"] = lang
        print("restart soft to enable.")

    def show(self):
        # default value
        self.fontsizespin.setValue(self.win.editor.font().pointSize())
        self.recentcountspin.setValue(self.win.recent.maxcount)
        lang = self.win.config.getSec("general").get("language", None)
        if lang is None:
            lang = "en"
        from i18n.language import Language
        for l in Language.getLangs():
            if l["lang"] == lang:
                self.langCombo.setCurrentText(l["nativename"])
                break
        super().show()
コード例 #37
0
class Commision_Tab(QWidget):
    def __init__(self):
        super().__init__()

        # Widedgets
        self.info_label = QLabel('Please choose the spectrum, angular distribution and spatial distribution files '
                                 'of your beam.')
        self.files_group = QGroupBox('Browse Files')
        self.spectrum_button = QPushButton('Choose Spectrum File')
        self.spectrum_line = QLineEdit()
        self.angular_button = QPushButton('Choose Angular File')
        self.angular_line = QLineEdit()
        self.spatial_button = QPushButton('Choose Spatial File')
        self.spatial_line = QLineEdit()
        self.notice_label = QLabel('Attention: This operation will only generate a temporary beam in the input')
        self.commission_group = QGroupBox('Change Commissioned Beams')
        self.commission_text = QListWidget()
        self.organize_widget = QWidget()
        self.load_button = QPushButton('Load Beam')
        self.load_button.setDisabled(True)
        self.add_button = QPushButton('Add Beam')
        self.delete_button = QPushButton('Delete Beam')
        self.delete_button.setDisabled(True)
        self.new_beam_label = QLabel('New Beam Name')
        self.new_beam_line = QLineEdit()

        # Layouts
        self.main_layout = QVBoxLayout()
        self.files_layout = QGridLayout()
        self.organize_layout = QGridLayout()
        self.commission_layout = QHBoxLayout()

        self.layout_init()
        self.pushbutton_init()
        self.listwidget_init()

    def layout_init(self):
        self.files_layout.addWidget(self.spectrum_button, 0, 0)
        self.files_layout.addWidget(self.spectrum_line, 0, 1)
        self.files_layout.addWidget(self.angular_button, 1, 0)
        self.files_layout.addWidget(self.angular_line, 1, 1)
        self.files_layout.addWidget(self.spatial_button, 2, 0)
        self.files_layout.addWidget(self.spatial_line, 2, 1)
        self.files_group.setLayout(self.files_layout)
        self.commission_layout.addWidget(self.commission_text)
        self.commission_layout.addWidget(self.organize_widget)
        self.commission_group.setLayout(self.commission_layout)
        self.organize_layout.addWidget(self.load_button, 0, 0)
        self.organize_layout.addWidget(self.delete_button, 0, 1)
        self.organize_layout.addWidget(self.add_button, 2, 0)
        self.organize_layout.addWidget(self.new_beam_label, 1, 0)
        self.organize_layout.addWidget(self.new_beam_line, 1, 1)
        self.organize_widget.setLayout(self.organize_layout)
        self.main_layout.addWidget(self.info_label)
        self.main_layout.addWidget(self.files_group)
        self.main_layout.addWidget(self.notice_label)
        self.main_layout.addWidget(self.commission_group)
        self.setLayout(self.main_layout)

    def pushbutton_init(self):
        self.spectrum_button.clicked.connect(self.get_spectrum)
        self.angular_button.clicked.connect(self.get_angular)
        self.spatial_button.clicked.connect(self.get_spatial)
        self.add_button.clicked.connect(self.add_new_beam)
        self.delete_button.clicked.connect(self.delete_beam)
        self.load_button.clicked.connect(self.load_beam)

    def listwidget_init(self):
        self.beam_list = beam_dict.list_beams()
        for i in range(len(self.beam_list)):
            QListWidgetItem(self.beam_list[i], self.commission_text)
        self.commission_text.itemSelectionChanged.connect(self.beam_selected)

    def beam_init(self):
        glv.set_value('spectrum file', self.spectrum_line.text())
        glv.set_value('angular file', self.angular_line.text())
        glv.set_value('spatial file', self.spatial_line.text())
        glv.set_value('new beam name', self.new_beam_line.text())

    def get_spectrum(self):
        try:
            f = Finddir().find_beam_file()
            if f == '':
                pass
            else:
                self.spectrum_line.setText(str(f))
        except TypeError:
            pass

    def get_angular(self):
        try:
            f = Finddir().find_beam_file()
            if f == '':
                pass
            else:
                self.angular_line.setText(str(f))
        except TypeError:
            pass

    def get_spatial(self):
        try:
            f = Finddir().find_beam_file()
            if f == '':
                pass
            else:
                self.spatial_line.setText(str(f))
        except TypeError:
            pass

    def beam_selected(self):
        self.delete_button.setDisabled(False)
        self.load_button.setDisabled(False)

    def load_beam(self):
        beam_list = beam_dict.list_beams()
        selected_index = self.commission_text.currentRow()
        beam_load = beam_list[selected_index]
        beam_feature = beam_dict.get_beam(beam_load)
        self.spectrum_line.setText(beam_feature[0])
        self.angular_line.setText(beam_feature[1])
        self.spatial_line.setText(beam_feature[2])

    def delete_beam(self):
        # need to reload the beam list, otherwise the list index can be used only once
        beam_list = beam_dict.list_beams()
        selected_index = self.commission_text.currentRow()
        beam_delete = beam_list[selected_index]
        beam_dict.delete_beam(beam_delete)
        beam_dict.update_beam()
        beam_dict.update_list()
        self.commission_text.takeItem(self.commission_text.currentRow())

    def add_new_beam(self):
        self.beam_init()
        if Beam_Check().add_new_check():
            name = glv.get_value('new beam name')
            spectrum = glv.get_value('spectrum file')
            angular = glv.get_value('angular file')
            spatial = glv.get_value('spatial file')
            beam_features = [spectrum, angular, spatial]
            beam_dict.add_beam(name, beam_features)
            self.commission_text.addItem(name)
            beam_dict.update_beam()
            beam_dict.update_list()
        else:
            pass
コード例 #38
0
ファイル: docsplit.py プロジェクト: countjocular/novelWriter
class GuiDocSplit(QDialog):

    def __init__(self, theParent, theProject):
        QDialog.__init__(self, theParent)

        logger.debug("Initialising GuiDocSplit ...")

        self.mainConf   = nw.CONFIG
        self.theParent  = theParent
        self.theProject = theProject
        self.sourceItem = None

        self.outerBox = QHBoxLayout()
        self.innerBox = QVBoxLayout()
        self.setWindowTitle("Split Document")
        self.setLayout(self.outerBox)

        self.guiDeco = self.theParent.theTheme.loadDecoration("split",(64,64))

        self.outerBox.addWidget(self.guiDeco, 0, Qt.AlignTop)
        self.outerBox.addLayout(self.innerBox)

        self.doMergeForm = QGridLayout()
        self.doMergeForm.setContentsMargins(0,0,0,0)

        self.listBox = QListWidget()
        self.listBox.setDragDropMode(QAbstractItemView.NoDragDrop)

        self.splitLevel = QComboBox(self)
        self.splitLevel.addItem("Split on Header Level 1 (Title)",      1)
        self.splitLevel.addItem("Split up to Header Level 2 (Chapter)", 2)
        self.splitLevel.addItem("Split up to Header Level 3 (Scene)",   3)
        self.splitLevel.addItem("Split up to Header Level 4 (Section)", 4)
        self.splitLevel.setCurrentIndex(2)
        self.splitLevel.currentIndexChanged.connect(self._populateList)

        self.splitButton = QPushButton("Split")
        self.splitButton.clicked.connect(self._doSplit)

        self.closeButton = QPushButton("Close")
        self.closeButton.clicked.connect(self._doClose)

        self.doMergeForm.addWidget(self.listBox,     0, 0, 1, 3)
        self.doMergeForm.addWidget(self.splitLevel,  1, 0, 1, 3)
        self.doMergeForm.addWidget(self.splitButton, 2, 1)
        self.doMergeForm.addWidget(self.closeButton, 2, 2)

        self.innerBox.addLayout(self.doMergeForm)

        self.rejected.connect(self._doClose)
        self.show()

        self._populateList()

        logger.debug("GuiDocSplit initialisation complete")

        return

    ##
    #  Buttons
    ##

    def _doSplit(self):
        """Perform the split of the file, create a new folder in the
        same parent folder, and multiple files depending on split level
        settings. The old file is not removed in the merge process, and
        must be deleted manually.
        """

        logger.verbose("GuiDocSplit split button clicked")

        if self.sourceItem is None:
            self.theParent.makeAlert((
                "No source document selected. Nothing to do."
            ), nwAlert.ERROR)
            return

        srcItem = self.theProject.getItem(self.sourceItem)
        if srcItem is None:
            self.theParent.makeAlert((
                "Could not parse source document."
            ), nwAlert.ERROR)
            return

        theDoc   = NWDoc(self.theProject, self.theParent)
        theText  = theDoc.openDocument(self.sourceItem, False)
        theLines = theText.splitlines()
        nLines   = len(theLines)
        theLines.insert(0, "%Split Doc")
        logger.debug(
            "Splitting document %s with %d lines" % (self.sourceItem,nLines)
        )

        finalOrder = []
        for i in range(self.listBox.count()):
            listItem = self.listBox.item(i)
            wTitle = listItem.text()
            lineNo = listItem.data(Qt.UserRole)
            finalOrder.append([wTitle, lineNo, nLines])
            if i > 0:
                finalOrder[i-1][2] = lineNo

        if len(finalOrder) == 0:
            self.theParent.makeAlert((
                "No headers found. Nothing to do."
            ), nwAlert.ERROR)
            return

        fHandle = self.theProject.newFolder(srcItem.itemName, srcItem.itemClass, srcItem.parHandle)
        self.theParent.treeView.revealTreeItem(fHandle)
        logger.verbose("Creating folder %s" % fHandle)

        for wTitle, iStart, iEnd in finalOrder:

            itemLayout = nwItemLayout.NOTE
            if srcItem.itemClass == nwItemClass.NOVEL:
                if wTitle.startswith("# "):
                    itemLayout = nwItemLayout.PARTITION
                elif wTitle.startswith("## "):
                    itemLayout = nwItemLayout.CHAPTER
                elif wTitle.startswith("### "):
                    itemLayout = nwItemLayout.SCENE
                elif wTitle.startswith("#### "):
                    itemLayout = nwItemLayout.PAGE

            wTitle = wTitle.lstrip("#")
            wTitle = wTitle.strip()

            nHandle = self.theProject.newFile(wTitle, srcItem.itemClass, fHandle)
            newItem = self.theProject.getItem(nHandle)
            newItem.setLayout(itemLayout)
            logger.verbose(
                "Creating new document %s with text from line %d to %d" % (nHandle, iStart, iEnd-1)
            )

            theText = "\n".join(theLines[iStart:iEnd])
            theDoc.openDocument(nHandle, False)
            theDoc.saveDocument(theText)
            theDoc.clearDocument()
            self.theParent.treeView.revealTreeItem(nHandle)

        self.close()

        return

    def _doClose(self):
        """Close the dialog window without doing anything.
        """
        logger.verbose("GuiDocSplit close button clicked")
        self.close()
        return

    ##
    #  Internal Functions
    ##

    def _populateList(self):
        """Get the item selected in the tree, check that it is a folder,
        and try to find all files associated with it. The valid files
        are then added to the list view in order. The list itself can be
        reordered by the user.
        """

        if self.sourceItem is None:
            self.sourceItem = self.theParent.treeView.getSelectedHandle()

        if self.sourceItem is None:
            return

        nwItem = self.theProject.getItem(self.sourceItem)
        if nwItem is None:
            return
        if nwItem.itemType is not nwItemType.FILE:
            self.theParent.makeAlert((
                "Element selected in the project tree must be a file."
            ), nwAlert.ERROR)
            return

        self.listBox.clear()
        theDoc  = NWDoc(self.theProject, self.theParent)
        theText = theDoc.openDocument(self.sourceItem, False)

        spLevel = self.splitLevel.currentData()
        logger.debug("Scanning document %s for headings level <= %d" % (self.sourceItem, spLevel))

        lineNo = 0
        for aLine in theText.splitlines():

            lineNo += 1
            onLine  = 0

            if aLine.startswith("# ") and spLevel >= 1:
                onLine = lineNo
            elif aLine.startswith("## ") and spLevel >= 2:
                onLine = lineNo
            elif aLine.startswith("### ") and spLevel >= 3:
                onLine = lineNo
            elif aLine.startswith("#### ") and spLevel >= 4:
                onLine = lineNo

            if onLine > 0:
                newItem = QListWidgetItem()
                newItem.setText(aLine.strip())
                newItem.setData(Qt.UserRole, onLine)
                self.listBox.addItem(newItem)

        return
コード例 #39
0
class NetworksBrowserWindow(MainWindow):
    def __init__(self):
        super(NetworksBrowserWindow, self).__init__()
        self.browserEngineView = WebEngineView()
        self.browserEngineView.setUrl(Url(homePageUrl))
        self.setCentralWidget(self.browserEngineView)
        self.showMaximized()

        self.createNavBar()
        self.createDockWidget()

        self.browserEngineView.urlChanged.connect(self.updateUrl)

    def createDockWidget(self) -> None:
        dockWidget = DockWidget("Executed Operations", self)
        self.addDockWidget(Qt.RightDockWidgetArea, dockWidget)

        self.listWidget = ListWidget()
        dockWidget.setWidget(self.listWidget)
        dockWidget.setFloating(False)
        self.listWidget.setSpacing(10)

    def createNavBar(self) -> None:
        navbar = NavBar()
        self.addToolBar(navbar)
        self.addToolBarBreak()

        backButton = Action("Go Back", self)
        backButton.triggered.connect(self.browserEngineView.back)

        forwardButton = Action("Go Forward", self)
        forwardButton.triggered.connect(self.browserEngineView.forward)

        reloadButton = Action("Reload Page", self)
        reloadButton.triggered.connect(self.browserEngineView.reload)

        homeButton = Action("Go to Home", self)
        homeButton.triggered.connect(self.navigateHome)

        networkDetailsButton = Action("Network Details", self)
        networkDetailsButton.triggered.connect(self.fetchNetworkDetails)

        ipConfigButton = Action("IP Config", self)
        ipConfigButton.triggered.connect(self.fetchIpConfig)

        navbar.addActions([
            backButton,
            forwardButton,
            reloadButton,
            homeButton,
            networkDetailsButton,
            ipConfigButton,
        ])
        self.urlBar = LineEdit()
        self.urlBar.returnPressed.connect(self.navigateToUrl)
        navbar.addWidget(self.urlBar)

    def navigateHome(self) -> None:
        self.listWidget.addItem("Navigating Back to Home")
        self.browserEngineView.setUrl(Url(homePageUrl))
        self.listWidget.addItem("Navigation Back to Home Ended")

    def navigateToUrl(self) -> None:
        self.listWidget.addItem("Navigating to given url")
        windowUrl = self.urlBar.text()
        self.browserEngineView.setUrl(Url(windowUrl))
        self.listWidget.addItem("Navigation to given url Ended")

    def updateUrl(self, query: Any) -> None:
        self.listWidget.addItem("Updating url")
        self.urlBar.setText(query.toString())
        self.listWidget.addItem("Update operation on url Ended")

    def fetchIpConfig(self) -> None:
        self.listWidget.addItem("Fetching System's IP Config")
        executeSystemCommand("ipconfig")

    def fetchNetworkDetails(self) -> None:
        self.listWidget.addItem("Fetching Network Details")
        try:
            ipAddress = fetchHostIpAddress()
            print("\nWindow IP address is :\t", ipAddress)
            windowUrl = self.urlBar.text()
            formattedUrl = windowUrl[windowUrl.find("www.") +
                                     4:windowUrl.rfind("/")]

            tracertWithUrl = "tracert " + formattedUrl
            self.listWidget.addItem("Executing '" + tracertWithUrl + "'")
            executeSystemCommand(tracertWithUrl)
        except:
            self.listWidget.addItem("Could not Fetch Network Details")
コード例 #40
0
ファイル: citylistdlg.py プロジェクト: pmattern/meteo-qt
class CityListDlg(QDialog):
    citieslist_signal = pyqtSignal([list])

    def __init__(self, citylist, accurate_url, appid, parent=None):
        super(CityListDlg, self).__init__(parent)
        self.citylist = citylist
        self.accurate_url = accurate_url
        self.appid = appid
        self.listWidget = QListWidget()
        self.listWidget.addItems(self.citylist)
        buttonLayout = QVBoxLayout()
        self.buttonBox = QDialogButtonBox()
        self.buttonBox.setOrientation(Qt.Horizontal)
        self.buttonBox.setStandardButtons(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        self.buttonBox.rejected.connect(self.reject)
        self.buttonBox.accepted.connect(self.accept)
        layoutT = QVBoxLayout()
        layout = QHBoxLayout()
        layout.addWidget(self.listWidget)
        layout.addLayout(buttonLayout)
        for text, slot in ((self.tr("&Add..."), self.add),
                           (self.tr("&Remove..."), self.remove),
                           (self.tr("&Up"), self.up),
                           (self.tr("&Down"), self.down),
                           (self.tr("De&fault"), self.default),
                           (self.tr("&Sort"), self.listWidget.sortItems)):
            button = QPushButton(text)
            buttonLayout.addWidget(button)
            button.clicked.connect(slot)
        buttonLayout.addWidget(self.buttonBox)
        self.status = QLabel()
        layoutT.addLayout(layout)
        layoutT.addWidget(self.status)
        self.setLayout(layoutT)
        self.checklength()

    def add(self):
        self.status.setText('')
        lista = []
        newitem = ''
        self.citytoadd = ''
        self.countrytoadd = ''
        self._idtoadd = ''
        dialog = searchcity.SearchCity(self.accurate_url, self.appid, self)
        dialog.id_signal.connect(self.addcity)
        dialog.city_signal.connect(self.addcity)
        dialog.country_signal.connect(self.addcity)
        if dialog.exec_() == 1:
            newitem = (self.citytoadd + '_' + self.countrytoadd + '_' +
                       self._idtoadd)
            for row in range(self.listWidget.count()):
                lista.append(self.listWidget.item(row).text())
            if newitem in lista:
                self.status.setText(QCoreApplication.translate('Status bar message',
                                    'The city already exists in the list', 'Cities list dialogue'))
                return
            else:
                self.listWidget.addItem(newitem)
                self.checklength()

    def addcity(self, what):
        self.status.setText('')
        if what[0] == 'ID':
            self._idtoadd = what[1]
        elif what[0] == 'City':
            self.citytoadd = what[1]
        elif what[0] == 'Country':
            self.countrytoadd = what[1]

    def remove(self):
        self.status.setText('')
        if self.listWidget.count() == 0:
            self.status.setText(self.tr('The list is empty'))
            return
        row = self.listWidget.currentRow()
        item = self.listWidget.item(row)
        if item is None:
            return
        message = self.tr('The city "{0}" has been removed').format(
            self.listWidget.item(row).text())
        item = self.listWidget.takeItem(row)
        del item
        self.status.setText(message)

    def up(self):
        self.status.setText('')
        row = self.listWidget.currentRow()
        if row >= 1:
            item = self.listWidget.takeItem(row)
            self.listWidget.insertItem(row - 1, item)
            self.listWidget.setCurrentItem(item)

    def down(self):
        self.status.setText('')
        row = self.listWidget.currentRow()
        if row < self.listWidget.count() - 1:
            item = self.listWidget.takeItem(row)
            self.listWidget.insertItem(row + 1, item)
            self.listWidget.setCurrentItem(item)

    def default(self):
        self.status.setText('')
        row = self.listWidget.currentRow()
        if row >= 1:
            item = self.listWidget.takeItem(row)
            self.listWidget.insertItem(0, item)
            self.listWidget.setCurrentItem(item)

    def checklength(self):
        listtosend = []
        for row in range(self.listWidget.count()):
            listtosend.append(self.listWidget.item(row).text())
        if len(listtosend) == 0:
            return
        self.listWidget.setMinimumWidth(self.listWidget.sizeHintForColumn(0))

    def accept(self):
        listtosend = []
        for row in range(self.listWidget.count()):
            listtosend.append(self.listWidget.item(row).text())
        self.citieslist_signal[list].emit(listtosend)
        QDialog.accept(self)
コード例 #41
0
class TabMain_gui(QWidget):
    def __init__(self, caller, *args, **kwargs):
        QWidget.__init__(self)
        self.caller = caller
        ###-- Initialize
        self.loadIcons()
        self.initGlobalButtons()
        self.initBody()
        ###-- Compose layout
        mainVertical = QVBoxLayout()
        mainVertical.setSpacing(10)
        mainVertical.addLayout(self.globalButtons)
        mainVertical.addWidget(self.body)
        ###-- Set Layout
        self.setLayout(mainVertical)



    def initGlobalButtons(self):
        ###-- Global Buttons
        globalButtons = QHBoxLayout()
        self.button_startAll = QPushButton("Start All Masternodes")
        globalButtons.addWidget(self.button_startAll)
        self.button_getAllStatus = QPushButton("Get Status of All Masternodes")
        globalButtons.addWidget(self.button_getAllStatus)
        self.button_sweepAllRewards = QPushButton("Sweep All Rewards")
        globalButtons.addWidget(self.button_sweepAllRewards)
        self.globalButtons = globalButtons



    def initBody(self):
        ###-- CENTRAL PART
        self.body = QGroupBox()
        self.body.setTitle("My Masternodes")
        # masternode list
        self.myList = QListWidget()
        self.myList.setUpdatesEnabled(True)
        self.myList.setDragDropMode(QAbstractItemView.InternalMove)
        self.myList.setDefaultDropAction(Qt.MoveAction)
        self.current_mn = {}
        self.mnLed = {}
        self.mnLabel = {}
        self.mnBalance = {}
        self.btn_details = {}
        self.mnStatusLabel = {}
        self.mnStatusProgress = {}
        self.btn_remove = {}
        self.btn_edit = {}
        self.btn_start = {}
        self.btn_rewards = {}

        for masternode in self.caller.masternode_list:
            name = masternode['name']
            self.insert_mn_list(name, masternode['ip'], masternode['port'], isHardware=masternode['isHardware'])

        vBox = QVBoxLayout()
        vBox.addWidget(self.myList)
        self.button_addMasternode = QPushButton("New Masternode")
        vBox.addWidget(self.button_addMasternode)
        vBox.stretch(1)
        self.body.setLayout(vBox)



    def insert_mn_list(self, name, ip, port, row=None, isHardware=True):
        mnRow = QWidget()
        mnRow.alias = name
        if isHardware:
            mnRow.setToolTip("Drag rows to re-order.")
        else:
            mnRow.setToolTip("EXTERNAL MASTERNODE - Drag rows to re-order.")
        mnRowLayout = QHBoxLayout()
        ##--- Led
        self.mnLed[name] = QLabel()
        self.mnLed[name].setPixmap(self.caller.ledGrayV_icon)
        mnRowLayout.addWidget(self.mnLed[name])
        ##--- Label & Balance
        self.mnLabel[name] = QLabel()
        if isHardware:
            self.mnLabel[name].setText("%s [<i>%s</i>]" % (name, ip))
        else:
            self.mnLabel[name].setText("<span style='color: orange'>%s</span> [<i>%s</i>]" % (name, ip))
        mnRowLayout.addWidget(self.mnLabel[name])
        self.mnBalance[name] = QLabel()
        mnRowLayout.addWidget(self.mnBalance[name])
        self.mnBalance[name].hide()
        mnRowLayout.addStretch(1)
        ##--- Status Label
        self.mnStatusLabel[name] = QLabel()
        mnRowLayout.addWidget(self.mnStatusLabel[name])
        self.mnStatusLabel[name].hide()
        ##--- Rank bar
        self.mnStatusProgress[name] = QProgressBar()
        self.mnStatusProgress[name].setMaximumHeight(15)
        self.mnStatusProgress[name].setMaximumWidth(40)
        self.mnStatusProgress[name].setTextVisible(False)
        mnRowLayout.addWidget(self.mnStatusProgress[name])
        self.mnStatusProgress[name].hide()
        ##--- Details button
        self.btn_details[name] = QToolButton()
        self.btn_details[name].setIcon(self.details_icon)
        self.btn_details[name].setToolTip('Check status details of masternode "%s"' % name)
        mnRowLayout.addWidget(self.btn_details[name])
        self.btn_details[name].hide()
        ##--- Rewards button
        self.btn_rewards[name] = QPushButton()
        self.btn_rewards[name].setToolTip('Transfer rewards from "%s"' % name)
        self.btn_rewards[name].setIcon(self.rewards_icon)
        self.btn_rewards[name].alias = name
        if not isHardware:
            self.btn_rewards[name].setDisabled(True)
            self.btn_rewards[name].setToolTip("EXTERNAL MN: unable to move rewards with SPMT")
        mnRowLayout.addWidget(self.btn_rewards[name])
        ##--- Start button
        self.btn_start[name] = QPushButton()
        self.btn_start[name].setToolTip('Start masternode "%s"' % name)
        self.btn_start[name].setIcon(self.startMN_icon)
        self.btn_start[name].alias = name
        if not isHardware:
            self.btn_start[name].setDisabled(True)
            self.btn_start[name].setToolTip("EXTERNAL MN: unable to start with SPMT")
        mnRowLayout.addWidget(self.btn_start[name])
        ##--- Edit button
        self.btn_edit[name] = QPushButton()
        self.btn_edit[name].setToolTip('Edit masternode "%s"' % name)
        self.btn_edit[name].setIcon(self.editMN_icon)
        self.btn_edit[name].alias = name
        if not isHardware:
            self.btn_edit[name].setDisabled(True)
            self.btn_edit[name].setToolTip("EXTERNAL MN: to edit, delete entry and load new 'masternode.conf'")
        mnRowLayout.addWidget(self.btn_edit[name])
        ##--- Remove button
        self.btn_remove[name] = QPushButton()
        self.btn_remove[name].setToolTip('Delete masternode "%s"' % name)
        self.btn_remove[name].setIcon(self.removeMN_icon)
        self.btn_remove[name].alias = name
        mnRowLayout.addWidget(self.btn_remove[name])
        ##--- Three Dots
        threeDots = QLabel()
        threeDots.setPixmap(self.threeDots_icon.scaledToHeight(20, Qt.SmoothTransformation))
        mnRowLayout.addWidget(threeDots)
        ##--- Set Row Layout
        mnRow.setLayout(mnRowLayout)
        ##--- Append Row
        self.current_mn[name] = QListWidgetItem()
        #self.current_mn[name].setFlags(Qt.ItemIsSelectable)
        self.current_mn[name].setSizeHint(mnRow.sizeHint())
        if row is not None:
            self.myList.insertItem(row, self.current_mn[name])
        else:
            self.myList.addItem(self.current_mn[name])
        self.myList.setItemWidget(self.current_mn[name], mnRow)



    def loadIcons(self):
        self.removeMN_icon = QIcon(os.path.join(self.caller.imgDir, 'icon_delete.png'))
        self.editMN_icon = QIcon(os.path.join(self.caller.imgDir, 'icon_edit.png'))
        self.startMN_icon = QIcon(os.path.join(self.caller.imgDir, 'icon_rocket.png'))
        self.rewards_icon = QIcon(os.path.join(self.caller.imgDir, 'icon_money.png'))
        self.details_icon = QIcon(os.path.join(self.caller.imgDir, 'icon_search.png'))
        self.ledgerImg = QPixmap(os.path.join(self.caller.imgDir, 'ledger.png'))
        self.trezorImg = QPixmap(os.path.join(self.caller.imgDir, 'trezorModT.png'))
        self.trezorOneImg = QPixmap(os.path.join(self.caller.imgDir, 'trezorOne.png'))
        self.coldStaking_icon = QIcon(os.path.join(self.caller.imgDir, 'icon_coldstaking.png'))
        self.threeDots_icon = QPixmap(os.path.join(self.caller.imgDir, 'icon_3dots.png'))
コード例 #42
0
class UserCenter(QWidget):
    avatar_changed = pyqtSignal(str)
    psd_changed = pyqtSignal(bool)

    def __init__(self, user_id, *args, **kwargs):
        super(UserCenter, self).__init__(*args, **kwargs)
        self.user_id = user_id
        self.set_new_avatar = False
        layout = QVBoxLayout()  # 总布局
        layout.setContentsMargins(QMargins(100, 10, 100, 10))
        middle_layout = QHBoxLayout()  # 中间布局
        # 左侧显示头像和菜单
        left_layout = QVBoxLayout()  # 左侧布局
        self.avatar = CAvatar(size=QSize(180, 180))
        self.avatar.clicked.connect(self.modify_user_avatar)
        left_layout.addWidget(self.avatar, alignment=Qt.AlignCenter)

        machine_code = settings.app_dawn.value('machine')
        code_label = QLineEdit(machine_code, parent=self)
        code_label.setMaximumWidth(250)
        code_label.setCursor(QCursor(Qt.ArrowCursor))
        code_label.setAlignment(Qt.AlignCenter)
        code_label.setFocusPolicy(Qt.NoFocus)
        left_layout.addWidget(code_label)

        # 菜单
        self.left_list = QListWidget(clicked=self.menu_clicked, parent=self)
        self.left_list.setMaximumWidth(250)
        item1 = QListWidgetItem('基本资料', self.left_list)
        item2 = QListWidgetItem('修改密码', self.left_list)
        item1.setTextAlignment(Qt.AlignCenter)
        item2.setTextAlignment(Qt.AlignCenter)
        self.left_list.addItem(item1)
        self.left_list.addItem(item2)
        left_layout.addWidget(self.left_list)

        middle_layout.addLayout(left_layout)
        # 右侧显示具体窗口
        self.right_win = LoadedPage(self)
        self.right_win.remove_borders()
        middle_layout.addWidget(self.right_win)
        layout.addLayout(middle_layout)

        self.setLayout(layout)

        code_label.setObjectName('machineCode')
        self.left_list.setObjectName('leftList')
        self.setStyleSheet("""
        #machineCode{
            border: none;
            background:rgb(240,240,240);
        }
        #leftList{
            outline:none;
            border:none;
            background-color: rgb(240,240,240);
        }
        #leftList::item{
           height:25px;
        }
        #leftList::item:selected{
           color:rgb(100,180,230);
           background-color:rgb(240,240,240);
        }
        #leftList::item:hover{
           color:rgb(150,180,230);
           background-color:rgb(240,240,240);
        }
        """)
        self.left_list.setCurrentRow(0)
        self.menu_clicked()

    def setAvatar(self, avatar_url):
        if avatar_url:
            url = settings.STATIC_PREFIX + avatar_url
            self.avatar.setUrl(url)
            self.avatar_changed.emit(url)
        else:
            self.avatar.setUrl('media/avatar.png')

    def password_changed(self):
        self.psd_changed.emit(True)

    # 修改用户头像
    def modify_user_avatar(self):
        popup = EditUserAvatar(user_id=self.user_id,
                               current_url=self.avatar.url,
                               parent=self)
        popup.new_avatar_url.connect(self.setAvatar)
        popup.exec_()

    # 点击左侧菜单
    def menu_clicked(self):
        current_item = self.left_list.currentItem()
        text = current_item.text()
        if text == '基本资料':
            frame_page = BaseInfo(uid=self.user_id)
            frame_page.avatar_url.connect(self.setAvatar)
            frame_page.on_load_info()  # 获取基本信息
        elif text == '修改密码':
            frame_page = ModifyPassword(user_id=self.user_id)
            frame_page.new_password.connect(self.password_changed)
        else:
            frame_page = QLabel()
        self.right_win.clear()
        self.right_win.addWidget(frame_page)
コード例 #43
0
class Window(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.user_interface()

    def item_click(self, item):
        number = self.view.currentRow()
        if self.shuffled == False:
            self.playlist.setCurrentIndex(number)
            self.player.play()
        elif self.shuffled == True:
            pass

    def item_doubleclick(self, item):
        self.current_item_song = item
        menu = QtWidgets.QMenu()
        createPlaylist = QAction('Create New Playlist')
        createPlaylist.triggered.connect(self.create_playlist)
        menu.addAction(createPlaylist)
        addToPlaylist = QAction('Add To Playlist')
        addToPlaylist.triggered.connect(self.add_to_playlist)
        menu.addAction(addToPlaylist)
        menu.exec_()

    def user_interface(self):
        self.all_song_button = QtWidgets.QPushButton("All songs")
        self.play_button = QtWidgets.QPushButton()
        self.play_button.setIcon(self.style().standardIcon(
            QStyle.SP_MediaPlay))
        self.next_button = QtWidgets.QPushButton()
        self.next_button.setIcon(self.style().standardIcon(
            QStyle.SP_MediaSeekForward))
        self.prev_button = QtWidgets.QPushButton()
        self.prev_button.setIcon(self.style().standardIcon(
            QStyle.SP_MediaSeekBackward))
        self.shuffle_button = QtWidgets.QPushButton("🔀")
        self.min_volumn = QtWidgets.QLabel("🔈")
        self.max_volumn = QtWidgets.QLabel("🔊")
        self.l_playlists = QtWidgets.QLabel("Playlists:")
        self.l_current_song = QtWidgets.QLabel("Current song:")

        self.songs = QtWidgets.QLabel("Songs:\n")

        self.view = QListWidget()
        self.viewPlaylists = QListWidget()
        self.all_songs = self.load_songs()
        self.all_playlists = self.load_playlists()
        self.viewPlaylists.adjustSize()

        self.view.adjustSize()
        self.view.itemClicked.connect(self.item_click)
        self.view.itemDoubleClicked.connect(self.item_doubleclick)

        self.view.installEventFilter(self)

        self.set_playlist()

        self.line_edit = QtWidgets.QLineEdit()
        self.line_edit.setText("")
        self.search_button = QtWidgets.QPushButton("search")

        # scroll are for list of songs
        self.songs_scroll_area = QtWidgets.QScrollArea()
        self.songs_scroll_area.setWidget(self.view)
        self.songs_scroll_area.setWidgetResizable(True)

        # scroll area for list of playlists
        self.playlists_scroll_area = QtWidgets.QScrollArea()
        self.playlists_scroll_area.setWidget(self.viewPlaylists)
        self.playlists_scroll_area.setWidgetResizable(True)
        # self.playlists_scroll_bar = QtWidgets.QScrollBar()
        # self.playlists_scroll_area.setVerticalScrollBar(self.playlists_scroll_bar)
        # self.playlists_scroll_area.setVerticalScrollBarPolicy(C.Qt.ScrollBarAlwaysOn)

        # set area for current song box
        self.current_song_area = QtWidgets.QScrollArea()
        self.current_song_area.setWidget(self.l_current_song)

        # set volumn slider
        self.volumn_slider = QtWidgets.QSlider(C.Qt.Horizontal)
        self.volumn_slider.setMaximum(100)
        self.volumn_slider.setMinimum(0)
        self.volumn_slider.setValue(50)
        self.volumn_slider.setTickPosition(QtWidgets.QSlider.TicksRight)
        self.volumn_slider.setTickInterval(10)

        self.seekSlider = QtWidgets.QSlider()
        self.seekSlider.setMinimum(0)
        self.seekSlider.setMaximum(100)
        self.seekSlider.setRange(0, self.player.duration() / 1000)
        self.seekSlider.setOrientation(C.Qt.Horizontal)
        self.seekSlider.setTracking(False)
        seekSliderLabel1 = QtWidgets.QLabel('0.00')
        seekSliderLabel2 = QtWidgets.QLabel('0.00')

        self.set_playlist()
        self.volume_change()

        # self.list_view = QtWidgets.QListView(self.all_songs)

        h_box = QtWidgets.QHBoxLayout()
        v_box = QtWidgets.QVBoxLayout()
        self.h_box4 = QtWidgets.QHBoxLayout()

        # h_box.addWidget(backGround)

        v_box.addWidget(self.all_song_button)
        v_box.addWidget(self.playlists_scroll_area)
        v_box.addWidget(self.current_song_area)

        self.h_box4.addWidget(seekSliderLabel1)
        self.h_box4.addWidget(self.seekSlider)
        self.h_box4.addWidget(seekSliderLabel2)

        h_box.addLayout(v_box)

        v_box1 = QtWidgets.QVBoxLayout()
        v_box1.addWidget(self.line_edit)

        v_box2 = QtWidgets.QVBoxLayout()
        v_box2.addWidget(self.songs_scroll_area)

        h_box.addLayout(v_box1)

        h_box1 = QtWidgets.QHBoxLayout()
        h_box1.addWidget(self.shuffle_button)
        h_box1.addWidget(self.prev_button)
        h_box1.addWidget(self.play_button)
        h_box1.addWidget(self.next_button)

        h_box3 = QtWidgets.QHBoxLayout()
        h_box3.addWidget(self.min_volumn)
        h_box3.addWidget(self.volumn_slider)
        h_box3.addWidget(self.max_volumn)

        h_box2 = QtWidgets.QHBoxLayout()
        h_box2.addWidget(self.search_button)

        v_box1.addLayout(h_box2)
        v_box1.addLayout(v_box2)
        v_box1.addLayout(self.h_box4)
        v_box1.addLayout(h_box1)
        v_box1.addLayout(h_box3)

        self.setLayout(h_box)

        self.setWindowTitle("Music Player")
        self.setGeometry(100, 100, 800, 600)
        self.show()

        self.play_button.setShortcut(' ')
        self.next_button.setShortcut('Alt+Right')
        self.prev_button.setShortcut('Alt+Left')
        self.search_button.setShortcut('Return')
        self.play_button.clicked.connect(self.play)
        self.next_button.clicked.connect(self.next)
        self.prev_button.clicked.connect(self.back)
        self.shuffle_button.clicked.connect(self.shuffle)
        self.search_button.clicked.connect(self.search)
        self.volumn_slider.valueChanged.connect(self.volume_change)
        self.all_song_button.clicked.connect(self.load_songs)
        self.player.currentMediaChanged.connect(self.current_song)
        self.player.positionChanged.connect(self.qmp_positionChanged)
        self.player.durationChanged.connect(self.change_duration)
        self.all_song_button.clicked.connect(self.show_all_songs)

        self.shuffled = False

    def add_to_playlist(self):
        menu = QtWidgets.QMenu()
        for item in self.all_playlists:
            menuItemTask = menu.addAction(item)
            menuItemTask.triggered.connect(self.picked_playlist)
            menu.addAction(menuItemTask)
        menu.exec_()

    def picked_playlist(self):
        print(self.current_item_song)
        # file = open(item, 'w')
        # file.write(self.current_item)
        # file.close()

    def create_playlist(self):
        root = C.QFileInfo(__file__).absolutePath()
        spot = (root + '/songs/')
        playlistName = self.getText()
        completeName = os.path.join(spot, f'{playlistName}.m3u')
        file = open(completeName, 'w')
        file.close()
        self.all_playlists.clear()
        self.playlists_scroll_area.update()
        self.all_playlists = self.load_playlists()
        self.playlists_scroll_area.update()

    def getText(self):
        text, okPressed = QInputDialog.getText(self, "New Playlist",
                                               "Playlist Name:",
                                               QLineEdit.Normal, "")
        if okPressed and text != '':
            return text

    def load_playlists(self):
        playlists = []
        root = C.QFileInfo(__file__).absolutePath()
        songs = os.listdir(root + "/songs")
        for item in songs:
            if str(item[-4:]) == '.m3u':
                self.viewPlaylists.addItem(item[:-4])
                print(root + "/songs" + item)
                playlists.append(root + "/songs" + item)
        return playlists

    def show_all_songs(self):
        self.view.clear()
        self.playlist.clear()
        root = C.QFileInfo(__file__).absolutePath()
        songs = os.listdir(root + "/songs")
        s = "Songs:\n"
        for item in songs:
            if item.endswith('.mp3'):
                url = C.QUrl.fromLocalFile(item)
                content = M.QMediaContent(url)
                s = (str(item[:-4]))
                self.view.addItem(s)
                self.playlist.addMedia(content)

    def current_song(self, media):
        name = media.canonicalUrl()
        name = name.toString()
        name = name.split('/')
        url = name[-1]
        url = url[:-4]
        self.l_current_song.setText('Current Song:\n\n' + url)
        self.l_current_song.adjustSize()

    def change_duration(self):
        self.seekSlider.setRange(0, self.player.duration() / 1000)

    def qmp_positionChanged(self, position):
        if self.shuffled == False:
            sliderLayout = self.h_box4.layout()
            sliderLayout.itemAt(0).widget().setText(
                '%d:%02d' % (int(position / 60000), int(
                    (position / 1000) % 60)))
            self.seekSlider.setValue(position / 1000)
            sliderLayout.itemAt(2).widget().setText(
                '%d:%02d' % (int(self.player.duration() / 60000),
                             int((self.player.duration() / 1000) % 60)))
        elif self.shuffled == True:
            sliderLayout = self.h_box4.layout()
            sliderLayout.itemAt(0).widget().setText(
                '%d:%02d' % (int(position / 60000), int(
                    (position / 1000) % 60)))
            self.seekSlider.setValue(position / 1000)
            sliderLayout.itemAt(2).widget().setText(
                '%d:%02d' % (int(self.player.duration() / 60000),
                             int((self.player.duration() / 1000) % 60)))

    def load_songs(self):
        songList = []
        s = 'Songs:\n\n'
        root = C.QFileInfo(__file__).absolutePath()
        songs = os.listdir(root + "/songs")
        for item in songs:
            if item.endswith('.mp3'):
                s += (str(item[:-4]) + '\n')
                self.view.addItem(str(item[:-4]))
                song = (root + '/songs/' + item + '\n')
                songList.append(song)
        self.songs.setText(s)
        return songList

    def set_playlist(self):
        self.player = M.QMediaPlayer(self)
        self.player2 = M.QMediaPlayer(self)
        self.playlist = M.QMediaPlaylist(self.player)
        self.playlist2 = M.QMediaPlaylist(self.player2)
        for song in self.all_songs:
            url = C.QUrl.fromLocalFile(song[:-1])
            content = M.QMediaContent(url)
            self.playlist.addMedia(content)
            self.playlist2.addMedia(content)
        self.playlist.setCurrentIndex(0)
        self.playlist2.shuffle()
        self.playlist2.setCurrentIndex(0)
        self.player.setPlaylist(self.playlist)
        self.player2.setPlaylist(self.playlist2)

    def play(self):
        if self.shuffled == False:
            if self.player.state() == 0 or self.player.state() == 2:
                self.play_button.setIcon(self.style().standardIcon(
                    QStyle.SP_MediaPause))
                self.player.play()
            else:
                self.player.pause()
                self.play_button.setIcon(self.style().standardIcon(
                    QStyle.SP_MediaPlay))
        else:
            if self.player2.state() == 0 or self.player2.state() == 2:
                self.play_button.setIcon(self.style().standardIcon(
                    QStyle.SP_MediaPause))
                self.player2.play()
            else:
                self.player2.pause()
                self.play_button.setIcon(self.style().standardIcon(
                    QStyle.SP_MediaPlay))

    def next(self):
        if self.shuffled == False:
            numb = self.playlist.currentIndex()
            self.playlist.setCurrentIndex(numb + 1)
            self.player.play()
        else:
            numb = self.playlist2.currentIndex()
            self.playlist2.setCurrentIndex(numb + 1)
            self.player2.play()

    def back(self):
        if self.shuffled == False:
            numb = self.playlist.currentIndex()
            self.playlist.setCurrentIndex(numb - 1)
            self.player.play()
        else:
            numb = self.playlist2.currentIndex()
            self.playlist2.setCurrentIndex(numb - 1)
            self.player2.play()

    def shuffle(self):
        if self.shuffled == False:
            self.player.stop()
            self.playlist2.shuffle()
            self.playlist2.setCurrentIndex(0)
            self.player2.play()
            self.shuffled = True
        elif self.shuffled == True:
            self.player2.stop()
            self.playlist.setCurrentIndex(0)
            self.player.play()
            self.shuffled = False

    def volume_change(self):
        numb = self.volumn_slider.value()
        self.player.setVolume(numb)
        self.player2.setVolume(numb)

    def display_song_list(self, list_of_songs):
        self.view.clear()
        if self.shuffled == False:
            self.playlist.clear()
        else:
            self.playlist2.clear()
        s = 'Songs:\n\n'
        for item in list_of_songs:
            url = C.QUrl.fromLocalFile(item)
            content = M.QMediaContent(url)
            if self.shuffled == False:
                self.playlist.addMedia(content)
            else:
                self.playlist2.addMedia(content)
            s += (str(item[:-4]) + '\n')
            self.view.addItem(s)

    def search(self):
        s_term = self.line_edit.text()
        filtered_list_of_songs = []
        root = C.QFileInfo(__file__).absolutePath()
        songs = os.listdir(root + "/songs")
        # search through each song in all_songs...if it matches add to filtered_list_of_songs
        for song in songs:
            if song.lower().find(s_term.lower()) > -1:
                filtered_list_of_songs.append(song)
        self.display_song_list(filtered_list_of_songs)
コード例 #44
0
class ListEdit(QWidget):
    """A widget to edit a list of items (e.g. a list of directories)."""

    # emitted when anything changed in the listbox.
    changed = pyqtSignal()

    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)
        layout = QGridLayout(self)
        self.setLayout(layout)

        self.addButton = QPushButton(icons.get('list-add'), '')
        self.editButton = QPushButton(icons.get('document-edit'), '')
        self.removeButton = QPushButton(icons.get('list-remove'), '')
        self.listBox = QListWidget()

        layout.setContentsMargins(1, 1, 1, 1)
        layout.setSpacing(0)
        layout.addWidget(self.listBox, 0, 0, 8, 1)
        layout.addWidget(self.addButton, 0, 1)
        layout.addWidget(self.editButton, 1, 1)
        layout.addWidget(self.removeButton, 2, 1)

        def updateSelection():
            selected = bool(self.listBox.currentItem())
            self.editButton.setEnabled(selected)
            self.removeButton.setEnabled(selected)

        self.changed.connect(updateSelection)
        self.listBox.itemSelectionChanged.connect(updateSelection)
        updateSelection()
        self.connectSlots()
        app.translateUI(self)

    def connectSlots(self):
        self.addButton.clicked.connect(self.addClicked)
        self.editButton.clicked.connect(self.editClicked)
        self.removeButton.clicked.connect(self.removeClicked)
        self.listBox.itemDoubleClicked.connect(self.itemDoubleClicked)
        self.listBox.model().layoutChanged.connect(self.changed)

    def translateUI(self):
        self.addButton.setText(_("&Add..."))
        self.editButton.setText(_("&Edit..."))
        self.removeButton.setText(_("&Remove"))

    def addClicked(self, button):
        item = self.createItem()
        if self.openEditor(item):
            self.addItem(item)

    def editClicked(self, button):
        item = self.listBox.currentItem()
        item and self.editItem(item)

    def removeClicked(self, button):
        item = self.listBox.currentItem()
        if item:
            self.removeItem(item)

    def itemDoubleClicked(self, item):
        item and self.editItem(item)

    def createItem(self):
        return QListWidgetItem()

    def addItem(self, item):
        self.listBox.addItem(item)
        self.itemChanged(item)
        self.changed.emit()

    def removeItem(self, item):
        self.listBox.takeItem(self.listBox.row(item))
        self.changed.emit()

    def editItem(self, item):
        if self.openEditor(item):
            self.itemChanged(item)
            self.changed.emit()

    def setCurrentItem(self, item):
        self.listBox.setCurrentItem(item)

    def setCurrentRow(self, row):
        self.listBox.setCurrentRow(row)

    def openEditor(self, item):
        """Opens an editor (dialog) for the item.

        Returns True if the dialog was accepted and the item edited.
        Returns False if the dialog was cancelled (the item must be left
        unedited).
        """
        pass

    def itemChanged(self, item):
        """Called after an item has been added or edited.

        Re-implement to do something at this moment if needed, e.g. alter the
        text or display of other items.
        """
        pass

    def setValue(self, strings):
        """Sets the listbox to a list of strings."""
        self.listBox.clear()
        self.listBox.addItems(strings)
        self.changed.emit()

    def value(self):
        """Returns the list of paths in the listbox."""
        return [
            self.listBox.item(i).text() for i in range(self.listBox.count())
        ]

    def setItems(self, items):
        """Sets the listbox to a list of items."""
        self.listBox.clear()
        for item in items:
            self.listBox.addItem(item)
            self.itemChanged(item)
        self.changed.emit()

    def items(self):
        """Returns the list of items in the listbox."""
        return [self.listBox.item(i) for i in range(self.listBox.count())]

    def clear(self):
        """Clears the listbox."""
        self.listBox.clear()
        self.changed.emit()
コード例 #45
0
ファイル: CoTrafficWidget.py プロジェクト: zeroth/cellphy
class CoTrafficWidget(QMainWindow):
    pair_clicked = QtCore.pyqtSignal(TrackPair)
    msd_clicked = QtCore.pyqtSignal(list, str)
    # Channel, vtk_on, show_ied, show_alfa_table
    show_channel = QtCore.pyqtSignal(Channel, bool, bool, bool)
    show_bin_total = QtCore.pyqtSignal(dict, str)

    def __init__(self, data, radius, title='Untitled', parent=None):
        QMainWindow.__init__(self, parent)
        self.list_widget = QListWidget()
        self.data = data
        self.radius = radius
        self.pairs = dict()
        self.title = title
        self.min_time_points = 4
        self.bin_value = 0
        self.channel_a = None
        self.channel_b = None

        # for pair in self.data:
        #     list_item = QListWidgetItem()
        #     list_item.setText(f'{pair.name} - ({len(pair.time)})')
        #     list_item.setData(QtCore.Qt.UserRole + 1, pair.name)
        #     self.list_widget.addItem(list_item)
        #     self.pairs[pair.name] = pair
        #
        # self.list_widget.itemClicked.connect(self.__track_clicked)
        #
        # self.setCentralWidget(self.list_widget)

        # self.tool_bar_top = self.addToolBar('CoTraffic toolbar')
        # self.filter_box = QSpinBox()
        # self.filter_box.setPrefix('Min Time')
        # self.filter_box.setMinimum(self.min_time_points)
        # self.tool_bar_top.addWidget(self.filter_box)
        # flt_action = QAction('Apply Filter', self)
        # flt_action.triggered.connect(self.__apply_filter)
        # self.tool_bar_top.addAction(flt_action)
        #
        # self.tool_bar_top.addSeparator()
        # self.bin_box = QSpinBox()
        # self.bin_box.setPrefix('Time Bin')
        # self.bin_box.setMinimum(10)
        # self.tool_bar_top.addWidget(self.bin_box)
        #
        # self.addToolBarBreak(QtCore.Qt.TopToolBarArea)

        self.tool_bar = self.addToolBar('CoTraffic toolbar Buttons')
        msd_action = QAction('Plot MSD', self)
        msd_action.triggered.connect(self.__plot_msd)
        self.tool_bar.addAction(msd_action)

        self.__extract_channels(extract_tracks=False)
        ca_action = QAction(f'Show {self.channel_a.suffix}', self)
        ca_action.triggered.connect(self.__show_ca)
        self.tool_bar.addAction(ca_action)

        cb_action = QAction(f'Show {self.channel_b.suffix}', self)
        cb_action.triggered.connect(self.__show_cb)
        self.tool_bar.addAction(cb_action)

        self.apply_filter()

    def apply_filter(self, filter_value=4):
        self.min_time_points = filter_value
        self.list_widget = QListWidget()
        self.pairs = dict()
        for pair in self.data:
            if len(pair.time) >= self.min_time_points:
                list_item = QListWidgetItem()
                list_item.setText(f'{pair.name} - ({len(pair.time)})')
                list_item.setData(QtCore.Qt.UserRole + 1, pair.name)
                self.list_widget.addItem(list_item)
                self.pairs[pair.name] = pair

        self.list_widget.itemClicked.connect(self.__track_clicked)
        self.setCentralWidget(self.list_widget)

    def __show_ca(self):
        self.__extract_channels()
        self.show_channel.emit(self.channel_a, True, True, True)
        self._display_bin(self.channel_a, self.bin_value)

    def __show_cb(self):
        self.__extract_channels()
        self.show_channel.emit(self.channel_b, True, True, True)
        self._display_bin(self.channel_b, self.bin_value)

    def bin_updated(self, bin_value=0):
        self.bin_value = bin_value

    def _display_bin(self, channel, bin_value):
        channels, total_dict = channel.bin_tracks(bin_value=bin_value,
                                                  radius=self.radius)
        for _channel in channels:
            self.show_channel.emit(_channel, True, True, True)
        self.show_bin_total.emit(
            total_dict,
            f'CT {bin_value}-{self.radius:.1f}-{channel.suffix}-{self.bin_value}'
        )

    def _get_tracks_for_meta(self):
        pair_pick = self.data[0]
        return [pair_pick.track_a, pair_pick.track_b]

    def __track_clicked(self, item):
        pair_id = item.data(QtCore.Qt.UserRole + 1)
        self.pair_clicked.emit(self.pairs[pair_id])

    def __plot_msd(self):
        tracks = []
        for _, pair in self.pairs.items():
            if len(pair.time) > 3:
                tracks.append(pair.track_a)
                tracks.append(pair.track_b)

        self.msd_clicked.emit(tracks, self.title)

    def __extract_channels(self, extract_tracks=True):
        # get the channel suffix
        tracks = self._get_tracks_for_meta()
        self.channel_a = Channel(
            channel_name=f'CT {self.radius:.1f}{tracks[0].suffix}',
            suffix=tracks[0].suffix,
            color=tracks[0].color)

        self.channel_b = Channel(
            channel_name=f'CT {self.radius:.1f}{tracks[1].suffix}',
            suffix=tracks[1].suffix,
            color=tracks[1].color)

        self.channel_a.filter_size = self.min_time_points
        self.channel_b.filter_size = self.min_time_points
        self.channel_a.bin_value = self.bin_value
        self.channel_b.bin_value = self.bin_value

        channel_a_tracks = []
        channel_b_tracks = []
        if extract_tracks:
            for _, pair in self.pairs.items():
                if pair.track_a.suffix == self.channel_a.suffix:
                    channel_a_tracks.append(pair.track_a)
                    channel_b_tracks.append(pair.track_b)
                else:
                    channel_a_tracks.append(pair.track_b)
                    channel_b_tracks.append(pair.track_a)
        self.channel_a.set_track(channel_a_tracks)
        self.channel_b.set_track(channel_b_tracks)
コード例 #46
0
ファイル: pyqtGui.py プロジェクト: kajusz/ufscreenadsclient
class Gui(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.toolbar = self.addToolBar('Things')
        self.addBtn('video-display', 'Toggle Visibility',
                    self.ipcToggleVisibility, self.toolbar)
        self.addBtn('media-playback-start', 'Toggle Play', self.ipcTogglePlay,
                    self.toolbar)
        self.addBtn('view-fullscreen', 'Toggle Fullscreen',
                    self.ipcToggleFullscreen, self.toolbar)
        self.toolbar.addSeparator()
        self.targetBox = QComboBox()
        self.targetBox.addItems(targetsList)
        self.toolbar.addWidget(self.targetBox)
        self.toolbar.addSeparator()
        self.addBtn('reload', 'Refresh', self.funRefresh, self.toolbar)
        self.addBtn('preferences', 'Settings', self.funComms, self.toolbar)
        self.toolbar.addSeparator()
        self.addBtn('exit', 'Exit', qApp.quit, self.toolbar)

        self.list = QListWidget(self)
        self.list.setIconSize(QSize(120, 120))

        #self.list.resize(300, 200)
        self.setCentralWidget(self.list)

        self.resize(QSize(600, 500))
        self.setWindowTitle('Toolbar')
        self.show()

    def addBtn(self, icon, tip, action, toolbar):
        act = QAction(QIcon.fromTheme(icon), tip, self)
        act.triggered.connect(action)
        toolbar.addAction(act)

    def funComms(self):
        comms.send('test')

    def funRefresh(self):
        self.list.clear()
        target = self.targetBox.currentIndex() + 1
        print(target)

        data = fetchListData(target)
        for k in data:
            item = QListWidgetItem(
                QIcon(os.path.join(imageDir,
                                   str(k['ID']) + '.jpg')),
                k['Description'] + '\n' + k['Duration'])
            item.setFlags(item.flags()
                          | Qt.ItemIsUserCheckable)  # set checkable flag
            item.setCheckState(Qt.Checked)  # AND initialize check state
            self.list.addItem(item)

    def ipcToggleFullscreen(self):
        comms.send('toggle-fullscreen')

    def ipcTogglePlay(self):
        comms.send('toggle-play')

    def ipcToggleVisibility(self):
        comms.send('toggle-visibility')

    def ipcScreenEnable(self):
        comms.send('screen-enable')

    def ipcScreenBlack(self):
        comms.send('screen-black')

    def ipcFullscreen(self):
        comms.send('fullscreen')

    def ipcWindowed(self):
        comms.send('windowed')

    def ipcPlay(self):
        comms.send('play')

    def ipcPause(self):
        comms.send('pause')

    def ipcNext(self):
        comms.send('next')

    def ipcPrev(self):
        comms.send('prev')

    def ipcRefresh(self):
        comms.send('refresh')

    def ipcGet(self, item):
        comms.send('get-' + item)

    def ipcTarget(self, target):
        comms.send('target-' + target)

    def ipcDisable(self, listItemId):
        comms.send('disable-' + listItemId)

    def ipcEnable(self, listItemId):
        comms.send('enable-' + listItemId)
コード例 #47
0
ファイル: SearchWindow.py プロジェクト: Neihtq/KaraoPi
class SearchWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.tmp = {}
        self.textbox = QLineEdit(self)
        self.textbox.returnPressed.connect(self.search)

        self.searchResultLabel = QLabel()
        self.searchResultLabel.setText("Search Results")
        self.searchResultLabel.setStyleSheet('color: white')

        self.currentVideo = QLabel()
        self.currentVideoLabel = QLabel("Currently Playing: ")
        self.currentVideoLabel.setStyleSheet('color: white')

        self.currentVideo.setStyleSheet('color: white')
        self.currentVideoHBox = QHBoxLayout()
        self.currentVideoHBox.addWidget(self.currentVideoLabel)
        self.currentVideoHBox.addWidget(self.currentVideo)

        self.queueLabel = QLabel("Coming up next:")
        self.queueLabel.setStyleSheet('color: white')

        self.searchResultsList = QListView()
        self.searchResultsList.setIconSize(QSize(90, 90))
        self.model = QStandardItemModel(self.searchResultsList)
        self.searchResultsList.clicked.connect(self.clicked_item)

        self.queueList = QListWidget()
        self.queueList.setIconSize(QSize(90, 90))

        self.button = QPushButton('Search', self)
        self.button.clicked.connect(self.search)

        self.hbox = QHBoxLayout()
        self.hbox.addWidget(self.textbox)
        self.hbox.addWidget(self.button)
        self.hbox.setSpacing(10)
        self.hbox.setContentsMargins(5, 5, 5, 5)

        self.qr_icon = QLabel(self)
        img = ImageQt("./src/main/resources/qr.jpg")
        pixmap = QPixmap.fromImage(img).scaledToWidth(96)
        self.qr_icon.setPixmap(pixmap)
        self.qr_icon.setAlignment(Qt.AlignCenter)

        self.url_label = QLabel(URL)

        self.vbox = QVBoxLayout()
        self.vbox.addLayout(self.hbox)
        self.vbox.addWidget(self.searchResultLabel)
        self.vbox.addWidget(self.searchResultsList)
        self.vbox.addLayout(self.currentVideoHBox)
        self.vbox.addWidget(self.queueLabel)
        self.vbox.addWidget(self.queueList)
        self.vbox.addWidget(self.qr_icon)
        self.vbox.addWidget(self.url_label)
        self.vbox.setSpacing(0)
        self.vbox.setContentsMargins(5, 5, 5, 5)

        self.setLayout(self.vbox)

    def start_listener(self):
        self.listener_thread = WebSocketListener()
        self.listener_thread.queue.connect(self.on_data_ready)
        self.listener_thread.start()

    def on_data_ready(self, content):
        self.setupQueue(content['queue'])
        self.currentVideo.setText(content['currentVideo'])

    def search(self):
        textboxValue = self.textbox.text()
        results = youtube.search(textboxValue)
        self.build_list(results)

    def build_list(self, results):
        self.model.clear()
        for item in results:
            title = youtube.get_title(item)
            thumbnail = youtube.get_thumbnail(item)
            pixmap = QPixmap()
            pixmap.loadFromData(thumbnail)
            image = QIcon(pixmap)

            qItem = QStandardItem()
            qItem.setText(title)
            qItem.setIcon(image)

            self.model.appendRow(qItem)
            self.tmp[title] = youtube.get_id(item)

        self.searchResultsList.setModel(self.model)

    def clicked_item(self, item):
        title = self.model.itemFromIndex(item).text()
        data = {'title': title, 'video_id': self.tmp[title]}
        body = urllib.parse.urlencode(data)
        self.send_request(body, '/add')

    def setupQueue(self, queue):
        self.queueList.clear()
        for i in range(0, len(queue)):
            list_item = CustomListItem()
            list_item.setTitle(queue[i])
            list_item.remove_button.clicked.connect(
                partial(self.remove, index=i))

            q_list_widget_item = QListWidgetItem(self.queueList)
            q_list_widget_item.setSizeHint(list_item.sizeHint())
            self.queueList.addItem(q_list_widget_item)
            self.queueList.setItemWidget(q_list_widget_item, list_item)

    def remove(self, index):
        body = urllib.parse.urlencode({'index': index})
        self.send_request(body, '/remove')

    def send_request(self, body, endpoint):
        http_client = HTTPClient()
        try:
            res = http_client.fetch(URL + endpoint,
                                    method='POST',
                                    headers=None,
                                    body=body)
            content = json.loads(res.body.decode("utf-8"))
            self.setupQueue(content['queue'])
            self.currentVideo.setText(content['currentVideo'])
        except Exception as e:
            print(str(e))
コード例 #48
0
class SpeciesTab(QWidget):
    def __init__(self, parent):
        super().__init__()
        self.parent = parent
        self.main_layout = QVBoxLayout()

        list_style = """
            QListWidget#species_list{
                
            }
        
            QListWidget#species_list::item {
                padding: 10px;
            }
            
            QListWidget#species_list::item:selected {
                padding: 0px;
                background-color: #3577dd;
                color: white;
            }
        """
        self.setStyleSheet(list_style)

        self.species_list = QListWidget()
        self.species_list.setFont(QFont("Oxygen", 14))
        self.species_list.setObjectName("species_list")

        self.update_ui()
        self.buttons_layout = QHBoxLayout()
        self._init_buttons()

        self.main_layout.addWidget(
            QLabel("Species of the network and their initial concentration."))
        self.main_layout.addWidget(self.species_list)
        self.main_layout.addLayout(self.buttons_layout)
        self.main_layout.setObjectName("main_layout")
        self.setLayout(self.main_layout)

    def _init_buttons(self):
        self.add_button = QPushButton("Add")
        self.add_button.clicked.connect(self._add_species_click_handler)
        self.remove_button = QPushButton("Remove")
        self.remove_button.clicked.connect(self._remove_species_click_handler)
        self.buttons_layout.addWidget(self.add_button)
        self.buttons_layout.addWidget(self.remove_button)

    def update_ui(self):
        self.species_list.clear()
        for s in GenePresenter.get_instance().get_species():
            self.species_list.addItem(
                s + ": " + str(GenePresenter.get_instance().get_species()[s]))

    def _add_species_click_handler(self):
        (text, ok) = QInputDialog.getText(
            self, "Add Species", "Write species and initial "
            "concentration in this format: \n"
            "species1: 20.0, species2: 30.0")

        if ok:
            for pair in text.split(','):
                split = pair.strip().split(':')
                species_name = split[0].strip()
                species_concent = float(split[1].strip())
                GenePresenter.get_instance().add_species(
                    species_name, species_concent)

        self.update_ui()
        self.parent.reactions_tab.update_ui()

    def _remove_species_click_handler(self):
        text = self.species_list.item(self.species_list.currentRow()).text()
        species = text.split(':')[0]
        GenePresenter.get_instance().remove_species(species)
        self.update_ui()
        self.parent.reactions_tab.update_ui()
コード例 #49
0
class RSSReaderWidget(QWidget):
    def __init__(self, buffer_id, config_dir):
        super(RSSReaderWidget, self).__init__()

        self.feed_file_path = os.path.join(config_dir, "rss-reader",
                                           "feeds.json")

        self.feed_area = QWidget()
        self.feed_list = QListWidget()
        self.feed_list.setStyleSheet(
            """QListView {background: #4D5250; show-decoration-selected: 1; selection-background-color: #464646;}"""
        )
        panel_layout = QVBoxLayout()
        panel_layout.setSpacing(0)
        panel_layout.setContentsMargins(0, 0, 0, 0)
        panel_layout.addWidget(self.feed_list)
        self.feed_area.setLayout(panel_layout)

        self.article_area = QWidget()
        self.article_list = QListWidget()
        self.article_list.setStyleSheet(
            """QListView {background: #FFF; show-decoration-selected: 1; selection-background-color: #EEE;}"""
        )
        self.article_list.verticalScrollBar().setStyleSheet(
            "QScrollBar {width:0px;}")
        article_layout = QVBoxLayout()
        article_layout.setSpacing(0)
        article_layout.setContentsMargins(0, 0, 0, 0)

        self.browser = BrowserView(buffer_id, config_dir)

        article_layout.addWidget(self.article_list)
        article_layout.addWidget(self.browser)

        article_layout.setStretchFactor(self.article_list, 1)
        article_layout.setStretchFactor(self.browser, 3)

        self.article_area.setLayout(article_layout)

        self.welcome_page = QWidget()
        self.welcome_page_box = QVBoxLayout()
        self.welcome_page_box.setSpacing(10)
        self.welcome_page_box.setContentsMargins(0, 0, 0, 0)

        welcome_title_label = QLabel("Welcome to EAF RSS Reader!")
        welcome_title_label.setFont(QFont('Arial', 24))
        welcome_title_label.setStyleSheet(
            "QLabel {color: #333; font-weight: bold; margin: 20px;}")
        welcome_title_label.setAlignment(Qt.AlignHCenter)

        add_subscription_label = QLabel("Press 'a' to subscribe to a feed!")
        add_subscription_label.setFont(QFont('Arial', 20))
        add_subscription_label.setStyleSheet("QLabel {color: #grey;}")
        add_subscription_label.setAlignment(Qt.AlignHCenter)

        self.welcome_page_box.addStretch(1)
        self.welcome_page_box.addWidget(welcome_title_label)
        self.welcome_page_box.addWidget(add_subscription_label)
        self.welcome_page_box.addStretch(1)

        self.welcome_page.setLayout(self.welcome_page_box)

        self.right_area = QStackedWidget()
        self.right_area.addWidget(self.welcome_page)
        self.right_area.addWidget(self.article_area)

        if self.has_feed():
            self.right_area.setCurrentIndex(1)
        else:
            self.right_area.setCurrentIndex(0)

        hbox = QHBoxLayout()
        hbox.setSpacing(0)
        hbox.setContentsMargins(0, 0, 0, 0)

        hbox.addWidget(self.feed_area)
        hbox.addWidget(self.right_area)

        hbox.setStretchFactor(self.feed_area, 1)
        hbox.setStretchFactor(self.right_area, 3)

        self.setLayout(hbox)

        self.feed_list.itemActivated.connect(self.handle_feed)
        self.article_list.itemActivated.connect(self.handle_article)

        self.feed_object_dict = {}

        self.init_select_line = False

        self.fetch_feeds()

    def has_feed(self):
        if os.path.exists(self.feed_file_path):
            try:
                with open(self.feed_file_path, "r") as feed_file:
                    feed_dict = json.loads(feed_file.read())
                    return len(feed_dict.keys()) > 0
            except Exception:
                return False

        return False

    def fetch_feeds(self):
        if os.path.exists(self.feed_file_path):
            try:
                with open(self.feed_file_path, "r") as feed_file:
                    feed_dict = json.loads(feed_file.read())
                    for index, feed_link in enumerate(feed_dict):
                        self.fetch_feed(feed_link, index == 0)
            except Exception:
                pass

    def handle_feed(self, feed_item):
        if feed_item.feed_link in self.feed_object_dict:
            self.init_article_area(self.feed_object_dict[feed_item.feed_link])

    def handle_article(self, article_item):
        article_item.mark_as_read()

        self.browser.setUrl(QUrl(article_item.post_link))

    def fetch_feed(self, feed_link, refresh_ui):
        fetchThread = FetchRSSThread(feed_link)
        fetchThread.fetch_rss.connect(
            lambda f_object, f_link, f_title: self.handle_rss(
                f_object, f_link, f_title, refresh_ui))
        fetchThread.invalid_rss.connect(self.handle_invalid_rss)

        object_name = "feed_thread_" + feed_link
        setattr(self, object_name, fetchThread)
        getattr(self, object_name).start()

    def add_subscription(self, feed_link):
        if not self.feed_exists(feed_link):
            self.fetch_feed(feed_link, True)
        else:
            self.buffer.message_to_emacs.emit("Feed already exists: " +
                                              feed_link)

    def delete_subscription(self):
        feed_count = self.feed_list.count()
        current_row = self.feed_list.currentRow()
        feed_link = self.feed_list.currentItem().feed_link
        feed_title = self.feed_list.currentItem().feed_title

        self.feed_list.takeItem(current_row)

        with open(self.feed_file_path, "r") as feed_file:
            feed_dict = json.loads(feed_file.read())
            if feed_link in feed_dict:
                del feed_dict[feed_link]

                with open(self.feed_file_path, "w") as f:
                    f.write(json.dumps(feed_dict))

        if feed_count <= 1:
            self.feed_list.clear()
            self.article_list.clear()
            self.browser.setUrl(QUrl(""))
            self.right_area.setCurrentIndex(0)
        else:
            if current_row < feed_count - 1:
                self.feed_list.setCurrentRow(current_row)
            else:
                self.feed_list.setCurrentRow(feed_count - 2)
            self.handle_feed(self.feed_list.currentItem())
            self.buffer.message_to_emacs.emit("Removed feed: " + feed_title)

    def feed_exists(self, feed_link):
        if not os.path.exists(self.feed_file_path):
            return False

        try:
            with open(self.feed_file_path, "r") as feed_file:
                feed_dict = json.loads(feed_file.read())
                return feed_link in feed_dict
        except Exception:
            import traceback
            traceback.print_exc()

            return False

    def save_feed(self, feed_object, feed_link, feed_title):
        touch(self.feed_file_path)

        article_ids = list(
            map(lambda post: post.id
                if hasattr(post, 'id') else post.link, feed_object.entries))

        try:
            with open(self.feed_file_path, "r") as feed_file:
                feed_dict = json.loads(feed_file.read())
                if feed_link not in feed_dict:
                    feed_dict[feed_link] = {
                        "title": feed_title,
                        "unread_articles": article_ids
                    }

                    self.save_feed_dict(feed_dict)
                    self.buffer.message_to_emacs.emit("Add feed: " + feed_link)
        except Exception:
            import traceback
            traceback.print_exc()

            self.save_feed_dict({
                feed_link: {
                    "title": feed_title,
                    "unread_articles": article_ids
                }
            })
            self.buffer.message_to_emacs.emit("Add feed: " + feed_link)

    def save_feed_dict(self, feed_dict):
        with open(self.feed_file_path, "w") as f:
            f.write(json.dumps(feed_dict))

    def handle_rss(self, feed_object, feed_link, feed_title, refresh_ui):
        feed_object.feed_link = feed_link
        self.feed_object_dict[feed_link] = feed_object

        self.save_feed(feed_object, feed_link, feed_title)

        self.right_area.setCurrentIndex(1)

        feed_item = QListWidgetItem(self.feed_list)
        feed_item.feed_link = feed_link
        feed_item.feed_title = feed_title
        feed_item_widget = RSSFeedItem(feed_object, len(feed_object.entries))
        feed_item.update_article_num = feed_item_widget.update_article_num
        feed_item.setSizeHint(feed_item_widget.sizeHint())
        self.feed_list.addItem(feed_item)
        self.feed_list.setItemWidget(feed_item, feed_item_widget)

        unread_articles = []
        with open(self.feed_file_path, "r") as feed_file:
            feed_dict = json.loads(feed_file.read())
            if feed_object.feed_link in feed_dict:
                if "unread_articles" in feed_dict[feed_object.feed_link]:
                    unread_articles = ["unread_articles"]

                for index in range(self.feed_list.count()):
                    feed_item = self.feed_list.item(index)
                    if feed_item.feed_link == feed_object.feed_link:
                        feed_item.update_article_num(len(unread_articles))
                        break

        if refresh_ui:
            self.init_article_area(feed_object)

    def init_article_area(self, feed_object):
        self.browser.setUrl(QUrl(feed_object.entries[0].link))

        self.article_list.clear()

        unread_articles = []
        with open(self.feed_file_path, "r") as feed_file:
            feed_dict = json.loads(feed_file.read())
            if feed_object.feed_link in feed_dict and "unread_articles" in feed_dict[
                    feed_object.feed_link]:
                unread_articles = feed_dict[
                    feed_object.feed_link]["unread_articles"]

        for index, post in enumerate(feed_object.entries):
            item_widget = RSSArticleItemWidget(feed_object, post,
                                               unread_articles)
            item = QListWidgetItem(self.article_list)
            item.mark_as_read = item_widget.mark_as_read
            item.post_link = item_widget.post_link
            item.setSizeHint(item_widget.sizeHint())
            item_widget.mark_article_read.connect(self.mark_article_read)
            self.article_list.addItem(item)
            self.article_list.setItemWidget(item, item_widget)

            if index == 0:
                item.mark_as_read()

        self.article_list.setCurrentRow(0)

        if not self.init_select_line:
            self.init_select_line = True
            self.feed_list.setCurrentRow(0)

    def handle_invalid_rss(self, feed_link):
        self.buffer.message_to_emacs.emit("Invalid feed link: " + feed_link)

    def mark_article_read(self, feed_link, post_link):
        if os.path.exists(self.feed_file_path):
            try:
                with open(self.feed_file_path, "r") as feed_file:
                    feed_dict = json.loads(feed_file.read())
                    if feed_link in feed_dict:
                        unread_articles = feed_dict[feed_link][
                            "unread_articles"]

                        if post_link in unread_articles:
                            unread_articles.remove(post_link)
                            feed_dict[feed_link][
                                "unread_articles"] = unread_articles

                            with open(self.feed_file_path, "w") as f:
                                f.write(json.dumps(feed_dict))

                        for index in range(self.feed_list.count()):
                            feed_item = self.feed_list.item(index)
                            if feed_item.feed_link == feed_link:
                                feed_item.update_article_num(
                                    len(unread_articles))
                                break
            except Exception:
                pass

    @interactive()
    def next_subscription(self):
        feed_count = self.feed_list.count()
        current_row = self.feed_list.currentRow()

        if current_row < feed_count - 1:
            self.feed_list.setCurrentRow(current_row + 1)
            self.feed_list.scrollToItem(self.feed_list.currentItem())
            self.handle_feed(self.feed_list.currentItem())
        else:
            self.buffer.message_to_emacs.emit("End of subscribed feeds")

    @interactive()
    def prev_subscription(self):
        current_row = self.feed_list.currentRow()

        if current_row > 0:
            self.feed_list.setCurrentRow(current_row - 1)
            self.feed_list.scrollToItem(self.feed_list.currentItem())
            self.handle_feed(self.feed_list.currentItem())
        else:
            self.buffer.message_to_emacs.emit("Beginning of subscribed feeds")

    @interactive()
    def first_subscription(self):
        self.feed_list.setCurrentRow(0)
        self.feed_list.scrollToItem(self.feed_list.currentItem())
        self.handle_feed(self.feed_list.currentItem())

    @interactive()
    def last_subscription(self):
        feed_count = self.feed_list.count()

        self.feed_list.setCurrentRow(feed_count - 1)
        self.feed_list.scrollToItem(self.feed_list.currentItem())
        self.handle_feed(self.feed_list.currentItem())

    @interactive()
    def next_article(self):
        article_count = self.article_list.count()
        current_row = self.article_list.currentRow()

        if current_row < article_count - 1:
            self.article_list.setCurrentRow(current_row + 1)
            self.article_list.scrollToItem(self.article_list.currentItem())
            self.handle_article(self.article_list.currentItem())
        else:
            self.buffer.message_to_emacs.emit("End of articles")

    @interactive()
    def prev_article(self):
        current_row = self.article_list.currentRow()

        if current_row > 0:
            self.article_list.setCurrentRow(current_row - 1)
            self.article_list.scrollToItem(self.article_list.currentItem())
            self.handle_article(self.article_list.currentItem())
        else:
            self.buffer.message_to_emacs.emit("Beginning of articles")

    @interactive()
    def first_article(self):
        self.article_list.setCurrentRow(0)
        self.article_list.scrollToItem(self.article_list.currentItem())
        self.handle_article(self.article_list.currentItem())

    @interactive()
    def last_article(self):
        article_count = self.article_list.count()

        self.article_list.setCurrentRow(article_count - 1)
        self.article_list.scrollToItem(self.article_list.currentItem())
        self.handle_article(self.article_list.currentItem())
コード例 #50
0
ファイル: mylineedit.py プロジェクト: antonkoatl/MvCatalog
class ExtendedLineEdit(QLineEdit):
    signal_send_movie = pyqtSignal(list)
    signal_search_movie = pyqtSignal(str)
    signal_request_movie_data = pyqtSignal(int)
    signal_set_loading = pyqtSignal(str, bool)

    DEBUG = False

    def __init__(self, parent=None):
        super(ExtendedLineEdit, self).__init__(parent)
        self.movies = []

        self.completer_lw = QListWidget()
        self.model = self.completer_lw.model()

        self.completer = QCompleter(self.model, self)
        self.completer.setPopup(self.completer_lw)
        self.completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion)
        self.completer.setCompletionRole(
            Qt.UserRole
        )  # Change role because default EditRole is paited to list somehow
        self.setCompleter(self.completer)

        self.textEdited.connect(self.text_edited)
        #self.completer.activated[QModelIndex].connect(self.on_completer_activated)
        #self.completer.activated[str].connect(self.on_completer_activated_str)
        self.completer_lw.itemClicked.connect(self.item_clicked)

        self.installEventFilter(self)

    def eventFilter(self, obj, event):
        if event.type() == QEvent.MouseButtonPress:
            if event.button() == Qt.LeftButton:
                self.completer.complete()
        return super(ExtendedLineEdit, self).eventFilter(obj, event)

    def setText(self, text: str) -> None:
        if self.DEBUG: print('setText', text, self.sender())
        super(ExtendedLineEdit, self).setText(text)
        if not isinstance(self.sender(), QCompleter) and text:
            self.text_edited(text)

    @pyqtSlot(list)
    def update_movies_list(self, result):
        if self.DEBUG: print('update_movies_list', result[0], len(result) - 1)
        type = result.pop(0)

        if type == 'db':
            self.movies = [x + [
                type,
            ] for x in result]
            self.completer_lw.clear()
            self.completer.complete()
        else:
            for item in result:
                self.movies.append(item + [
                    type,
                ])

        for item in result:
            cwidget = MyWidget()
            cwidget.label_movie_name.setText(item[1] if item[1] else item[2])
            cwidget.label_original_name.setText(item[2])
            cwidget.label_source.setText(type)
            cwidget.label_year.setText(str(item[3]))

            completer_myQListWidgetItem = QListWidgetItem(self.completer_lw)
            completer_myQListWidgetItem.setSizeHint(cwidget.sizeHint())
            completer_myQListWidgetItem.setData(Qt.UserRole, item[1])
            self.completer_lw.addItem(completer_myQListWidgetItem)
            self.completer_lw.setItemWidget(completer_myQListWidgetItem,
                                            cwidget)

        if self.hasFocus() and not self.completer_lw.isVisible() and len(
                self.movies) > 0:
            self.completer.complete()

    @pyqtSlot(str)
    def text_edited(self, text):
        if self.DEBUG: print('text_edited', text, self.sender())
        if text and isinstance(self.sender(), ExtendedLineEdit):
            self.signal_search_movie.emit(text)

    @pyqtSlot(str)
    def on_completer_activated_str(self, name: str):
        if self.DEBUG: print('on_completer_activated_str', name)

    @pyqtSlot(QModelIndex)
    def on_completer_activated(self, index: QModelIndex):
        if self.DEBUG: print('on_completer_activated', index.row())
        item = self.movies[index.row()]

        if len(item) > 13:
            self.signal_send_movie.emit(item[:13])
            self.signal_request_movie_data.emit(item[13])
        else:
            self.signal_send_movie.emit(item)

    @pyqtSlot(QListWidgetItem)
    def item_clicked(self, item: QListWidgetItem):
        if self.DEBUG: print('item_clicked', item, [i[1] for i in self.movies])
        index = self.completer_lw.indexFromItem(item)
        item = self.movies[index.row()]
        type = item[-1]

        if type == 'db':
            self.signal_send_movie.emit(item)
        else:
            self.signal_set_loading.emit('movie', True)

            if len(item) > 13:
                self.signal_send_movie.emit(item[:13])
                self.signal_request_movie_data.emit(item[13])
            else:
                self.signal_send_movie.emit(item)

    def reset(self):
        if self.DEBUG: print('reset')
        self.completer_lw.clear()
        self.clearFocus()
コード例 #51
0
class ContactCards(QWidget):
    def __init__(self, context: ListContext, parent: Any = None) -> None:
        super().__init__(parent)

        self._context = context

        self._layout = QVBoxLayout()
        self._layout.setContentsMargins(0, 0, 0, 0)
        self._layout.setSpacing(0)

        self._empty_label = None
        self._list = None

        contact_identities = self._context.wallet_api.get_identities()
        if len(contact_identities) > 0:
            for contact, identity in sorted(contact_identities,
                                            key=lambda t: t[0].label):
                self._add_identity(contact, identity)
        else:
            self._add_empty_label()

        self.setLayout(self._layout)

        self._context.wallet_api.contact_changed.connect(
            self._on_contact_changed)

    def _add_identity(self, contact: ContactEntry,
                      identity: ContactIdentity) -> None:
        self._remove_empty_label()
        if self._list is None:
            self._list = QListWidget(self)
            self._list.setSortingEnabled(True)
            self._layout.addWidget(self._list)

        test_card = ContactCard(self._context, contact, identity)
        test_card.setSizePolicy(QSizePolicy.MinimumExpanding,
                                QSizePolicy.Minimum)

        list_item = QListWidgetItem()
        list_item.setText(contact.label)
        # The item won't display unless it gets a size hint. It seems to resize horizontally
        # but unless the height is a minimal amount it won't do anything proactive..
        list_item.setSizeHint(QSize(256, 130))
        self._list.addItem(list_item)
        self._list.setItemWidget(list_item, test_card)

    def _remove_identity(self, contact: ContactEntry,
                         identity: ContactIdentity) -> None:
        removal_entries = []
        for i in range(self._list.count() - 1, -1, -1):
            item = self._list.item(i)
            widget = self._list.itemWidget(item)
            if identity is None and widget._contact.contact_id == contact.contact_id:
                self._list.takeItem(i)
            elif widget._identity.identity_id == identity.identity_id:
                self._list.takeItem(i)

        if self._list.count() == 0:
            # Remove the list.
            self._list.setParent(None)
            self._list = None

            # Replace it with the placeholder label.
            self._add_empty_label()

    def _on_contact_changed(self, added: bool, contact: ContactEntry,
                            identity: ContactIdentity) -> None:
        if added:
            self._add_identity(contact, identity)
        else:
            self._remove_identity(contact, identity)

    def _add_empty_label(self) -> None:
        self._empty_label = QLabel(
            _("You do not currently have any contacts."))
        self._empty_label.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        self._layout.addWidget(self._empty_label)

    def _remove_empty_label(self) -> None:
        if self._empty_label is not None:
            self._empty_label.setParent(None)
            self._empty_label = None
コード例 #52
0
ファイル: MainWindow.py プロジェクト: Enhisir/Focus-To-Do
class MainWindow(QWidget):
    def __init__(self):
        super(QWidget, self).__init__()
        self.setWindowIcon(QIcon(os.path.join(path, "img", 'icon.ico')))
        self.setGeometry(200, 200, 600, 600)
        self.setWindowTitle("Focus")
        self.DB = DBEngine()
        self.initUI()

    def initUI(self):
        self.gridLayout = QGridLayout(self)

        self.label = QLabel("Мои задания")
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)

        self.gridLayout.addItem(
            QSpacerItem(87, 20, QSizePolicy.Expanding, QSizePolicy.Minimum), 0,
            1, 1, 1)

        self.status_label = QLabel("Состояние:")
        self.status_label.setMinimumSize(QtCore.QSize(100, 20))
        self.gridLayout.addWidget(self.status_label, 0, 2, 1, 1)

        self.status_box = QComboBox(self)
        self.status_box.setMinimumSize(QtCore.QSize(100, 0))

        self.status_box.addItem("В процессе")
        self.status_box.addItem("Сделано")
        self.status_box.addItem("Просрочено")
        self.status_box.addItem("Все")
        self.status_box.setCurrentIndex(3)
        self.gridLayout.addWidget(self.status_box, 0, 3, 1, 3)
        self.status_box.currentIndexChanged.connect(self.customize_table)

        self.listWidget = QListWidget(self)
        self.load_table(self.DB.get_data(), clear_data=True)
        self.gridLayout.addWidget(self.listWidget, 1, 0, 1, 6)

        self.new_task_btn = QPushButton(text="Новое задание")
        self.new_task_btn.setMinimumSize(QtCore.QSize(100, 50))
        self.gridLayout.addWidget(self.new_task_btn, 2, 0, 1, 2)
        self.new_task_btn.clicked.connect(self.new_task_action)

        self.mark_as_btn = QPushButton(text="Отметить как выполненное")
        self.mark_as_btn.setMinimumSize(QtCore.QSize(200, 50))
        self.gridLayout.addWidget(self.mark_as_btn, 2, 2, 1, 2)
        self.mark_as_btn.clicked.connect(self.mark_as_action)

        self.delete_btn = QPushButton(text="Удалить выделенное")
        self.delete_btn.setMinimumSize(QtCore.QSize(150, 50))
        self.gridLayout.addWidget(self.delete_btn, 2, 4, 1, 2)
        self.delete_btn.clicked.connect(self.delete_action)

    def new_task_action(self):
        item = ToDoWidget(Task(), self)
        item.edit_btn.click()
        if item.is_created:
            item.is_added_to_List = True
            widget_item = QListWidgetItem(self.listWidget)
            widget_item.setSizeHint(item.sizeHint())
            self.listWidget.addItem(widget_item)
            self.listWidget.setItemWidget(widget_item, item)
        self.customize_table()

    def mark_as_action(self):
        widget = self.listWidget.itemWidget(self.listWidget.currentItem())
        if widget is not None:
            widget.task.status_id = 1
            widget.display()
        self.customize_table()

    def delete_action(self):
        self.listWidget.takeItem(self.listWidget.currentRow())

    def load_table(self, data, clear_data=False):
        self.listWidget.clear()
        for task in data:
            item = ToDoWidget(task, self)
            widget_item = QListWidgetItem(self.listWidget)
            widget_item.setSizeHint(item.sizeHint())
            self.listWidget.addItem(widget_item)
            self.listWidget.setItemWidget(widget_item, item)
        if clear_data:
            self.DB.clear_data()

    def customize_table(self):
        index = self.status_box.currentIndex()
        self.save_changes()
        data = self.DB.get_data()
        if index == 3:
            self.load_table(data, clear_data=True)
        else:
            self.load_table(filter(lambda x: x.status_id == index, data))
            self.DB.update_data(
                list(filter(lambda x: x.status_id != index, data)))

    def save_changes(self):
        self.DB.update_data([
            self.listWidget.itemWidget(self.listWidget.item(i)).task
            for i in range(self.listWidget.count())
        ],
                            mode="a")

    def closeEvent(self, event):
        self.save_changes()
        self.DB.close()
        super(MainWindow, self).closeEvent(event)
コード例 #53
0
ファイル: gui.py プロジェクト: simon-the-shark/quizzo_learn
class NewTestWindow(QWidget):
    """ allows to create a new test """

    def __init__(self):
        super().__init__()
        self.setWindowIcon(QIcon(os.path.join(os.pardir, "res", "img", "logo.png")))
        self.setWindowTitle("QUIZZO LEARN")
        self.resize(900, 650)
        center(self)
        self.load_ui()

    def init_ui(self, test_name):
        self.test_name = test_name
        self.number_of_frases = 0
        self.QList.clear()
        self.show()

    def load_ui(self):
        back_button = QPushButton("<= WRÓĆ")
        back_button.setStyleSheet("background-color: YellowGreen; color:purple")
        back_button.clicked.connect(self.back_button_act)

        add_button = QPushButton()
        add_button.setIcon(QIcon(os.path.join(os.pardir, "res", "img", "add-icon.png")))
        add_button.setIconSize(QSize(100, 100))
        add_button.setSizePolicy(QSizePolicy.Expanding,
                                 QSizePolicy.Preferred)
        add_button.clicked.connect(self.add)

        OK_button = QPushButton("ZAPISZ I \nROZPOCZNIJ \n TEST")
        OK_button.setSizePolicy(QSizePolicy.Expanding,
                                QSizePolicy.Preferred)
        OK_button.setStyleSheet("background-color: LimeGreen; color:AntiqueWhite")
        font = QFont("Serif", 15)
        OK_button.setFont(font)
        OK_button.clicked.connect(self.save)

        vbox = QVBoxLayout()
        vbox.addStretch(2)
        vbox.addWidget(add_button, 2)
        vbox.addStretch(2)
        vbox.addWidget(OK_button, 3)

        hbox2 = QHBoxLayout()
        hbox2.addWidget(back_button)
        hbox2.addStretch(4)

        self.QList = QListWidget()
        self.QList.setStyleSheet("background-color:PeachPuff ")

        vbox2 = QVBoxLayout()
        vbox2.addLayout(hbox2)
        vbox2.addWidget(self.QList)

        hbox = QHBoxLayout()
        hbox.addLayout(vbox2, 7)
        hbox.addLayout(vbox, 1)

        self.setLayout(hbox)

    def back_button_act(self):
        alert = QMessageBox().warning(self, "JESTEŚ PEWIEN ??",
                                      "UWAGA !!! \n STRACISZ WPROWADZONE SŁOWA \n JESTEŚ PEWIEN ??", QMessageBox.Yes,
                                      QMessageBox.No)
        if alert == QMessageBox.Yes:
            self.close()
            menu_window.show()

    def add(self):
        frase1 = text_dialog(self, "FRAZA 1", "  PODAJ PROSZĘ FRAZĘ 1")
        if frase1 is None:
            QMessageBox.warning(self, "PUSTE", "Prosze podać jakąś fraze", QMessageBox.Ok)
            return None
        frase2 = text_dialog(self, "FRAZA 2", "  PODAJ PROSZĘ FRAZĘ 2")
        if frase2 is None:
            QMessageBox.warning(self, "PUSTE", "Prosze podać jakąś fraze", QMessageBox.Ok)
            return None

        item = QListWidgetItem()
        item.id = self.number_of_frases
        item.frase1 = frase1
        item.frase2 = frase2
        item.is_empty = False

        widget_item = QItemQuestion(self.number_of_frases, frase1, frase2)
        item.setSizeHint(widget_item.sizeHint())

        self.number_of_frases += 1

        self.QList.addItem(item)
        self.QList.setItemWidget(item, widget_item)

    def save(self):
        dict_of_questions = {}  # yeah it is something like LIST OF GOD
        reversed_dict_of_questions = {}

        i = 0
        i2 = self.QList.count()
        while i < i2:
            item = self.QList.item(i)
            if not item.is_empty:
                dict_of_questions[item.frase1] = item.frase2
                reversed_dict_of_questions[item.frase2] = item.frase1
            i += 1
        if len(dict_of_questions) < 1:
            QMessageBox.warning(self, "PUSTE", "NIE DA RADY STWORZYĆ PUSTEGO TESTU !!!", QMessageBox.Ok)
            return None

        quizzo_learn.files_interactions.save_test(dict_of_questions,
                                                  os.path.join(os.pardir, "res", "my_tests", self.test_name + ".test"))
        self.close()
        start_window.label.setText(self.test_name)
        start_window.init_ui([dict_of_questions, reversed_dict_of_questions])
        my_tests_window.refresh()
        build_big_test_window.refresh()

    def deleting(self, id):
        i = 0
        i2 = self.QList.count()
        while i < i2:
            item = self.QList.item(i)
            if item.id == id:
                self.QList.removeItemWidget(item)
                item.is_empty = True
            i += 1
コード例 #54
0
class PlotSplitter(QSplitter):
    """Pyqt5 widget to show data in plots and lists."""

    # Signals
    msg2statusbar = pyqtSignal(str)
    msg2TextArea = pyqtSignal(str)

    def __init__(self):
        """
        Constructor
        """
        super().__init__()

        # Instance variables
        self.wf = WaterFrame()  # pylint: disable=C0103
        # List of PlotWidget, to control them in any case
        self.plot_widget_list = []

        self.init_ui()

    def init_ui(self):
        """UI creator"""

        # Lists
        self.data_list = QListWidget(self)
        self.data_list.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.data_list.itemClicked.connect(self.data_list_click)
        self.graph_list = QListWidget(self)
        self.graph_list.itemClicked.connect(self.graph_click)

        # PlainTextEdit
        self.other_info_plain_text = QPlainTextEdit(self)
        self.metadata_plain_text = QPlainTextEdit(self)

        # Labels
        metadata_label = QLabel("Metadata")
        data_label = QLabel("Data")
        graph_label = QLabel("Graph")
        info_label = QLabel("Other information")

        # DropWidget
        self.drop_widget = DropWidget()
        self.drop_widget.list2drop[list, list, bool].connect(self.drop_data)
        self.drop_widget.hide()

        # Group Box
        plot_group_box = QGroupBox("Plot properties", self)
        v_plot_group_box = QVBoxLayout()
        # - RadioButton
        self.auto_plot_radio_button = QRadioButton("Time series plot", self)
        self.auto_plot_radio_button.setChecked(True)
        self.multiple_parameter_radio_button = QRadioButton(
            "Multiparameter", self)
        self.correlation_radio_button = QRadioButton("Correlation", self)
        self.histogram_radio_button = QRadioButton("Histogram", self)
        self.parameter_qc_radio_button = QRadioButton("QC of the parameter",
                                                      self)
        v_plot_group_box.addWidget(self.auto_plot_radio_button)
        v_plot_group_box.addWidget(self.histogram_radio_button)
        v_plot_group_box.addWidget(self.multiple_parameter_radio_button)
        v_plot_group_box.addWidget(self.correlation_radio_button)
        v_plot_group_box.addWidget(self.parameter_qc_radio_button)
        plot_group_box.setLayout(v_plot_group_box)

        # QCWidget
        self.qc_widget = QCWidget()
        self.qc_widget.list2qc[list].connect(self.apply_qc)
        self.qc_widget.hide()

        # RenameWidget
        self.rename_widget = RenameWidget()
        self.rename_widget.key2change[str, str].connect(self.apply_rename)
        self.rename_widget.hide()

        # ResampleWidget
        self.resample_widget = ResampleWidget()
        self.resample_widget.resampleRule[str].connect(self.apply_resample)
        self.resample_widget.hide()

        # SliceWidget
        self.slice_widget = SliceWidget()
        self.slice_widget.sliceTimes[str, str].connect(self.apply_slice)
        self.slice_widget.hide()

        # Splitters
        self.v_data_splitter = QSplitter(Qt.Vertical)
        # Custom Widget Metadata
        self.v_metadata_widget = QWidget()

        # Buttons
        # - For metadata area
        hide_metadata_button = QPushButton("Hide")
        hide_metadata_button.clicked.connect(self.v_metadata_widget.hide)
        # - For data Area
        plot_button = QPushButton("Plot")
        plot_button.clicked.connect(self.add_plot)
        hide_data_button = QPushButton("Hide")
        hide_data_button.clicked.connect(self.v_data_splitter.hide)

        # Custom Widget Data
        # - Data Widget
        parameter_widget = QWidget()
        # -- Layout
        v_data = QVBoxLayout()
        v_data.addWidget(data_label)
        v_data.addWidget(self.data_list)
        v_data.addWidget(plot_group_box)
        v_data.addWidget(plot_button)
        parameter_widget.setLayout(v_data)
        # - Graph Widget
        graph_widget = QWidget()
        # -- Layout
        v_graph = QVBoxLayout()
        v_graph.addWidget(graph_label)
        v_graph.addWidget(self.graph_list)
        v_graph.addWidget(hide_data_button)
        graph_widget.setLayout(v_graph)
        # - Data splitter
        self.v_data_splitter.addWidget(parameter_widget)
        self.v_data_splitter.addWidget(graph_widget)

        # Layouts
        # - Metadata -
        v_metadata = QVBoxLayout()
        v_metadata.addWidget(metadata_label)
        v_metadata.addWidget(self.metadata_plain_text)
        v_metadata.addWidget(info_label)
        v_metadata.addWidget(self.other_info_plain_text)
        v_metadata.addWidget(hide_metadata_button)
        self.v_metadata_widget.setLayout(v_metadata)

        # Splitter (self)
        # - Layout for actions
        v_actions_widget = QWidget()
        v_actions = QVBoxLayout()
        v_actions.addWidget(self.rename_widget)
        v_actions.addWidget(self.resample_widget)
        v_actions.addWidget(self.drop_widget)
        v_actions.addWidget(self.slice_widget)
        v_actions.addStretch()
        v_actions_widget.setLayout(v_actions)
        # - Add to self (splitter)
        self.addWidget(self.qc_widget)
        self.addWidget(v_actions_widget)
        self.addWidget(self.v_metadata_widget)
        self.addWidget(self.v_data_splitter)

    def data_list_click(self):
        """Action on lick item of data_list"""
        if (self.auto_plot_radio_button.isChecked()
                or self.histogram_radio_button.isChecked()):
            self.add_plot()

    def add_plot(self):
        """It creates a FigureCanvas with the input figure"""

        self.msg2statusbar.emit("Making the figure")

        # Create key list
        keys = [item.text() for item in self.data_list.selectedItems()]

        # If nothing is selected, go out
        if not keys:
            self.msg2statusbar.emit("Ready")
            return

        # Check if it is a QC plot
        if self.parameter_qc_radio_button.isChecked():
            keys = [keys[0] + "_QC"]

        # Check if it is a correlation
        if self.correlation_radio_button.isChecked():
            plot_widget = ScatterMatrixPlotWidget(wf=self.wf, keys=keys)
            self.addWidget(plot_widget)
            self.msg2statusbar.emit("Ready")
            return

        # Create name of the plot
        name = '_'.join(keys)

        if self.histogram_radio_button.isChecked():
            name = "hist_" + name

        # Check if plot is done
        new = True
        for plot_widget in self.plot_widget_list:
            if plot_widget.name == name:
                if ~plot_widget.isVisible():
                    plot_widget.refresh_plot()
                    plot_widget.show()
                new = False
                break

        # Create the plot if is new
        if new:
            if len(keys) == 1 and "_QC" in keys[0]:
                plot_widget = QCPlotWidget(wf=self.wf, key=keys[0])
            else:
                if self.histogram_radio_button.isChecked():
                    plot_widget = HistoPlotWidget(wf=self.wf, keys=keys)
                else:
                    plot_widget = TSPlotWidget(wf=self.wf, keys=keys)
                plot_widget.msg2statusbar[str].connect(self.msg2statusbar.emit)
            self.addWidget(plot_widget)
            # Add the widget to the list
            self.plot_widget_list.append(plot_widget)

        self.msg2statusbar.emit("Ready")

    def add_qc_bar_plot(self):
        """
        It creates a FigureCanvas with the input figure (QC)
        """
        self.msg2statusbar.emit("Making the figure")
        # Check if the plot exists
        plot_widget = None
        for plot_widget_ in self.plot_widget_list:
            if plot_widget_.name == "QC":
                plot_widget = plot_widget_
                plot_widget.wf = self.wf
                plot_widget.refresh_plot()
                plot_widget.show()
                break
        if plot_widget is None:

            plot_widget = QCBarPlotWidget(wf=self.wf)
            self.addWidget(plot_widget)
            # Add the widget to the list
            self.plot_widget_list.append(plot_widget)
        self.msg2statusbar.emit("Ready")

    def add_spectro_plot(self):
        """It ads the SpectroplotWidget to the screen"""

        self.msg2statusbar.emit("Making the figure")
        # Check if the plot exists
        plot_widget = None
        for plot_widget_ in self.plot_widget_list:
            if plot_widget_.name == "Spectrogram":
                plot_widget = plot_widget_
                plot_widget.wf = self.wf
                plot_widget.refresh_plot()
                plot_widget.show()
                break
        if plot_widget is None:
            plot_widget = SpectrogramPlotWidget(wf=self.wf)
            self.addWidget(plot_widget)
            # Add the widget to the list
            self.plot_widget_list.append(plot_widget)
        self.msg2statusbar.emit("Ready")

    def open_data(self, path, concat=False):
        """
        It opens the netcdf of the path.

        Parameters
        ----------
            path: str or WaterFrame
                Path where the file is or WaterFrame object.
            concat: bool, optional (concat = False)
                It adds the new dataframe to the current dataframe.

        Returns
        -------
            True/False: bool
                It indicates if the operation is ok.
        """
        debug = True  # Variable for debug reasons

        if debug:
            print("In PlotSplitter.open_data():")
            print("  - Emit msg2statusbar: Opening data")

        self.msg2statusbar.emit("Opening data")
        if isinstance(path, str):
            if debug:
                print("  - path is a string:", path)
            # Obtain type of file
            extension = path.split(".")[-1]
            # Init ok
            ok = False  # pylint: disable=C0103
            wf_new = WaterFrame()
            if extension == "nc":
                ok = wf_new.from_netcdf(path)  # pylint: disable=C0103
            elif extension == "pkl":
                ok = wf_new.from_pickle(path)  # pylint: disable=C0103
            if ok:
                # Check if we want actual data
                if not concat:
                    self.new_waterframe()
                self.wf.concat(wf_new)

                self.msg2TextArea.emit("Working with file {}".format(path))
                # Add metadata information into metadataList
                self.add_metadata(self.wf.metadata)
                # Add other information
                self.other_info_plain_text.setPlainText(repr(self.wf))
                # Add data information into data_list
                self.add_data(self.wf.data)
                # Plot QC
                self.add_qc_bar_plot()
                self.msg2statusbar.emit("Ready")
                if debug:
                    print("  - Emit msg2statusbar: Ready")
                    print("  - Exit from PlotSplitter.open_data()")
                return True
            else:
                self.msg2statusbar.emit("Error opening data")
                if debug:
                    print("  - Emit msg2statusbar: Error opening data")
                    print("  - Exit from PlotSplitter.open_data()")
                return False
        else:
            # Path is a WaterFrame
            if debug:
                print("  - path is a WaterFrame")
                print(path)
            # Check if there is no data in the waterframe
            if path.data.empty:
                return False

            # Check if it is a dataframe of an acoustic data.
            # In this case, we are going to delete the previous dataframe.
            if "Sequence" in self.wf.data.keys():
                self.wf.clear()
            self.wf.concat(path)

            # Add data information into data_list
            self.add_data(self.wf.data)
            self.add_metadata(self.wf.metadata)
            # Add other information
            self.other_info_plain_text.setPlainText(repr(self.wf))
            # Plot QC
            self.add_qc_bar_plot()
            return True

    def add_metadata(self, metadata_dict):
        """
        Add Metadata information into self.metadata_plain_text
        :param metadata_dict: WaterFrame Metadata Dictionary
        """
        # Clear the list
        self.metadata_plain_text.clear()

        items = []
        msg = "\nMetadata:"
        for key, value in metadata_dict.items():
            items.append("{}: {}".format(key, value))
            msg += "\n- {}: {}".format(key, value)
        self.metadata_plain_text.setPlainText(msg[11:])
        # Send a message to the text area
        self.msg2TextArea.emit(msg)

    def add_data(self, data):
        """
        Add data names into self.data_list
        :param data: WaterFrame data variable
        """
        def is_acoustic_data(a):  # pylint: disable=C0103
            # will be True also for 'NaN'
            if a == "Sequence":
                return True
            elif a == "Data Points":
                return True
            try:
                float(a)
                return True
            except ValueError:
                return False

        # Clear the list
        self.data_list.clear()
        # Parameter keys (without QC)
        # NO DEPTH in nc files, NO TIME
        keys_to_work = [
            key for key in data.keys() if 'TIME' not in key
            if not is_acoustic_data(key) if key + "_QC" in data.keys()
        ]
        self.data_list.addItems(keys_to_work)
        # Add graphs
        self.graph_list.clear()
        self.graph_list.addItem("QC")
        # Check if we have acoustic data
        for key in data.keys():
            if is_acoustic_data(key):
                self.graph_list.addItem("Spectrogram")
                break

        # Add tooltip
        msg = "\nData:"
        for i in range(self.data_list.count()):
            if "_QC" in self.data_list.item(i).text():
                self.data_list.item(i).setToolTip('QC flags of {}'.format(
                    self.data_list.item(i).text()[:-3]))
            else:
                try:
                    self.data_list.item(i).setToolTip('{} ({})'.format(
                        self.wf.meaning[self.data_list.item(i).text()]
                        ['long_name'], self.wf.meaning[self.data_list.item(
                            i).text()]['units']))
                    msg += "\n- {}: {} ({})".format(
                        self.data_list.item(i).text(), self.wf.meaning[
                            self.data_list.item(i).text()]['long_name'],
                        self.wf.meaning[self.data_list.item(
                            i).text()]['units'])
                except KeyError:
                    pass
        # Send a message to the text area
        self.msg2TextArea.emit(msg)
        # Send the labels to the drop_widget
        self.drop_widget.add_labels(keys_to_work)
        self.qc_widget.add_labels(keys_to_work)
        self.rename_widget.add_labels(keys_to_work)
        self.slice_widget.refresh(self.wf.data.index[0],
                                  self.wf.data.index[-1])

    def save_data(self, path):
        """
        Save current data into a pickle file
        :param path: File path
        :return: Bool
        """
        self.msg2statusbar.emit("Saving data")
        extension = path.split(".")[-1]
        # Init ok
        ok = False  # pylint: disable=C0103
        if extension == "nc":
            pass
        elif extension == "pkl":
            ok = self.wf.to_pickle(path)  # pylint: disable=C0103
        elif extension == "csv":
            ok = self.wf.to_csv(path)  # pylint: disable=C0103

        if ok:
            self.msg2TextArea.emit("Data saved on file {}".format(path))
            self.msg2statusbar.emit("Ready")
        return ok

    def drop_data(self, labels, flag_list, drop_nan):
        """
        Delete some parameters from self.wf and refresh the lists
        :param labels: list of labels to drop
        :param flag_list: list of flags to drop
        :return:
        """
        self.msg2TextArea.emit("Deleting data")

        # This is a trick, delete the list if is a list of None
        if flag_list[0] is None:
            flag_list = None

        if flag_list:
            self.wf.use_only(parameters=labels, flags=[0, 1], dropnan=drop_nan)
        else:
            # Delete the parameters
            self.wf.drop(keys=labels, flags=flag_list)
        # Refresh the lists
        self.add_data(self.wf.data)

        # Delete plots with the key
        for label in labels:
            for plot_widget in self.plot_widget_list:
                if plot_widget.name == "QC":
                    plot_widget.refresh_plot()
                if label == plot_widget.name or label+"_" in \
                   plot_widget.name or "_"+label in plot_widget.name:
                    plot_widget.deleteLater()
                    self.plot_widget_list.remove(plot_widget)

        # Send message
        msg = ""
        if flag_list is None:
            for label in labels:
                if '_QC' in label:
                    continue
                msg += "{} ".format(label)
            msg += "deleted"
        else:
            msg += "Data with QC Flags "
            for flag in flag_list:
                msg += "{}, ".format(flag)
            msg += "from "
            for label in labels:
                if '_QC' in label:
                    continue
                msg += "{}, ".format(label)
            msg += "deleted"
        self.msg2TextArea.emit("\n{}".format(msg))
        self.msg2statusbar.emit(msg)

    def apply_qc(self, list_qc):
        """
        Apply the QC procedures
        :param list_qc:
        :return:
        """
        def do_it(key_in):
            """
            Common part, to not repeat code
            :param key_in: key to apply QC tests
            """
            if '_QC' in key_in:
                return
            if list_qc[0]:
                #  Reset flags
                self.msg2statusbar.emit("Setting flags from {} to {}".format(
                    key_in, list_qc[0]))
                self.wf.reset_flag(parameters=key_in, flag=int(list_qc[0]))
                self.msg2statusbar.emit("Ready")
            if list_qc[3]:
                # Spike test
                threshold = float(list_qc[4].replace(',', '.'))
                self.msg2statusbar.emit(
                    "Applying spike test to "
                    "{}, with rolling window {} and threshold {}".format(
                        key_in, list_qc[5], threshold))
                self.wf.spike_test(parameters=key_in,
                                   window=int(list_qc[5]),
                                   threshold=threshold,
                                   flag=int(list_qc[3]))
                self.msg2statusbar.emit("Ready")
            if list_qc[1]:
                # Range test
                self.msg2statusbar.emit(
                    "Applying range test to {}".format(key_in))
                self.wf.range_test(parameters=key_in, flag=int(list_qc[1]))
                self.msg2statusbar.emit("Ready")
            if list_qc[2]:
                # Flat test
                self.msg2statusbar.emit("Applying flat test to"
                                        " {}, with rolling window {}".format(
                                            key_in, list_qc[5]))
                self.wf.flat_test(parameters=key_in,
                                  window=int(list_qc[5]),
                                  flag=int(list_qc[2]))
                self.msg2statusbar.emit("Ready")
            if list_qc[6]:
                # Flag to flag
                self.msg2statusbar.emit("Changing flags of "
                                        "{} from {} to {}".format(
                                            key_in, list_qc[6], list_qc[7]))
                self.wf.flag2flag(parameters=key_in,
                                  original_flag=int(list_qc[6]),
                                  translated_flag=int(list_qc[7]))
                self.msg2statusbar.emit("Ready")

        self.msg2statusbar.emit("Creating QC flags")

        if list_qc[8] == 'all':
            for key in self.wf.parameters():
                do_it(key_in=key)
        else:
            for i in range(8, len(list_qc)):
                key = list_qc[i]
                do_it(key_in=key)

        self.msg2statusbar.emit("Updating graphs")
        # Refresh the QC graph
        for plot_widget in self.plot_widget_list:
            if "QC" in plot_widget.name:

                if plot_widget.isVisible():
                    plot_widget.refresh_plot()
                # Show the QCBarPlot
                elif plot_widget.name == "QC":
                    plot_widget.refresh_plot()
                    plot_widget.show()
        self.msg2statusbar.emit("Ready")

    def apply_rename(self, original_key, new_key):
        """It renames keys from a WaterFrame"""
        # Rename key from the Waterframe
        self.msg2statusbar.emit("Changing name {} to {}".format(
            original_key, new_key))
        self.wf.rename(original_key, new_key)
        # Rename the key of the plotWidgets if it process
        for plot_widget in self.plot_widget_list:
            if isinstance(plot_widget.key, list):
                for i, key in enumerate(plot_widget.key):
                    if key == original_key:
                        plot_widget.key[i] = new_key
                        plot_widget.name = plot_widget.name.replace(
                            original_key, new_key)
                        plot_widget.refresh_plot()
            else:
                if plot_widget.name == "QC":
                    plot_widget.refresh_plot()
                elif plot_widget.key == original_key:
                    plot_widget.key = new_key
                    plot_widget.name = new_key
                    plot_widget.refresh_plot()
        # Add data information into data_list
        self.add_data(self.wf.data)
        self.msg2statusbar.emit("Ready")
        self.msg2TextArea.emit("Key name {} changed to {}.".format(
            original_key, new_key))

    def apply_resample(self, rule):
        """
        It applies the resample function to  self.waterframe
        :param rule: Rule to resample.
        """
        self.msg2statusbar.emit("Resampling data")
        self.wf.resample(rule)
        self.msg2statusbar.emit("Ready")

        self.msg2statusbar.emit("Updating graphs")
        # Refresh the QC graph
        for plot_widget in self.plot_widget_list:
            if "QC" in plot_widget.name:

                if plot_widget.isVisible():
                    plot_widget.refresh_plot()
                # Show the QCBarPlot
                elif plot_widget.name == "QC":
                    plot_widget.refresh_plot()
                    plot_widget.show()
        self.msg2statusbar.emit("Ready")

    def apply_slice(self, start, stop):
        """
        It applies the resample function to  self.waterframe
        :param start: Start time.
        :param stop: Stop time
        """
        self.msg2statusbar.emit("Slicing data")

        self.wf.slice_time(start, stop)

        self.add_data(self.wf.data)
        self.refresh_plots()

        self.msg2statusbar.emit("Ready")
        self.msg2TextArea.emit("Dataframe sliced from {} to {}.".format(
            start, stop))

    def graph_click(self, item):
        """Function on click the plot button"""
        if item.text() == "QC":
            self.add_qc_bar_plot()
        elif item.text() == "Spectrogram":
            self.add_spectro_plot()

    def new_waterframe(self):
        """Create a new WaterFrame object and clean all screens."""
        self.wf = WaterFrame()
        # Delete all plots
        for plot_widget in self.plot_widget_list:
            plot_widget.deleteLater()
        self.plot_widget_list.clear()
        # Hide the widget
        self.hide()

    def refresh_plots(self):
        """It refresh all plots"""
        self.msg2statusbar.emit("Refreshing plots")

        for plot_widget in self.plot_widget_list:
            try:
                plot_widget.refresh_plot()
            except KeyError:
                self.plot_widget_list.remove(plot_widget)
                plot_widget.hide()
                plot_widget.deleteLater()

        self.msg2statusbar.emit("Ready")
コード例 #55
0
class EasyQListSuite(QWidget):
    """
    Provide a window that has a QListWidget with 'Add' and 'Remove' button.
    """
    def __init__(self, *__args):
        super(EasyQListSuite, self).__init__(*__args)

        self.__item_list = []

        self.__list_main = QListWidget(self)
        self.__button_add = QPushButton('Add')
        self.__button_remove = QPushButton('Remove')

        self.__init_ui()
        self.__config_ui()

    def update_item(self, items: [(str, any)]):
        """
        Specify a (key, value) tuple list.
            Key will be displayed as list item.
            Value can be retrieved by get_select_items()
        :param items: Specify a (key, value) tuple list.
        :return: None
        """
        self.__item_list.clear()
        for item in items:
            if isinstance(item, (list, tuple)):
                if len(item) == 0:
                    continue
                elif len(item) == 1:
                    self.__item_list.append((str(item[0]), item[0]))
                else:
                    self.__item_list.append((str(item[0]), item[1]))
            else:
                self.__item_list.append((str(item), item))
        self.__update_list()

    def get_select_items(self) -> [any]:
        """
        Get the value of the items that user selected.
        :return: The value of the items that user selected.
        """
        return [
            item.data(Qt.UserRole)
            for item in self.__list_main.selectedItems()
        ]

    def set_add_handler(self, handler):
        """
        Add a handler for 'Add' button clicking
        :param handler: The handler that connects to the button clicked signal
        :return:
        """
        self.__button_add.clicked.connect(handler)

    def set_remove_handler(self, handler):
        """
        Add a handler for 'Remove' button clicking
        :param handler: The handler that connects to the button clicked signal
        :return:
        """
        self.__button_remove.clicked.connect(handler)

    # ---------------------------------------- Private ----------------------------------------

    def __init_ui(self):
        main_layout = QVBoxLayout()
        self.setLayout(main_layout)

        line_layout = QHBoxLayout()
        line_layout.addWidget(self.__button_add)
        line_layout.addWidget(self.__button_remove)

        main_layout.addWidget(self.__list_main)
        main_layout.addLayout(line_layout)

    def __config_ui(self):
        pass

    def __update_list(self):
        self.__list_main.clear()
        for text, obj in self.__item_list:
            item = QListWidgetItem()
            item.setText(text)
            item.setData(Qt.UserRole, obj)
            self.__list_main.addItem(item)
コード例 #56
0
class GuiDocMerge(QDialog):
    def __init__(self, theParent, theProject):
        QDialog.__init__(self, theParent)

        logger.debug("Initialising GuiDocMerge ...")
        self.setObjectName("GuiDocMerge")

        self.mainConf = nw.CONFIG
        self.theParent = theParent
        self.theProject = theProject
        self.sourceItem = None

        self.outerBox = QVBoxLayout()
        self.setWindowTitle(self.tr("Merge Documents"))

        self.headLabel = QLabel("<b>%s</b>" % self.tr("Documents to Merge"))
        self.helpLabel = QHelpLabel(
            self.tr("Drag and drop items to change the order."),
            self.theParent.theTheme.helpText)

        self.listBox = QListWidget()
        self.listBox.setDragDropMode(QAbstractItemView.InternalMove)
        self.listBox.setMinimumWidth(self.mainConf.pxInt(400))
        self.listBox.setMinimumHeight(self.mainConf.pxInt(180))

        self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok
                                          | QDialogButtonBox.Cancel)
        self.buttonBox.accepted.connect(self._doMerge)
        self.buttonBox.rejected.connect(self._doClose)

        self.outerBox.setSpacing(0)
        self.outerBox.addWidget(self.headLabel)
        self.outerBox.addWidget(self.helpLabel)
        self.outerBox.addSpacing(self.mainConf.pxInt(8))
        self.outerBox.addWidget(self.listBox)
        self.outerBox.addSpacing(self.mainConf.pxInt(12))
        self.outerBox.addWidget(self.buttonBox)
        self.setLayout(self.outerBox)

        self.rejected.connect(self._doClose)

        self._populateList()

        logger.debug("GuiDocMerge initialisation complete")

        return

    ##
    #  Buttons
    ##

    def _doMerge(self):
        """Perform the merge of the files in the selected folder, and
        create a new file in the same parent folder. The old files are
        not removed in the merge process, and must be deleted manually.
        """
        logger.verbose("GuiDocMerge merge button clicked")

        finalOrder = []
        for i in range(self.listBox.count()):
            finalOrder.append(self.listBox.item(i).data(Qt.UserRole))

        if len(finalOrder) == 0:
            self.theParent.makeAlert(
                self.tr("No source documents found. Nothing to do."),
                nwAlert.ERROR)
            return

        theDoc = NWDoc(self.theProject, self.theParent)
        theText = ""
        for tHandle in finalOrder:
            theText += theDoc.openDocument(tHandle, False).rstrip("\n")
            theText += "\n\n"

        if self.sourceItem is None:
            self.theParent.makeAlert(
                self.tr("No source document selected. Nothing to do."),
                nwAlert.ERROR)
            return

        srcItem = self.theProject.projTree[self.sourceItem]
        if srcItem is None:
            self.theParent.makeAlert(
                self.tr("Could not parse source document."), nwAlert.ERROR)
            return

        nHandle = self.theProject.newFile(srcItem.itemName, srcItem.itemClass,
                                          srcItem.itemParent)
        newItem = self.theProject.projTree[nHandle]
        newItem.setStatus(srcItem.itemStatus)

        theDoc.openDocument(nHandle, False)
        theDoc.saveDocument(theText)
        self.theParent.treeView.revealNewTreeItem(nHandle)
        self.theParent.openDocument(nHandle, doScroll=True)

        self._doClose()

        return

    def _doClose(self):
        """Close the dialog window without doing anything.
        """
        self.close()
        return

    ##
    #  Internal Functions
    ##

    def _populateList(self):
        """Get the item selected in the tree, check that it is a folder,
        and try to find all files associated with it. The valid files
        are then added to the list view in order. The list itself can be
        reordered by the user.
        """
        tHandle = self.theParent.treeView.getSelectedHandle()
        self.sourceItem = tHandle
        if tHandle is None:
            return

        nwItem = self.theProject.projTree[tHandle]
        if nwItem is None:
            return
        if nwItem.itemType is not nwItemType.FOLDER:
            self.theParent.makeAlert(
                self.tr(
                    "Element selected in the project tree must be a folder."),
                nwAlert.ERROR)
            return

        for sHandle in self.theParent.treeView.getTreeFromHandle(tHandle):
            newItem = QListWidgetItem()
            nwItem = self.theProject.projTree[sHandle]
            if nwItem.itemType is not nwItemType.FILE:
                continue
            newItem.setText(nwItem.itemName)
            newItem.setData(Qt.UserRole, sHandle)
            self.listBox.addItem(newItem)

        return
コード例 #57
0
ファイル: welcome_window.py プロジェクト: yb1994917/Dwarf
class WelcomeDialog(QDialog):

    onSessionSelected = pyqtSignal(str, name='onSessionSelected')
    onUpdateComplete = pyqtSignal(name='onUpdateComplete')
    onIsNewerVersion = pyqtSignal(name='onIsNewerVersion')

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

        self._prefs = parent.prefs

        self.recent_list = QListWidget(self)
        # setup size and remove/disable titlebuttons
        self.setFixedSize(800, 400)
        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()))

        saved_sessions = self._prefs.get('dwarf_mru', '{}')
        saved_sessions = json.loads(saved_sessions)
        for saved in saved_sessions:
            self.recent_list.addItem(QListWidgetItem(saved['path']))

    def setup_ui(self):
        """ Setup Ui
        """
        main_wrap = QVBoxLayout()
        main_wrap.setContentsMargins(0, 0, 0, 0)

        # updatebar on top
        self.update_bar = UpdateBar(self)
        self.update_bar.onUpdateNowClicked.connect(self._update_dwarf)
        self.update_bar.setVisible(False)
        main_wrap.addWidget(self.update_bar)

        # main content
        h_box = QHBoxLayout()
        h_box.setContentsMargins(15, 15, 15, 15)
        wrapper = QVBoxLayout()
        #wrapper.setGeometry(QRect(0, 0, 400, 200))
        head = QHBoxLayout()
        # dwarf icon
        icon = QLabel()
        icon.setContentsMargins(100, 0, 20, 0)
        icon.setPixmap(QPixmap(utils.resource_path('assets/dwarf.png')))
        head.addWidget(icon)

        # main title
        title = QLabel('Dwarf')
        title.setFont(QFont('Anton', 85, QFont.Bold))
        title.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
        head.addWidget(title)

        wrapper.addLayout(head)

        recent = QLabel('Last saved Sessions')
        font = recent.font()
        font.setBold(True)
        font.setPointSize(10)
        recent.setFont(font)
        wrapper.addWidget(recent)
        wrapper.addWidget(self.recent_list)
        h_box.addLayout(wrapper, stretch=False)
        buttonSpacer = QSpacerItem(15, 100, QSizePolicy.Fixed, QSizePolicy.Minimum)
        h_box.addItem(buttonSpacer)
        wrapper = QVBoxLayout()

        btn = QPushButton()
        ico = QIcon(QPixmap(utils.resource_path('assets/android.png')))
        btn.setIconSize(QSize(75, 75))
        btn.setIcon(ico)
        btn.setToolTip('New Android Session')
        btn.clicked.connect(self._on_android_button)

        wrapper.addWidget(btn)
        btn = QPushButton()
        ico = QIcon(QPixmap(utils.resource_path('assets/apple.png')))
        btn.setIconSize(QSize(75, 75))
        btn.setIcon(ico)
        btn.setToolTip('New iOS Session')
        wrapper.addWidget(btn)

        btn = QPushButton()
        ico = QIcon(QPixmap(utils.resource_path('assets/local.png')))
        btn.setIconSize(QSize(75, 75))
        btn.setIcon(ico)
        btn.setToolTip('New Local Session')
        btn.clicked.connect(self._on_local_button)
        wrapper.addWidget(btn)

        btn = QPushButton()
        ico = QIcon(QPixmap(utils.resource_path('assets/remote.png')))
        btn.setIconSize(QSize(75, 75))
        btn.setIcon(ico)
        btn.setToolTip('New Remote Session')
        wrapper.addWidget(btn)

        h_box.addLayout(wrapper, stretch=False)
        main_wrap.addLayout(h_box)
        self.setLayout(main_wrap)

    def _on_dwarf_isupdate(self):
        self.update_bar.setVisible(True)
        self.onIsNewerVersion.emit()

    def _update_dwarf(self):
        self._update_thread = DwarfUpdateThread(self)
        self._update_thread.on_finished.connect(self._update_finished)
        if not self._update_thread.isRunning():
            self._update_thread.start()

    def _update_finished(self):
        self.onUpdateComplete.emit()

    def _on_android_button(self):
        self.onSessionSelected.emit('Android')
        self.close()

    def _on_local_button(self):
        self.onSessionSelected.emit('Local')
        self.close()
コード例 #58
0
ファイル: pygl.py プロジェクト: Fransebas/python3DGraph
class Window(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'Graphy'
        self.left = 10
        self.top = 10
        self.width = 810
        self.height = 610
        self.functionList = []
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.createWidgets()
        self.initGridLayout()
        self.initEvent()
        self.show()

    def createWidgets(self):
        self.glWidget = openGL(self)
        self.glWidget.resize(800, 600)
        self.textbox = QLineEdit(self)
        self.functionListW = QListWidget(self)
        self.addEqButton = QPushButton('Add')

    def initGridLayout(self):
        layout = QGridLayout()

        layout.setColumnStretch(0, 10)
        layout.setRowStretch(0, 10)
        layout.addWidget(self.glWidget, 0, 0)
        layout.addWidget(self.textbox, 1, 0)
        layout.addWidget(self.addEqButton, 1, 1)
        layout.addWidget(self.functionListW, 0, 1)

        self.setLayout(layout)

    def initEvent(self):
        self.addEqButton.clicked.connect(self.onAddClick)

    def addElementToList(self):
        i = self.glWidget.getElementsSize() - 1
        item = QListWidgetItem(self.functionListW)
        customWidget = functionListQT.FunctionListQT(self.glWidget.getFunction(i).getFunction(), self, i, item,
                                                     self.deleteFunction)
        item.setSizeHint(customWidget.sizeHint())
        self.functionListW.addItem(item)
        self.functionListW.setItemWidget(item, customWidget)

    def deleteFunction(self, i, item):
        self.functionListW.takeItem(self.functionListW.row(item))
        # self.functionListW.removeItemWidget( item )
        # widget.deleteLater()
        self.glWidget.removeFunction(i)
        pass

    def processExpresion(self, str):
        """

        :param str: str
        :return:
        """
        fullExp = str.split(":")
        exp = fullExp[0]
        if (len(fullExp) > 1):
            if fullExp[1].replace(" ", "") == "Parametric":
                type = Function.Types.PARAMETRIC
            elif fullExp[1].replace(" ", "") == "VField":
                type = Function.Types.VECTOR
        else:
            type = Function.Types.MULT_FUNC

        return (exp, type)

    @pyqtSlot()
    def onAddClick(self):
        textboxValue = self.textbox.text()
        try:
            exp, type = self.processExpresion(textboxValue)
            self.glWidget.addFunction(exp, type)
            self.addElementToList()
        finally:
            self.textbox.setText("")
コード例 #59
0
ファイル: listedit.py プロジェクト: AlexSchr/frescobaldi
class ListEdit(QWidget):
    """A widget to edit a list of items (e.g. a list of directories)."""
    
    # emitted when anything changed in the listbox.
    changed = pyqtSignal()
    
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)
        layout = QGridLayout(self)
        self.setLayout(layout)
        
        self.addButton = QPushButton(icons.get('list-add'), '')
        self.editButton = QPushButton(icons.get('document-edit'), '')
        self.removeButton = QPushButton(icons.get('list-remove'), '')
        self.listBox = QListWidget()
        
        layout.setContentsMargins(1, 1, 1, 1)
        layout.setSpacing(0)
        layout.addWidget(self.listBox, 0, 0, 8, 1)
        layout.addWidget(self.addButton, 0, 1)
        layout.addWidget(self.editButton, 1, 1)
        layout.addWidget(self.removeButton, 2, 1)
        
        @self.addButton.clicked.connect
        def addClicked():
            item = self.createItem()
            if self.openEditor(item):
                self.addItem(item)
                
        @self.editButton.clicked.connect
        def editClicked():
            item = self.listBox.currentItem()
            item and self.editItem(item)
        
        @self.removeButton.clicked.connect
        def removeClicked():
            item = self.listBox.currentItem()
            if item:
                self.removeItem(item)
        
        @self.listBox.itemDoubleClicked.connect
        def itemDoubleClicked(item):
            item and self.editItem(item)
            
        self.listBox.model().layoutChanged.connect(self.changed)
    
        def updateSelection():
            selected = bool(self.listBox.currentItem())
            self.editButton.setEnabled(selected)
            self.removeButton.setEnabled(selected)
        
        self.changed.connect(updateSelection)
        self.listBox.itemSelectionChanged.connect(updateSelection)
        updateSelection()
        app.translateUI(self)
    
    def translateUI(self):
        self.addButton.setText(_("&Add..."))
        self.editButton.setText(_("&Edit..."))
        self.removeButton.setText(_("&Remove"))
    
    def createItem(self):
        return QListWidgetItem()
        
    def addItem(self, item):
        self.listBox.addItem(item)
        self.itemChanged(item)
        self.changed.emit()
        
    def removeItem(self, item):
        self.listBox.takeItem(self.listBox.row(item))
        self.changed.emit()
        
    def editItem(self, item):
        if self.openEditor(item):
            self.itemChanged(item)
            self.changed.emit()
            
    def setCurrentItem(self, item):
        self.listBox.setCurrentItem(item)
        
    def setCurrentRow(self, row):
        self.listBox.setCurrentRow(row)
        
    def openEditor(self, item):
        """Opens an editor (dialog) for the item.
        
        Returns True if the dialog was accepted and the item edited.
        Returns False if the dialog was cancelled (the item must be left
        unedited).
        """
        pass
    
    def itemChanged(self, item):
        """Called after an item has been added or edited.
        
        Re-implement to do something at this moment if needed, e.g. alter the
        text or display of other items.
        """
        pass
    
    def setValue(self, strings):
        """Sets the listbox to a list of strings."""
        self.listBox.clear()
        self.listBox.addItems(strings)
        self.changed.emit()
        
    def value(self):
        """Returns the list of paths in the listbox."""
        return [self.listBox.item(i).text()
            for i in range(self.listBox.count())]
    
    def setItems(self, items):
        """Sets the listbox to a list of items."""
        self.listBox.clear()
        for item in items:
            self.listBox.addItem(item)
            self.itemChanged(item)
        self.changed.emit()
    
    def items(self):
        """Returns the list of items in the listbox."""
        return [self.listBox.item(i)
            for i in range(self.listBox.count())]
        
    def clear(self):
        """Clears the listbox."""
        self.listBox.clear()
        self.changed.emit()
コード例 #60
0
class MessengerNotifGui(QDialog):
    def __init__(self):
        super().__init__()
        self.__mutex = Lock()  #TODO useless?
        self.unreadMessageFetcher = UnreadMessageFetcher(
            getMessengerUserName(), getMessengerPassword())
        self.__list = QListWidget()
        self.UpdateNotificationList()

    ##Public method to return notifications widget to the application class' instance for fill the notification's
    # scrollable area by returning all the notification widgets into a single widget list containing all the
    # notifications.
    #
    # arg: none
    #
    # return: __list: a QListWidget (a list for QWidget objects) containing all the notifications.
    def getWidget(self):
        return (self.__list)

    ##Public method used by the application class' instance to actualise the content of the thread list and the
    # notification dictionnary list.
    #
    # arg: none
    #
    # return: none
    def UpdateLists(self):
        self.unreadMessageFetcher.setLists()

    ##Public method to update the content of the graphical version of the notification list.
    # The method uses the size of __unreadMessageDictionnaryList and the value of __newUnreadMessageNb
    # deduce the new unread messages' indexes and loop into the new values add into the
    # __unreadMessageDictionnaryList to fetch the informations contained into the new dictionnaries of
    # the list.
    #
    # arg: none
    #
    # return: none
    def UpdateNotificationList(self):

        totalListSize = self.unreadMessageFetcher.getTotalUnreadMessageNumber()
        newListElementNb = self.unreadMessageFetcher.getNewUnreadMessageNumber(
        )
        for i in range(newListElementNb):
            index = ((totalListSize - newListElementNb) + i)
            notificationLayout = QHBoxLayout()
            messageLayout = QVBoxLayout()
            messageTextLayout = QVBoxLayout()
            authorLayout = QVBoxLayout()
            messageLabel = QLabel(self.unreadMessageFetcher.getMessage(index))
            messageLabel.setWordWrap(True)

            authorLabel = QLabel(
                self.unreadMessageFetcher.getAuthorName(index))
            conversationPicURL = self.unreadMessageFetcher.getConversationPic(
                index)
            conversationPic = QtGui.QImage()

            conversationPic.loadFromData(
                urllib.request.urlopen(conversationPicURL).read())
            pixmap = QPixmap(conversationPic)
            pixmap.scaled(50, 50)
            conversationPicLabel = QLabel()
            conversationPicLabel.setPixmap(pixmap)
            authorLayout.addWidget(authorLabel)
            messageTextLayout.addWidget(messageLabel)

            if (i < (newListElementNb - 1)):
                separatorLine = QFrame()
                separatorLine.setFrameShape(QFrame.HLine)
                separatorLine.setSizePolicy(QSizePolicy.Minimum,
                                            QSizePolicy.Expanding)
                messageTextLayout.addWidget(separatorLine)

            messageLayout.addLayout(authorLayout)
            messageLayout.addLayout(messageTextLayout)
            notificationLayout.addWidget(conversationPicLabel)
            notificationLayout.addLayout(messageLayout)
            notificationWidget = QWidget()
            notificationWidget.setLayout(notificationLayout)
            notificationItem = QListWidgetItem()
            notificationItem.setSizeHint(notificationWidget.sizeHint())
            self.__list.addItem(notificationItem)
            self.__list.setItemWidget(notificationItem, notificationWidget)

            #Esthetics
            messageLabel.setAlignment(Qt.AlignLeft)
            authorLabel.setAlignment(Qt.AlignLeft)
            messageLayout.setAlignment(Qt.AlignLeft)
            font = QtGui.QFont()
            font.setBold(True)
            authorLabel.setFont(font)

        self.unreadMessageFetcher.resetNewUnreadMessageNb()

    ##Public method used by the application class' instance to empty the graphical and the data notification
    # structures from the MessengerNotifGui and UnreadMessageFetcher class instances.
    # notification dictionnary list.
    #
    # arg: none
    #
    # return: none
    def DeleteNotifications(self):

        emptyListsThread = Thread(target=self.unreadMessageFetcher.EmptyLists)
        emptyListsThread.start()
        self.__list.clear()