Ejemplo n.º 1
2
 def slotButtonShowDiff(self):
     """Called when the user clicks Show Difference."""
     docs = self.selectedDocuments() or self.allDocuments()
     if not docs:
         return
     d = docs[0]
     if documentwatcher.DocumentWatcher.instance(d).isdeleted():
         return
     
     filename = d.url().toLocalFile()
     try:
         with open(filename, 'rb') as f:
             disktext = util.decode(f.read())
     except (IOError, OSError):
         return
     
     currenttext = d.toPlainText()
     
     html = htmldiff.htmldiff(
         currenttext, disktext, 
         _("Current Document"), _("Document on Disk"), numlines=5)
     dlg = widgets.dialog.Dialog(self, buttons=('close',))
     view = QTextBrowser(lineWrapMode=QTextBrowser.NoWrap)
     view.setHtml(html)
     dlg.setMainWidget(view)
     dlg.setWindowTitle(app.caption("Differences"))
     dlg.setMessage(_(
         "Document: {url}\n"
         "Difference between the current document and the file on disk:").format(
             url=filename))
     dlg.setWindowModality(Qt.NonModal)
     dlg.setAttribute(Qt.WA_QuitOnClose, False)
     dlg.setAttribute(Qt.WA_DeleteOnClose)
     qutil.saveDialogSize(dlg, "externalchanges/diff/dialog/size", QSize(600, 300))
     dlg.show()
Ejemplo n.º 2
0
    def __init__(self):
        super(Window, self).__init__()

        centralWidget = QTextBrowser()
        centralWidget.setPlainText("Central widget")

        layout = BorderLayout()
        layout.addWidget(centralWidget, BorderLayout.Center)

        # Because BorderLayout doesn't call its super-class addWidget() it
        # doesn't take ownership of the widgets until setLayout() is called.
        # Therefore we keep a local reference to each label to prevent it being
        # garbage collected too soon.
        label_n = self.createLabel("North")
        layout.addWidget(label_n, BorderLayout.North)

        label_w = self.createLabel("West")
        layout.addWidget(label_w, BorderLayout.West)

        label_e1 = self.createLabel("East 1")
        layout.addWidget(label_e1, BorderLayout.East)

        label_e2 = self.createLabel("East 2")
        layout.addWidget(label_e2, BorderLayout.East)

        label_s = self.createLabel("South")
        layout.addWidget(label_s, BorderLayout.South)

        self.setLayout(layout)

        self.setWindowTitle("Border Layout")
Ejemplo n.º 3
0
	def createPreviewBox(self):
		if globalSettings.useWebKit:
			return self.createWebView()
		browser = QTextBrowser()
		# TODO: honor globalSettings.handleWebLinks?
		browser.setOpenExternalLinks(True)
		return browser
class HelpForm(QDialog):
    def __init__(self,  page,  parent=None):
        super(HelpForm, self).__init__(parent)
        self.setAttribute(Qt.WA_DeleteOnClose)
        self.setWindowModality(Qt.WindowModal)
        # actions
        backAction = QAction(QIcon(":/back.png"), "&Back", self)
        backAction.setShortcut(QKeySequence.Back)
        homeAction = QAction(QIcon(":/home.png"), "&Home", self)
        homeAction.setShortcut("Home")
        self.pageLabel = QLabel()
        #toolbar
        toolBar = QToolBar()
        toolBar.addAction(backAction)
        toolBar.addAction(homeAction)
        toolBar.addWidget(self.pageLabel)
        self.textBrowser = QTextBrowser()
        # layout
        layout = QVBoxLayout()
        layout.addWidget(toolBar)
        layout.addWidget(self.textBrowser, 1)
        self.setLayout(layout)
        # signals and slots
        backAction.triggered.connect(self.textBrowser.backward)
        homeAction.triggered.connect(self.textBrowser.home)
        self.textBrowser.sourceChanged.connect(self.updatePageTitle)
        self.textBrowser.setSearchPaths([":/help"])
        self.textBrowser.setSource(QUrl(page))
        self.resize(400, 600)
        self.setWindowTitle("{0} Help".format(
            QApplication.applicationName()))
    def updatePageTitle(self):
        self.pageLabel.setText(self.textBrowser.documentTitle())
Ejemplo n.º 5
0
class HelpDialog(QDialog):
    def __init__(self, parent, help_file):
        super(HelpDialog, self).__init__(parent)
        #QDialog.__init__(self, parent)

        self.setWindowTitle(_translate("Packaga Manager","Package Manager Help"))
        self.resize(700,500)
        self.setModal(True)

        self.layout = QGridLayout(self)
        self.htmlPart = QTextBrowser(self)
        self.layout.addWidget(self.htmlPart, 1, 1)

        locale = setSystemLocale(justGet = True)

        if locale in ["tr", "es", "en", "fr", "nl", "de", "sv"]:
            self.htmlPart.setSource(
                    QUrl("/usr/share/package-manager/help/%s/%s" %
                        (locale, help_files[help_file])))

        else:
            self.htmlPart.setSource(
                    QUrl("/usr/share/package-manager/help/en/%s" %
                        help_files[help_file]))
                    
        self.show()
Ejemplo n.º 6
0
class Window(QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        model = FileListModel(self)
        model.setDirPath(QLibraryInfo.location(QLibraryInfo.PrefixPath))

        label = QLabel("Directory")
        lineEdit = QLineEdit()
        label.setBuddy(lineEdit)

        view = QListView()
        view.setModel(model)

        self.logViewer = QTextBrowser()
        self.logViewer.setSizePolicy(QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred))

        lineEdit.textChanged.connect(model.setDirPath)
        lineEdit.textChanged.connect(self.logViewer.clear)
        model.numberPopulated.connect(self.updateLog)

        layout = QGridLayout()
        layout.addWidget(label, 0, 0)
        layout.addWidget(lineEdit, 0, 1)
        layout.addWidget(view, 1, 0, 1, 2)
        layout.addWidget(self.logViewer, 2, 0, 1, 2)

        self.setLayout(layout)
        self.setWindowTitle("Fetch More Example")

    def updateLog(self, number):
        self.logViewer.append("%d items added." % number)
Ejemplo n.º 7
0
    def __init__(self):
        super().__init__()
        self.worker = None
        self.statusBar().showMessage('ready')
        self.resize(250, 150)
        self.move(300, 300)
        self.setWindowTitle('刷起来')
        self.setWindowIcon(QIcon('icon.ico'))
        self.imagesPath = "./images/tp14/"
        self.toolBar = self.addToolBar('')

        GameStatus().window = self

        yaoguaifaxian_action = QAction(QIcon('./images/ui/yaoguaifaxian.jpg'), '妖怪发现', self)
        yaoguaifaxian_action.triggered.connect(self.yaoguaifaxian)

        exit_action = QAction(QIcon('./images/ui/exit.png'), '停止', self)
        exit_action.setShortcut('Ctrl+Q')
        exit_action.triggered.connect(self.stop_loop)


        self.toolBar.addAction(yaoguaifaxian_action)
        self.toolBar.addAction(exit_action)

        txt = QTextBrowser()
        txt.setContentsMargins(5, 5, 5, 5)
        self.setCentralWidget(txt)
        self.show()
Ejemplo n.º 8
0
    def __init__(self, exctype, excvalue, exctb):
        super(ExceptionDialog, self).__init__()

        self._tbshort = ''.join(traceback.format_exception_only(exctype, excvalue))
        self._tbfull = ''.join(traceback.format_exception(exctype, excvalue, exctb))

        layout = QVBoxLayout()
        self.setLayout(layout)

        self.errorLabel = QLabel()
        layout.addWidget(self.errorLabel)
        textview = QTextBrowser()
        layout.addWidget(textview)
        textview.setText(self._tbfull)
        textview.moveCursor(QTextCursor.End)

        layout.addWidget(widgets.Separator())

        b = self.buttons = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        b.button(QDialogButtonBox.Ok).setIcon(icons.get("tools-report-bug"))
        layout.addWidget(b)

        b.accepted.connect(self.accept)
        b.rejected.connect(self.reject)
        self.resize(600,300)
        app.translateUI(self)
        self.exec_()
Ejemplo n.º 9
0
    def __init__(self, *args, **kwargs):
        super(MainForm, self).__init__(*args, **kwargs)

        self.resize(320, 360)

        self.setWindowIcon(QIcon('./assets/eset_logo.png'))
        self.setWindowTitle("ESET Key scraper")

        self.label = QLabel(
            "Keys for " + (KeyValue.get('evaluation_type') or 'EAV'))
        self.label.setFixedSize(100, 20)

        text_box = QTextBrowser()
        text_box.setFont(QFont('Ubuntu mono', 12))
        refresh_button = QPushButton("Refresh")
        refresh_button.setFixedHeight(40)
        settings_button = QPushButton()
        settings_button.setFixedSize(60, 40)
        settings_button.setIcon(QIcon('./assets/settings.png'))

        layout = QGridLayout()
        layout.addWidget(self.label, 1, 1, 1, 2)
        layout.addWidget(text_box, 2, 1, 1, 2)
        layout.addWidget(refresh_button, 3, 1)
        layout.addWidget(settings_button, 3, 2)

        refresh_button.clicked.connect(lambda: self.refresh(text_box))
        settings_button.clicked.connect(self.show_settings)

        self.setLayout(layout)
        self.refresh(text_box)
Ejemplo n.º 10
0
class App(QWidget):
    def __init__(self, room):
        super().__init__()

        vbox = QVBoxLayout()
        self.text_browser = QTextBrowser()
        vbox.addWidget(self.text_browser)
        self.text_entry = Entry(room)
        self.text_entry.setFocus()
        vbox.addWidget(self.text_entry)
        self.setLayout(vbox)

        self.messages_future = None
        self._run(room)

    def closeEvent(self, e):
        if self.messages_future:
            self.messages_future.cancel()
        super().closeEvent(e)

    def _run(self, room):
        @coroutine
        def logger():
            while True:
                message = (yield)
                self.text_browser.append(message['text'])

        self.messages_future = asyncio.ensure_future(
            room.get_messages(logger()))
Ejemplo n.º 11
0
class PreviewWidgetColor(QGroupBox):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setTitle(self.tr("Preview"))
        self.setMaximumHeight(120)
        self.parent = parent

        vboxLayout = QVBoxLayout(self)
        self.previewGroupBox = QGroupBox(self)
        self.previewGroupBox.setObjectName("previewGroupBox")
        vboxLayout.addWidget(self.previewGroupBox)

        self.horizontalLayout = QHBoxLayout(self.previewGroupBox)
        self.verticalLayout = QVBoxLayout()
        self.horizontalLayout.addLayout(self.verticalLayout)

        self.previewLabel = QLabel(self.previewGroupBox)
        self.previewLabel.setText(self.tr("Window Text"))
        self.previewLabel.setObjectName("previewLabel")
        self.verticalLayout.addWidget(self.previewLabel)

        self.previewPushButton = QPushButton(self.previewGroupBox)
        self.previewPushButton.setText(self.tr("Button"))
        self.previewPushButton.setObjectName("previewPushButton")
        self.verticalLayout.addWidget(self.previewPushButton)

        self.previewTextBrowser = QTextBrowser(self.previewGroupBox)
        self.previewTextBrowser.setObjectName("previewTextBrowser")

        css = iniToCss(os.path.join("/usr/share/color-schemes", self.parent.children()[1].currentItem().colorSchemeName))

        self.previewTextBrowser.setHtml("""<style>#unclicked {color : rgb(%s);}
        #clicked {color : rgb(%s);}</style>"""%(css[1][0],css[1][1]) +
        self.tr("""<p>Normal text <a id='unclicked' href='#'>link</a> <a id='clicked' href='#'>visited</a></p>"""))


        self.horizontalLayout.addWidget(self.previewTextBrowser)


        self.previewPushButton.installEventFilter(self.previewGroupBox)
        self.previewPushButton.setFocusPolicy(Qt.NoFocus)

        self.previewTextBrowser.installEventFilter(self.previewGroupBox)
        self.previewTextBrowser.setFocusPolicy(Qt.NoFocus)
        self.previewTextBrowser.setTextInteractionFlags(Qt.NoTextInteraction)

    def eventFilter(self, obj, event):
        if self.previewPushButton:
            if event.type() == QEvent.MouseButtonRelease:
                return True
            elif event.type() == QEvent.MouseButtonPress:
                return True
            elif event.type() == QEvent.MouseButtonDblClick:
                return True

            else:
                return False
        else:
            super().eventFilter(obj, event)
Ejemplo n.º 12
0
 def __init__(self, parent=None):
     super(Dialog, self).__init__(parent)
     
     self._info = None
     self._text = ''
     self._convertedtext = ''
     self._encoding = None
     self.mainwindow = parent
     
     self.fromVersionLabel = QLabel()
     self.fromVersion = QLineEdit()
     self.reason = QLabel()
     self.toVersionLabel = QLabel()
     self.toVersion = QLineEdit()
     self.lilyChooser = lilychooser.LilyChooser()
     self.messages = QTextBrowser()
     self.diff = QTextBrowser(lineWrapMode=QTextBrowser.NoWrap)
     self.uni_diff = QTextBrowser(lineWrapMode=QTextBrowser.NoWrap)
     self.copyCheck = QCheckBox(checked=
         QSettings().value('convert_ly/copy_messages', True, bool))
     self.tabw = QTabWidget()
     
     self.tabw.addTab(self.messages, '')
     self.tabw.addTab(self.diff, '')
     self.tabw.addTab(self.uni_diff, '')
     
     self.buttons = QDialogButtonBox(
         QDialogButtonBox.Reset | QDialogButtonBox.Save |
         QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
     self.buttons.button(QDialogButtonBox.Ok).clicked    .connect(self.accept)
     self.buttons.rejected.connect(self.reject)
     self.buttons.button(QDialogButtonBox.Reset).clicked.connect(self.run)
     self.buttons.button(QDialogButtonBox.Save).clicked.connect(self.saveFile)
     
     layout = QVBoxLayout()
     self.setLayout(layout)
     
     grid = QGridLayout()
     grid.addWidget(self.fromVersionLabel, 0, 0)
     grid.addWidget(self.fromVersion, 0, 1)
     grid.addWidget(self.reason, 0, 2, 1, 3)
     grid.addWidget(self.toVersionLabel, 1, 0)
     grid.addWidget(self.toVersion, 1, 1)
     grid.addWidget(self.lilyChooser, 1, 3, 1, 2)
     
     layout.addLayout(grid)
     layout.addWidget(self.tabw)
     layout.addWidget(self.copyCheck)
     layout.addWidget(widgets.Separator())
     layout.addWidget(self.buttons)
     
     app.translateUI(self)
     qutil.saveDialogSize(self, 'convert_ly/dialog/size', QSize(600, 300))
     app.settingsChanged.connect(self.readSettings)
     self.readSettings()
     self.finished.connect(self.saveCopyCheckSetting)
     self.lilyChooser.currentIndexChanged.connect(self.slotLilyPondVersionChanged)
     self.slotLilyPondVersionChanged()
Ejemplo n.º 13
0
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setWindowModality(QtCore.Qt.ApplicationModal)
        self.setWindowTitle('About Linux Show Player')
        self.setMaximumSize(500, 420)
        self.setMinimumSize(500, 420)
        self.resize(500, 420)

        self.setLayout(QGridLayout())

        self.icon = QLabel(self)
        self.icon.setPixmap(QPixmap(self.ICON).scaled(100, 100,
                            transformMode=Qt.SmoothTransformation))
        self.layout().addWidget(self.icon, 0, 0)

        self.shortInfo = QLabel(self)
        self.shortInfo.setAlignment(Qt.AlignCenter)
        self.shortInfo.setText('<h2>Linux Show Player   ' +
                               str(lisp.__version__) + '</h2>'
                               'Copyright © Francesco Ceruti')
        self.layout().addWidget(self.shortInfo, 0, 1)

        self.layout().addWidget(QWidget(), 1, 0, 1, 2)

        # Informations tabs
        self.tabWidget = QTabWidget(self)
        self.layout().addWidget(self.tabWidget, 2, 0, 1, 2)

        self.info = QTextBrowser(self)
        self.info.setOpenExternalLinks(True)
        self.info.setHtml(self.INFO)
        self.tabWidget.addTab(self.info, 'Info')

        self.license = QTextBrowser(self)
        self.license.setOpenExternalLinks(True)
        self.license.setHtml(self.LICENSE)
        self.tabWidget.addTab(self.license, 'License')

        self.contributors = QTextBrowser(self)
        self.contributors.setOpenExternalLinks(True)
        self.contributors.setHtml(self.CONTRIBUTORS)
        self.tabWidget.addTab(self.contributors, 'Contributors')

        # Ok button
        self.buttons = QDialogButtonBox(QDialogButtonBox.Ok)
        self.buttons.accepted.connect(self.accept)
        self.layout().addWidget(self.buttons, 3, 1)

        self.layout().setColumnStretch(0, 1)
        self.layout().setColumnStretch(1, 3)

        self.layout().setRowStretch(0, 6)
        self.layout().setRowStretch(1, 1)
        self.layout().setRowStretch(2, 16)
        self.layout().setRowStretch(3, 3)

        self.buttons.setFocus()
Ejemplo n.º 14
0
class CheckInputWidget(QWidget, MooseWidget):
    """
    Runs the executable with "--check-input" on the input file and stores the results.
    Signals:
        needInputFile: Emitted when we need the input file. Argument is the path where the input file will be written.
    """
    needInputFile = pyqtSignal(str)

    def __init__(self, **kwds):
        super(CheckInputWidget, self).__init__(**kwds)

        self.input_file = "peacock_check_input.i"
        self.top_layout = WidgetUtils.addLayout(vertical=True)
        self.setLayout(self.top_layout)
        self.output = QTextBrowser(self)
        self.output.setStyleSheet("QTextBrowser { background: black; color: white; }")
        self.output.setReadOnly(True)
        self.top_layout.addWidget(self.output)
        self.button_layout = WidgetUtils.addLayout()
        self.top_layout.addLayout(self.button_layout)
        self.hide_button = WidgetUtils.addButton(self.button_layout, self, "Hide", lambda: self.hide())
        self.check_button = WidgetUtils.addButton(self.button_layout, self, "Check", self._check)
        self.resize(800, 500)
        self.setup()
        self.path = None

    def cleanup(self):
        try:
            os.remove(self.input_file)
        except:
            pass

    def check(self, path):
        """
        Runs the executable with "--check-input" and adds the output to the window
        Input:
            path[str]: Path to the executable
        """
        self.path = path
        self._check()

    def _check(self):
        """
        Runs the executable with "--check-input" and adds the output to the window
        """
        input_file = os.path.abspath(self.input_file)
        self.needInputFile.emit(input_file)
        self.output.clear()
        try:
            args = ["-i", input_file, "--check-input"]
            output = ExeLauncher.runExe(self.path, args, print_errors=False)
            output_html = TerminalUtils.terminalOutputToHtml(output)
            self.output.setHtml("<pre>%s</pre>" % output_html)
        except Exception as e:
            output_html = TerminalUtils.terminalOutputToHtml(str(e))
            self.output.setHtml("<pre>%s</pre>" % output_html)
        self.cleanup()
Ejemplo n.º 15
0
def error_report_main():
    error_message = sys.stdin.read()
    error_message = "<pre>{}</pre>".format(html.escape(error_message).replace("\n", "<br>"))

    app = QApplication(sys.argv)

    if sys.platform == 'darwin':
        # workaround macOS QTBUG-61562
        from brickv.mac_pasteboard_mime_fixed import MacPasteboardMimeFixed
        mac_pasteboard_mime_fixed = MacPasteboardMimeFixed()

    window = QMainWindow()
    window.setWindowTitle('Error - Brick Viewer ' + config.BRICKV_VERSION)
    window.setWindowIcon(QIcon(load_pixmap('brickv-icon.png')))

    widget = QWidget()
    window.setCentralWidget(widget)
    widget.setLayout(QHBoxLayout())

    icon = QLabel()
    icon.setPixmap(QMessageBox.standardIcon(QMessageBox.Critical))
    icon.setAlignment(Qt.AlignHCenter | Qt.AlignTop)
    widget.layout().addWidget(icon)

    right_widget = QWidget()
    right_widget.setLayout(QVBoxLayout())
    right_widget.layout().setContentsMargins(0, 0, 0, 0)

    label = QLabel("Please report this error to <a href='mailto:[email protected]'>[email protected]</a>.<br/><br/>" +
                   "If you know what caused the error and could work around it, please report it anyway. This allows us to improve the error messages.")
    label.setWordWrap(True)
    label.setOpenExternalLinks(True)
    right_widget.layout().addWidget(label)

    tb = QTextBrowser()
    tb.setHtml(error_message)
    right_widget.layout().addWidget(tb)

    cbox = QCheckBox("Show this message again")
    cbox.setChecked(True)
    right_widget.layout().addWidget(cbox)

    btn = QPushButton("Close")
    btn.clicked.connect(lambda event: app.exit())
    right_widget.layout().addWidget(btn)

    widget.layout().addWidget(right_widget)
    window.setMinimumSize(640, 400)
    window.resize(950, 600)
    window.show()

    app.exec_()

    return int(cbox.isChecked())
Ejemplo n.º 16
0
class THelpForm(QWidget):
    
    def __init__(self, parent, title, path):
        #super().__init__(parent, Qt.WA_DeleteOnClose )
        super().__init__(parent, Qt.Window)
        
        self.text_browser   = QTextBrowser(self)
        #self.text_browser  = QWebEngineView(self)
        self.back_button    = QPushButton('Back', self)
        self.forward_button = QPushButton('Forward', self)
        self.close_button   = QPushButton('Close', self)
        
        self.layout = QVBoxLayout(self)
        self.btn_widget = QWidget(self)
        self.btn_layout = QHBoxLayout(self.btn_widget)
        self.btn_layout.addWidget(self.back_button)
        self.btn_layout.addWidget(self.forward_button)
        self.btn_layout.addStretch(1)
        self.btn_layout.addWidget(self.close_button)
        
        self.shortcutEscape  = QShortcut(QKeySequence(Qt.Key_Escape), self)
        self.shortcutEscape.activated.connect(self.close)
        
        self.layout.addWidget(self.btn_widget)
        self.layout.addWidget(self.text_browser)
        
        self.back_button.clicked.connect(self.text_browser.backward)
        self.forward_button.clicked.connect(self.text_browser.forward)
        self.close_button.clicked.connect(self.close)
        
        
        self.text_browser.setSearchPaths([os.path.join(resources_path, 'doc')])
        self.text_browser.setSource(QUrl(path))
#       f = QFont()
#       f.setPointSize(14)
#       self.text_browser.setFont(f)
        
        Settings = QSettings('kicad-tools', 'Schematic Component Manager')

        if Settings.contains('help-window'):
            self.restoreGeometry(Settings.value('help-window'))
            #pos_x, pos_y, width, height = Settings.value('help-window')
        else:
            pos_x, pos_y, width, height = 0, 0, 640, 640
            self.setGeometry(pos_x, pos_y, width, height)
        
        self.window().setWindowTitle(title)
        self.show()
    #--------------------------------------------------------------------------------
    def closeEvent(self, event):
        Settings = QSettings('kicad-tools', 'Schematic Component Manager')
        Settings.setValue( 'help-window', self.saveGeometry() )
Ejemplo n.º 17
0
class TextWindow(QDialog):
    def __init__(self):
        super().__init__()
        self.txt = QTextBrowser(self)
        self.layout = QGridLayout()
        self.layout.addWidget(self.txt)
        self.setLayout(self.layout)
        self.setAttribute(Qt.WA_DeleteOnClose)

    def setText(self, text):
        self.txt.setText(text)
        self.txt.adjustSize()
        self.adjustSize()
Ejemplo n.º 18
0
    def __init__(self, parent=None):
        super(ResultUI, self).__init__(parent)

        layout = QVBoxLayout()
        self.setLayout(layout)
        # 转换结果
        resultText = QTextBrowser()
        # resultText.setFixedWidth(300)
        # resultText.setFixedHeight(300)
        resultText.setFontPointSize(11)
        layout.addWidget(resultText)
        # 转换进度
        progress = QProgressBar()
        layout.addWidget(progress)
Ejemplo n.º 19
0
    def initUI(self):
        """
        initUI()
        """

        vbox = QVBoxLayout(self)
        grid1 = QGridLayout()
        grid1.setSpacing(10)

        self.text = QTextBrowser()
        self.text.setReadOnly(True)
        self.text.setOpenExternalLinks(True)
        self.text.append(self.message)
        self.text.moveCursor(QTextCursor.Start)
        self.text.ensureCursorVisible()

        vbox.addWidget(self.text)

        self.setLayout(vbox)
        self.setMinimumSize(550, 450)
        self.resize(550, 600)
        self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint)
        self.setWindowTitle(self.title)
        iconWT = QIcon()
        iconWT.addPixmap(QPixmap(":images/DXF2GCODE-001.ico"),
                         QIcon.Normal, QIcon.Off)
        self.setWindowIcon(QIcon(iconWT))

        self.exec_()
Ejemplo n.º 20
0
 def __init__(self):
     super().__init__()
     self.txt = QTextBrowser(self)
     self.layout = QGridLayout()
     self.layout.addWidget(self.txt)
     self.setLayout(self.layout)
     self.setAttribute(Qt.WA_DeleteOnClose)
Ejemplo n.º 21
0
    def __init__(self, parent, url):
        QDialog.__init__(self, parent)

        self.resize(800, 600)

        l = QVBoxLayout()

        self.te = QTextBrowser(self)
        self.te.sourceChanged.connect(self.onSourceChanged)
        self.te.setOpenExternalLinks(True)
        if not url.startswith('http'):
            pwd = os.path.dirname(__file__)
            locale = QSettings().value("locale/userLocale")[0:2]
            file = "{}/doc/{}/{}".format(pwd, locale, url)
            if not os.path.isfile(file):
                file = "{}/doc/en/{}".format(pwd, url)
            self.te.setSource(QUrl.fromLocalFile(file))
        else:
            self.te.setSource(QUrl(url))

        btn = QDialogButtonBox(QDialogButtonBox.Ok, Qt.Horizontal, self)
        btn.clicked.connect(self.close)

        l.addWidget(self.te)
        l.addWidget(btn)

        self.setLayout(l)
Ejemplo n.º 22
0
    def __init__(self, page, parent=None):
        super(HelpForm, self).__init__(parent)
        self.setAttribute(Qt.WA_DeleteOnClose)
        self.setAttribute(Qt.WA_GroupLeader)

        backAction = QAction(QIcon(":/back.png"), "&Back", self)
        backAction.setShortcut(QKeySequence.Back)
        homeAction = QAction(QIcon(":/home.png"), "&Home", self)
        homeAction.setShortcut("Home")
        self.pageLabel = QLabel()

        toolBar = QToolBar()
        toolBar.addAction(backAction)
        toolBar.addAction(homeAction)
        toolBar.addWidget(self.pageLabel)
        self.textBrowser = QTextBrowser()

        layout = QVBoxLayout()
        layout.addWidget(toolBar)
        layout.addWidget(self.textBrowser, 1)
        self.setLayout(layout)

        backAction.triggered.connect(self.textBrowser.backward)
        homeAction.triggered.connect(self.textBrowser.home)
        self.textBrowser.sourceChanged[(QUrl)].connect(self.updatePageTitle)

        self.textBrowser.setSearchPaths([":/help"])
        #print(self.textBrowser.searchPaths())
        self.textBrowser.setSource(QUrl(page))
        self.resize(400, 600)
        self.setWindowTitle("{} Help".format(
                QApplication.applicationName()))
Ejemplo n.º 23
0
    def report_fatal_error(self, title, message, trace):
        trace = '<pre>{}</pre>'.format(html.escape(trace).replace('\n', '<br>'))

        label_title = QLabel(title)

        font = label_title.font()
        font.setBold(True)
        label_title.setFont(font)

        label_message = QLabel('Error: ' + message)
        browser_trace = QTextBrowser()
        browser_trace.setHtml(trace)

        layout = QVBoxLayout(self)
        layout.addWidget(label_title)
        layout.addWidget(label_message)
        layout.addWidget(browser_trace)
Ejemplo n.º 24
0
class AbouteInfo(QDialog):
    def __init__(self, htmlfile, name):
        super(AbouteInfo, self).__init__()
        self.text = QTextBrowser()
        text = open(htmlfile).read()
        self.text.setHtml(text)
        self.text.setOpenExternalLinks(True)
        self.cancelbutton = QPushButton("&Close")
        self.setGeometry(100, 100, 700, 700)
        buttonlayout = QHBoxLayout()
        buttonlayout.addStretch()
        buttonlayout.addWidget(self.cancelbutton)
        layout = QVBoxLayout()
        layout.addWidget(self.text)
        layout.addLayout(buttonlayout)
        self.setLayout(layout)
        self.setWindowTitle("PyBigPixel Creator {0}-- {1}".format(__version__, name))
        self.cancelbutton.clicked.connect(self.close)
Ejemplo n.º 25
0
    def init_ui(self):
        """create the UI elements in the main window"""
        self.statusBar().showMessage('Ready')

        main = QWidget()
        self.setCentralWidget(main)

        self.dolphin_dir = QLineEdit(main)
        self.dolphin_dir.setPlaceholderText("Please Select a Dolphin Directory")
        self.dolphin_dir.setReadOnly(True)

        self.version = QLineEdit(main)
        self.version.setPlaceholderText("Installation Status Unknown")
        self.version.setReadOnly(True)

        self.current = QLineEdit(main)
        self.current.setPlaceholderText("Loading Current Version...")
        self.current.setReadOnly(True)

        self.changelog_frame = QFrame(main)
        changelog_vbox = QVBoxLayout(self.changelog_frame)
        self.changelog = QTextBrowser(main)
        self.changelog.setPlaceholderText("Loading Changelog...")
        self.changelog.setReadOnly(True)
        changelog_vbox.addWidget(QLabel('Changelog:'))
        changelog_vbox.addWidget(self.changelog)
        self.changelog_frame.setContentsMargins(0, 20, -7, 0)

        grid = QGridLayout()
        main.setLayout(grid)

        self.dolphin_dir_status = QLabel(main)
        self.dolphin_dir_status.setPixmap(self.cancel)
        self.version_status = QLabel(main)
        self.version_status.setPixmap(self.cancel)
        self.current_status = QLabel(main)
        self.current_status.setPixmap(QPixmap("res/info.png"))

        grid.addWidget(self.dolphin_dir_status, 0, 0, Qt.AlignCenter)
        grid.addWidget(QLabel('Dolphin Directory:'), 0, 2)
        grid.addWidget(self.dolphin_dir, 0, 3)

        grid.addWidget(self.version_status, 1, 0, Qt.AlignCenter)
        grid.addWidget(QLabel('Your Version:'), 1, 2)
        grid.addWidget(self.version, 1, 3)

        grid.addWidget(self.current_status, 2, 0, Qt.AlignCenter)
        grid.addWidget(QLabel('Current Version:'), 2, 2)
        grid.addWidget(self.current, 2, 3)

        grid.addWidget(self.changelog_frame, 3, 0, 1, 4)

        grid.setSpacing(10)
        grid.setVerticalSpacing(2)
        grid.setRowStretch(3, 1)
Ejemplo n.º 26
0
    def initUI(self):
        QToolTip.setFont(QFont('SansSerif', 40))
        self.setGeometry(300,250,360,400)
        self.setWindowTitle('Instructions')
        self.toshow = QTextBrowser(self)
        self.toshow.resize(270,300)
        self.toshow.move(30,20)
        self.toshow.setText('good')
        
#        self.toshow.setText('\n'.join(self.s))
        self.show()
Ejemplo n.º 27
0
class LogWidget(QWidget, MooseWidget):
    """
    A widget that shows the log.

    This ties into mooseutils.message.mooseMessage which will
    emit a signal on mooseutils.message.messageEmitter
    This widget listens to messageEmitter and puts
    the text in the widget.
    Color text is supported.
    """
    def __init__(self, **kwds):
        """
        Constructor.
        """
        super(LogWidget, self).__init__(**kwds)
        self.top_layout = WidgetUtils.addLayout(vertical=True)
        self.setLayout(self.top_layout)
        self.log = QTextBrowser(self)
        self.log.setStyleSheet("QTextBrowser { background: black; color: white; }")
        self.log.setReadOnly(True)
        message.messageEmitter.message.connect(self._write)
        self.button_layout = WidgetUtils.addLayout()
        self.hide_button = WidgetUtils.addButton(self.button_layout, self, "Hide", lambda: self.hide())
        self.clear_button = WidgetUtils.addButton(self.button_layout, self, "Clear", lambda: self.log.clear())
        self.top_layout.addWidget(self.log)
        self.top_layout.addLayout(self.button_layout)
        self.resize(800, 500)

    @pyqtSlot(str, str)
    def _write(self, msg, color):
        """
        This is the slot that will write the message to the widget.

        Inputs:
            msg: The message to write
            color: The color to write the text in.
        """
        if not msg:
            return

        msg = msg.encode('utf-8') # make sure if there are bad characters in the message that we can show them.

        if not color or color == "None":
            color = "white"
        else:
            color = str(color)

        if msg.find("\n") >= 0:
            self.log.insertHtml('<div style="color:%s"><pre><code>%s</code></pre></div><br>' % (color.lower(), escape(msg)))
        else:
            self.log.insertHtml('<div style="color:%s">%s</div><br>' % (color.lower(), escape(msg)))
Ejemplo n.º 28
0
 def gui(self):
     self.systray = QSystemTrayIcon()
     self.icon = QIcon(':/sansimera.png')
     self.systray.setIcon(self.icon)
     self.systray.setToolTip('Σαν σήμερα...')
     self.menu = QMenu()
     self.exitAction = QAction('&Έξοδος', self)
     self.refreshAction = QAction('&Ανανέωση', self)
     self.aboutAction = QAction('&Σχετικά', self)
     self.notification_interval = QAction('Ει&δοποίηση εορταζόντων', self)
     self.menu.addAction(self.notification_interval)
     self.menu.addAction(self.refreshAction)
     self.menu.addAction(self.aboutAction)
     self.menu.addAction(self.exitAction)
     self.systray.setContextMenu(self.menu)
     self.notification_interval.triggered.connect(self.interval_namedays)
     self.exitAction.triggered.connect(exit)
     self.refreshAction.triggered.connect(self.refresh)
     self.aboutAction.triggered.connect(self.about)
     self.browser = QTextBrowser()
     self.browser.setOpenExternalLinks(True)
     self.setGeometry(600, 500, 400, 300)
     self.setWindowIcon(self.icon)
     self.setWindowTitle('Σαν σήμερα...')
     self.setCentralWidget(self.browser)
     self.systray.show()
     self.systray.activated.connect(self.activate)
     self.browser.append('Λήψη...')
     nicon = QIcon(':/next')
     picon = QIcon(':/previous')
     ricon = QIcon(':/refresh')
     iicon = QIcon(':/info')
     qicon = QIcon(':/exit')
     inicon = QIcon(':/notifications')
     self.nextAction = QAction('Επόμενο', self)
     self.nextAction.setIcon(nicon)
     self.previousAction = QAction('Προηγούμενο', self)
     self.refreshAction.triggered.connect(self.refresh)
     self.nextAction.triggered.connect(self.nextItem)
     self.previousAction.triggered.connect(self.previousItem)
     self.previousAction.setIcon(picon)
     self.refreshAction.setIcon(ricon)
     self.exitAction.setIcon(qicon)
     self.aboutAction.setIcon(iicon)
     self.notification_interval.setIcon(inicon)
     controls = QToolBar()
     self.addToolBar(Qt.BottomToolBarArea, controls)
     controls.setObjectName('Controls')
     controls.addAction(self.previousAction)
     controls.addAction(self.nextAction)
     controls.addAction(self.refreshAction)
     self.restoreState(self.settings.value("MainWindow/State", QByteArray()))
     self.refresh()
Ejemplo n.º 29
0
    def __init__(self, parent=None):
        super().__init__(parent)

        self.filepath = ''
        self.layouts = {}

        self.setWindowModality(Qt.ApplicationModal)
        self.setWindowTitle('Layout selection')
        self.setMaximumSize(675, 300)
        self.setMinimumSize(675, 300)
        self.resize(675, 300)

        self.vLayout = QVBoxLayout(self)
        self.vLayout.setContentsMargins(5, 5, 5, 5)

        self.hLayout = QHBoxLayout(self)
        self.vLayout.addLayout(self.hLayout)

        self.layoutBox = QComboBox(self)
        self.hLayout.addWidget(self.layoutBox)

        self.layButton = QPushButton(self)
        self.layButton.setText('Select layout')
        self.hLayout.addWidget(self.layButton)

        self.fileButton = QPushButton(self)
        self.fileButton.setText('Open file')
        self.hLayout.addWidget(self.fileButton)

        self.hLayout.setStretch(0, 3)
        self.hLayout.setStretch(1, 2)
        self.hLayout.setStretch(2, 1)

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

        self.description = QTextBrowser(self)
        self.vLayout.addWidget(self.description)

        for layout_class in layouts.get_layouts():
            self.layoutBox.addItem(layout_class.NAME)
            self.layouts[layout_class.NAME] = (layout_class,
                                               layout_class.DESCRIPTION)

        if self.layoutBox.count() == 0:
            raise Exception('No layout installed!')
        self.show_description(self.layoutBox.currentText())

        self.layoutBox.currentTextChanged.connect(self.show_description)
        self.layButton.clicked.connect(self.accept)
        self.fileButton.clicked.connect(self.open_file)
Ejemplo n.º 30
0
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setTitle(self.tr("Preview"))
        self.setMaximumHeight(120)

        vboxLayout = QVBoxLayout(self)
        self.previewGroupBox = QGroupBox(self)
        self.previewGroupBox.setObjectName("previewGroupBox")
        vboxLayout.addWidget(self.previewGroupBox)

        self.horizontalLayout = QHBoxLayout(self.previewGroupBox)
        self.verticalLayout = QVBoxLayout()
        self.horizontalLayout.addLayout(self.verticalLayout)

        self.previewLabel = QLabel(self.previewGroupBox)
        self.previewLabel.setText(self.tr("Window Text"))
        self.previewLabel.setObjectName("previewLabel")
        self.verticalLayout.addWidget(self.previewLabel)

        self.previewPushButton = QPushButton(self.previewGroupBox)
        self.previewPushButton.setText(self.tr("Button"))
        self.previewPushButton.setObjectName("previewPushButton")
        self.verticalLayout.addWidget(self.previewPushButton)

        self.previewTextBrowser = QTextBrowser(self.previewGroupBox)
        self.previewTextBrowser.setObjectName("previewTextBrowser")

        self.previewTextBrowser.insertHtml(self.tr("""<style>
        #unclicked {color : rgb(255,0,0);}
        #sunclicked {color : rgb(255,0,255);}
        #clicked {color : rgb(0,255,0);}
        #sclicked {color : rgb(0,0,255);}
        </style>
        <p>Normal metin <a id='unclicked' href='#'>bağlantı</a> <a id='clicked' href='#'>ziyaret edilmiş</a></p>
        <p>Seçili metin <a id='sunclicked' href='#'>bağlantı</a> <a id='sclicked' href='#'>ziyaret edilmiş</a></p>"""))



        cursor = self.previewTextBrowser.textCursor()
        cursor.setPosition(39)
        cursor.setPosition(76, QTextCursor.KeepAnchor)
        self.previewTextBrowser.setTextCursor(cursor)

        self.horizontalLayout.addWidget(self.previewTextBrowser)


        self.previewPushButton.installEventFilter(self.previewGroupBox)
        self.previewPushButton.setFocusPolicy(Qt.NoFocus)

        self.previewTextBrowser.installEventFilter(self.previewGroupBox)
        self.previewTextBrowser.setFocusPolicy(Qt.NoFocus)
        self.previewTextBrowser.setTextInteractionFlags(Qt.NoTextInteraction)
Ejemplo n.º 31
0
class AboutTab(QWidget):
    def __init__(self, settings, parent=None):
        super(AboutTab, self).__init__(parent=parent)

        # Indicates if license is shown.
        self.license_shown = False

        # Select folder for textfile to use as download list
        self.location_btn = QPushButton('Browse\nTextfile')
        self.location_btn.setMinimumHeight(30)

        self.update_btn = QPushButton('Update\nYoutube-dl')
        self.update_btn.setMinimumHeight(30)

        self.license_btn = QPushButton('License')

        # Debugging
        self.dirinfo_btn = QPushButton('Dirinfo')
        self.debug_info = QPushButton('Debug:\nFalse')
        self.debug_info.setMinimumHeight(30)

        # Parallel / Series toggle for youtube instances
        self.dl_mode_btn = QPushButton((
            'Singular' if not settings.user_options['parallel'] else 'Parallel'
        ) + '\nDownloads')
        self.dl_mode_btn.setMinimumHeight(30)

        # Reset settings, (requires restart)
        self.reset_btn = QPushButton('Reset\n settings')
        self.reset_btn.setMinimumHeight(30)

        # Lineedit to show path to text file. (Can be changed later to use same path naming as other elements.)
        self.textfile_url = QLineEdit()
        self.textfile_url.setReadOnly(True)  # Read only
        self.textfile_url.setText(
            settings.user_options['multidl_txt'])  # Path from settings.

        self.txt_label = QLabel('Textfile:')

        # Textbrowser to adds some info about Grabber.
        self.textbrowser = QTextBrowser()
        self.textbrowser.setObjectName('AboutText')
        self.textbrowser.setOpenExternalLinks(True)

        # Sets textbroswer content at startup
        self.set_standard_text()

        self.QH = QHBoxLayout()
        self.QV = QVBoxLayout()

        self.QH.addWidget(self.textbrowser)

        self.QV.addWidget(self.dl_mode_btn)
        self.QV.addWidget(self.update_btn)
        self.QV.addSpacing(15)
        self.QV.addWidget(self.debug_info)
        self.QV.addWidget(self.dirinfo_btn)
        self.QV.addWidget(self.license_btn)
        self.QV.addWidget(self.reset_btn)

        self.QV.addStretch(1)

        self.QH.addLayout(self.QV)

        self.topQH = QHBoxLayout()
        self.topQH.addWidget(self.txt_label)
        self.topQH.addWidget(self.textfile_url)
        self.topQH.addWidget(self.location_btn)

        self.topQV = QVBoxLayout()
        self.topQV.addLayout(self.topQH)
        self.topQV.addLayout(self.QH)

        self.license_btn.clicked.connect(self.read_license)

        self.setLayout(self.topQV)

    def read_license(self):
        if not self.license_shown:
            content = self.window().file_handler.read_textfile(
                self.window().license_path)
            if content is None:
                self.parent().alert_message('Error!',
                                            'Failed to find/read license!')
                return
            self.textbrowser.clear()
            self.textbrowser.setText(content)
            self.license_shown = True

        else:
            self.set_standard_text()
            self.license_shown = False

    def set_standard_text(self):
        self.textbrowser.setText(
            'In-development (on my free time) version of a Youtube-dl GUI. \n'
            'I\'m just a developer for fun.\nThis is licensed under GPL 3.\n')
        self.textbrowser.append('Source on Github: '
                                '<a style="color: darkorange" '
                                'href="https://github.com/Thomasedv/Grabber">'
                                'Website'
                                '</a>')
        self.textbrowser.append(
            '<br>PyQt5 use for making this: '
            '<a style="color: darkorange" '
            'href="https://www.riverbankcomputing.com/software/pyqt/intro">'
            'Website'
            '</a>')
Ejemplo n.º 32
0
    def __init__(self, settings, parent=None):
        super(AboutTab, self).__init__(parent=parent)

        # Indicates if license is shown.
        self.license_shown = False

        # Select folder for textfile to use as download list
        self.location_btn = QPushButton('Browse\nTextfile')
        self.location_btn.setMinimumHeight(30)

        self.update_btn = QPushButton('Update\nYoutube-dl')
        self.update_btn.setMinimumHeight(30)

        self.license_btn = QPushButton('License')

        # Debugging
        self.dirinfo_btn = QPushButton('Dirinfo')
        self.debug_info = QPushButton('Debug:\nFalse')
        self.debug_info.setMinimumHeight(30)

        # Parallel / Series toggle for youtube instances
        self.dl_mode_btn = QPushButton((
            'Singular' if not settings.user_options['parallel'] else 'Parallel'
        ) + '\nDownloads')
        self.dl_mode_btn.setMinimumHeight(30)

        # Reset settings, (requires restart)
        self.reset_btn = QPushButton('Reset\n settings')
        self.reset_btn.setMinimumHeight(30)

        # Lineedit to show path to text file. (Can be changed later to use same path naming as other elements.)
        self.textfile_url = QLineEdit()
        self.textfile_url.setReadOnly(True)  # Read only
        self.textfile_url.setText(
            settings.user_options['multidl_txt'])  # Path from settings.

        self.txt_label = QLabel('Textfile:')

        # Textbrowser to adds some info about Grabber.
        self.textbrowser = QTextBrowser()
        self.textbrowser.setObjectName('AboutText')
        self.textbrowser.setOpenExternalLinks(True)

        # Sets textbroswer content at startup
        self.set_standard_text()

        self.QH = QHBoxLayout()
        self.QV = QVBoxLayout()

        self.QH.addWidget(self.textbrowser)

        self.QV.addWidget(self.dl_mode_btn)
        self.QV.addWidget(self.update_btn)
        self.QV.addSpacing(15)
        self.QV.addWidget(self.debug_info)
        self.QV.addWidget(self.dirinfo_btn)
        self.QV.addWidget(self.license_btn)
        self.QV.addWidget(self.reset_btn)

        self.QV.addStretch(1)

        self.QH.addLayout(self.QV)

        self.topQH = QHBoxLayout()
        self.topQH.addWidget(self.txt_label)
        self.topQH.addWidget(self.textfile_url)
        self.topQH.addWidget(self.location_btn)

        self.topQV = QVBoxLayout()
        self.topQV.addLayout(self.topQH)
        self.topQV.addLayout(self.QH)

        self.license_btn.clicked.connect(self.read_license)

        self.setLayout(self.topQV)
class Client(QWidget):
    def __init__(self):
        super(Client, self).__init__()
        self.resize(500, 450)
        # 1
        self.browser = QTextBrowser(self)
        self.edit = QTextEdit(self)

        self.splitter = QSplitter(self)
        self.splitter.setOrientation(Qt.Vertical)
        self.splitter.addWidget(self.browser)
        self.splitter.addWidget(self.edit)
        self.splitter.setSizes([350, 100])

        self.send_btn = QPushButton('Send', self)
        self.close_btn = QPushButton('Close', self)

        self.h_layout = QHBoxLayout()
        self.v_layout = QVBoxLayout()

        # 2
        self.sock = QTcpSocket(self)
        self.sock.connectToHost(QHostAddress.LocalHost, 8080)

        self.layout_init()
        self.signal_init()

    def layout_init(self):
        self.h_layout.addStretch(1)
        self.h_layout.addWidget(self.close_btn)
        self.h_layout.addWidget(self.send_btn)
        self.v_layout.addWidget(self.splitter)
        self.v_layout.addLayout(self.h_layout)
        self.setLayout(self.v_layout)

    def signal_init(self):
        self.send_btn.clicked.connect(self.write_data_slot)  # 3
        self.close_btn.clicked.connect(self.close_slot)  # 4
        self.sock.connected.connect(self.connected_slot)  # 5
        self.sock.readyRead.connect(self.read_data_slot)  # 6

    def write_data_slot(self):
        message = self.edit.toPlainText()
        self.browser.append('Client: {}'.format(message))
        datagram = message.encode()
        self.sock.write(datagram)
        self.edit.clear()

    def connected_slot(self):
        message = '小新:电影问答机器人小新为您服务,有什么关于电影方面的问题都可以问我噢(>^ω^<)'
        self.browser.append(message)

    def read_data_slot(self):
        while self.sock.bytesAvailable():
            datagram = self.sock.read(self.sock.bytesAvailable())
            message = datagram.decode()
            self.browser.append('小新: {}'.format(message))

    def close_slot(self):
        self.sock.close()
        self.close()

    def closeEvent(self, event):
        self.sock.close()
        event.accept()
Ejemplo n.º 34
0
 def initUI(self):
     self.setWindowTitle('PyQt 5界面实时更新例子')
     self.resize(500, 200)
     self.Output = QTextBrowser(self)
     self.Output.resize(500, 200)
Ejemplo n.º 35
0
class UserWindow(QWidget):
    close = pyqtSignal()

    def prepareData(self, name):
        self.user = name
        self.messages = []
        with open("GUI/messages.txt", "r") as f:
            lines = f.readlines()
            print(lines)
        with open("GUI/messages.txt", "w") as f:
            for line in lines:
                words = line.split(' ')
                print(words)
                print(' '.join(words[0:2]))
                if ' '.join(words[0:2]) != name:
                    f.write(line)
                else:
                    self.messages.append(line)

    def setupUi(self, Form):
        self.Form = Form
        Form.setObjectName("Face")
        Form.resize(400, 300)
        self.pushButton = QPushButton(Form)
        self.pushButton.clicked.connect(self.Next)
        self.pushButton.setGeometry(QRect(250, 30, 121, 61))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QPushButton(Form)
        self.pushButton_2.clicked.connect(self.New)
        self.pushButton_2.setGeometry(QRect(250, 110, 121, 61))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QPushButton(Form)
        self.pushButton_3.clicked.connect(self.Quit)
        self.pushButton_3.setGeometry(QRect(250, 200, 121, 61))
        self.pushButton_3.setObjectName("pushButton_3")
        self.label = QLabel(Form)
        self.label.setGeometry(QRect(20, 10, 200, 31))
        self.label.setObjectName("label")
        self.textBrowser = QTextBrowser(Form)
        self.textBrowser.setGeometry(QRect(10, 60, 181, 192))
        self.textBrowser.setObjectName("textBrowser")

        self.retranslateUi(Form)
        QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "FaceMessenger"))
        self.pushButton.setText(_translate("Form", "NEXT"))
        self.pushButton_2.setText(_translate("Form", "WRITE"))
        self.pushButton_3.setText(_translate("Form", "LOG OUT"))
        self.label.setText(
            _translate("Form",
                       "Masz {} nowych wiadomosci".format(len(self.messages))))

    def Quit(self):
        self.user = ""
        self.messages = []
        self.close.emit()
        self.Form.close()

    def Next(self):
        self.textBrowser.clear()
        if len(self.messages) > 0:
            message = self.messages[0].split(' ')
            if (len(message) > 4):
                self.textBrowser.append(
                    "Wysylajacy: {} \n Wiadomosc: \n".format(message[2] + " " +
                                                             message[3]))
                self.textBrowser.append(' '.join(message[4:]))
            self.messages = self.messages[1:]
            self.label.setText(
                QCoreApplication.translate(
                    "Form",
                    "Masz {} nowych wiadomosci".format(len(self.messages))))

    def New(self):
        self.FormNew = QWidget()
        self.NewForm(self.FormNew)
        self.FormNew.show()

    def NewForm(self, Form):
        Form.setObjectName("Form")
        Form.resize(485, 142)
        self.label = QLabel(Form)
        self.label.setGeometry(QRect(10, 10, 91, 31))
        self.label.setObjectName("label")
        self.label_2 = QLabel(Form)
        self.label_2.setGeometry(QRect(10, 50, 47, 14))
        self.label_2.setObjectName("label_2")
        self.label_3 = QLabel(Form)
        self.label_3.setGeometry(QRect(10, 90, 47, 14))
        self.label_3.setObjectName("label_3")
        self.textEdit = QTextEdit(Form)
        self.textEdit.setGeometry(QRect(220, 10, 181, 121))
        self.textEdit.setObjectName("textEdit")
        self.lineEdit = QLineEdit(Form)
        self.lineEdit.setGeometry(QRect(70, 50, 101, 21))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QLineEdit(Form)
        self.lineEdit_2.setGeometry(QRect(70, 90, 101, 21))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.pushButton = QPushButton(Form)
        self.pushButton.clicked.connect(self.Save)
        self.pushButton.setGeometry(QRect(420, 40, 51, 61))
        self.pushButton.setObjectName("pushButton")

        self.retranslateNew(Form)
        QMetaObject.connectSlotsByName(Form)

    def retranslateNew(self, Form):
        _translate = QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "Receiver:"))
        self.label_2.setText(_translate("Form", "Name"))
        self.label_3.setText(_translate("Form", "Surname"))
        self.pushButton.setText(_translate("Form", "Send"))

    def Save(self):
        with open("GUI/messages.txt", "a") as f:
            name = self.lineEdit.text()
            surname = self.lineEdit_2.text()
            data = self.textEdit.toPlainText()
            line = ' '.join([name, surname, self.user, data]) + '\n'
            f.write(line)
        self.FormNew.close()
Ejemplo n.º 36
0
	def __init__(self):
		QDialog.__init__(self)
		self.main_hbox=QHBoxLayout()
		self.left_vbox=QVBoxLayout()
		self.main_vbox=QVBoxLayout()
		self.setFixedSize(750,480) 
		self.setWindowTitle(_("About")+" (https://www.gpvdm.com)")
		self.setWindowIcon(icon_get("icon"))
		self.gpvdm=QLabel("<font size=40><b>gpvdm_gui</b></font>")
		self.image=QLabel()
		self.written_by=QLabel(_("Written by Roderick MacKenzie 2012-2019, published under the GPL V2.0 license."))
		self.written_by.setWordWrap(True)
		self.ver=QLabel(_("Version ")+ver())
		pixmap = QPixmap(os.path.join(get_image_file_path(),"image.jpg"))
		self.image.setPixmap(pixmap)
		self.left_vbox.addWidget(self.gpvdm)
		self.left_vbox.addWidget(self.image)
		self.left_vbox.addWidget(self.written_by)
		self.left_vbox.addWidget(self.ver)
		self.left=QWidget()
		self.left.setLayout(self.left_vbox)
		self.right=QTabWidget()
		self.right.setMinimumWidth(500)
		self.about=QTextBrowser()
		text=""
		text=text+_("gpvdm is a general-purpose tool for simulation of light harvesting devices. It was originally written to simulate organic solar cells and OLEDs, but it has recently been extended to simulate other devices including silicon based devices. Currently the model can sumulate:")
		text=text+"<ul>"
		text=text+"<li>"+_("Organic solar cells")+"</li>"
		text=text+"<li>"+_("Organic LEDs")+"</li>"
		text=text+"<li>"+_("Crystalline silicon solar cells")+"</li>"
		text=text+"<li>"+_("a-Si solar cells")+"</li>"
		text=text+"<li>"+_("CIGS solar cells")+"</li>"
		text=text+"</ul> "
		text=text+_("The model solves both electron and hole drift-diffusion, and carrier continuity equations in position space to describe the movement of charge within the device. The model also solves Poisson's equation to calculate the internal electrostatic potential. Recombination and carrier trapping are described within the model using a Shockley-Read-Hall (SRH) formalism, the distribution of trap sates can be arbitrarily defined. All equations can be solved either in steady state or in time domain. A fuller description of the model can be found in the here, in the associated publications and in the manual.")
		text=text+"<br>"
		text=text+"<br>"
		text=text+"<center><a href=\"https://www.gpvdm.com\">https://www.gpvdm.com</a></center>"
		self.about.setText(text)
		self.right.addTab(self.about,_("About"))
		
		self.license=QTextBrowser()
		text=""
		license_file=os.path.join(get_html_path(),"LICENSE.html")
		if (os.path.isfile(license_file)==True):
				f = open(license_file, mode='rb')
				lines = f.read()
				f.close()
				lines=lines.decode('utf-8')
				lines=lines.split("\n")
				for l in lines:
					text=text+l+"<br>"

		self.license.setText(text)
		self.right.addTab(self.license,_("Legal"))
		
		self.translations=QTextBrowser()
		text=""

		text=text+"<big><b>Translations of gpvdm:</b></big>"
		text=text+"<center>"
		text=text+"<br>"
		text=text+"<b>Chinese</b>: Liu Di (刘迪) and Zhao Chenyao (赵辰尧)"
		text=text+"<br>"
		text=text+"<br>"
		text=text+"<b>French</b>: Alexis Prel"
		text=text+"<br>"
		text=text+"<br>"
		text=text+"<b>Russian</b>: Timofey Golubev (Тимофей Голубев)"
		text=text+"<br>"
		text=text+"<br>"
		text=text+"<b>Your language</b>: Translator needed!"
		text=text+"</center>"
		text=text+"<br>"
		text=text+"<br>"
		text=text+"<big>Would you like gpvdm translated into your language?</big>"
		text=text+"<br>"
		text=text+"<big>Would you like your name in the credits of gpvdm?</big>"
		text=text+"<br>"
		text=text+"<br>"
		text=text+"If so then please consider joining the gpvdm translation effort.  This is somthing you can put on your CV and it\'s a way to make sure that speakers of your language have access to high quality scientific tools for simulating solar cells."

		self.translations.setText(text)
		#self.right.addTab(self.translations,_("Translations"))




		self.paths=QTextBrowser()
		text=""

		text=text+"<b>"+_("Materials library path")+":</b>"+get_materials_path()+"<br>"
		text=text+"<b>"+_("Device library path")+":</b>"+get_device_lib_path()+"<br>"
		text=text+"<b>"+_("Binary path")+":</b>"+get_bin_path()+"<br>"
		text=text+"<b>"+_("Plugins path")+":</b>"+get_plugins_path()+"<br>"
		text=text+"<b>"+_("Binary name")+":</b>"+get_exe_name()+"<br>"


		self.paths.setText(text)
		self.right.addTab(self.paths,_("Paths"))


		#self.materials=QListWidget()
		#self.right.addTab(self.materials,_("Materials"))

		self.main_hbox.addWidget(self.left)
		self.main_hbox.addWidget(self.right)
		self.widget_main_hbox=QWidget()
		self.widget_main_hbox.setLayout(self.main_hbox)
		self.main_vbox.addWidget(self.widget_main_hbox)
		
		self.hwidget=QWidget()

		self.closeButton = QPushButton(_("Close"))
		self.closeButton.clicked.connect(self.callback_close)
		hbox = QHBoxLayout()
		hbox.addStretch(1)
		hbox.addWidget(self.closeButton)

		self.hwidget.setLayout(hbox)
		
		self.main_vbox.addWidget(self.hwidget)

		self.setLayout(self.main_vbox)
		self.show()


		#QDialog.__init__(self)

		#self.materials.setIconSize(QSize(32,32))
		#self.materials.setViewMode(QListView.ListMode)
		#self.materials.setSpacing(8)
		#self.materials.setWordWrap(True)
		#gridsize=self.materials.size()
		#gridsize.setWidth(80)
		#gridsize.setHeight(40)

		#self.materials.setGridSize(gridsize)
		self.mat_icon = icon_get("organic_material")
Ejemplo n.º 37
0
class CrawlWindow(QWidget):
    def __init__(self):
        super(CrawlWindow, self).__init__()
        self.resize(500, 500)
        self.setWindowTitle('toptoon漫画更新监测')
        self.setWindowIcon(QIcon(':reson/maoyan.ico'))

        # 初始化启动按钮
        self.start_btn = QPushButton(self)
        # 初始化输出文本框
        self.log_browser = QTextBrowser(self)
        # 初始化表格控件
        self.table = QTableWidget(self)

        # 初始化水平布局
        self.h_layout = QHBoxLayout()
        # 初始化垂直布局
        self.v_layout = QVBoxLayout()

        # 初始化音频播放
        self.btn_sound = QSound(':reson/btn.wav', self)
        self.finish_sound = QSound(':reson/finish.wav', self)

        # 实例化线程
        self.worker = MyThread()

        # 实例化
        self.start_btn_init()
        self.layout_init()
        self.set_log_init()
        self.table_init()

    def start_btn_init(self):
        """ 启动按钮按钮 配置"""
        self.start_btn.setText('启动')
        self.start_btn.setEnabled(True)
        # self.start_btn.setFixedSize(300, 30)
        self.start_btn.clicked.connect(self.start_btn_slot)

    def table_init(self):
        """表格控件 配置"""
        self.table.setColumnCount(3)
        self.table.setHorizontalHeaderLabels(['漫画名', '更新章节', 'URL地址'])
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

    def set_log_init(self):
        """输出控件 配置"""
        # 输出至输出文本框
        self.worker.log_signal.connect(self.set_log_slot)
        # 输出至表格控件
        self.worker.result_signal.connect(self.set_table_slot)
        # 调用清屏槽
        # self.worker.start_q.connect(self.set_start_slot)

    def layout_init(self):
        """页面布局"""
        self.h_layout.addWidget(self.start_btn)
        self.v_layout.addWidget(self.table)
        self.v_layout.addWidget(self.log_browser)
        self.v_layout.addLayout(self.h_layout)
        self.setLayout(self.v_layout)

    def start_btn_slot(self):
        """程序启动"""
        self.btn_sound.play()
        self.log_browser.append('<font color="green">{}程序启动{}</font>'.format('*'*20, '*'*20))
        # 启动线程
        self.worker.start()
        self.finish_sound.play()
        # 改变设置按钮状态 输入框 下拉框
        self.start_btn.setEnabled(False)

    def set_log_slot(self, log):
        self.log_browser.append(log)

    def set_start_slot(self):
        # 表格清空 输出框窗口清空
        # self.table.clearContents()
        # self.table.setRowCount(0)
        self.log_browser.clear()

    def set_table_slot(self, article_name, total, url):
        """表格控件输出"""
        row = self.table.rowCount()
        self.table.insertRow(row)
        self.table.setItem(row, 0, QTableWidgetItem(article_name))
        self.table.setItem(row, 1, QTableWidgetItem(total))
        self.table.setItem(row, 2, QTableWidgetItem(url))
Ejemplo n.º 38
0
    def __init__(self, parent=None):
        """
        set up the stonix log viewer window gui element

        :return:
        """

        # we need environment to dynamically get the path to the icons
        self.env = Environment()
        self.icon_path = self.env.get_icon_path()
        cancel_button_icon = os.path.join(self.icon_path, "cancel_48.png")
        search_button_icon = os.path.join(self.icon_path, "system-search.png")

        # Create the window
        QDialog.__init__(self, parent)

        self.setObjectName(_fromUtf8("log_viewer_window"))
        self.resize(805, 600)
        self.setMinimumSize(QtCore.QSize(805, 600))
        self.setBaseSize(QtCore.QSize(805, 600))
        self.log_central_widget = QWidget()
        sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.log_central_widget.sizePolicy().hasHeightForWidth())
        self.log_central_widget.setSizePolicy(sizePolicy)
        self.log_central_widget.setObjectName(_fromUtf8("log_central_widget"))
        self.verticalLayoutWidget = QWidget(self.log_central_widget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 20, 800, 600))
        self.verticalLayoutWidget.setObjectName(
            _fromUtf8("verticalLayoutWidget"))
        hbox = QHBoxLayout()
        #hbox.addStretch(1)
        self.log_viewer_layout = QVBoxLayout()
        self.log_viewer_layout.setSpacing(-1)
        self.log_viewer_layout.setSizeConstraint(QLayout.SetDefaultConstraint)
        self.log_viewer_layout.setContentsMargins(5, 5, 5, 10)
        self.log_viewer_layout.setObjectName(_fromUtf8("log_viewer_layout"))
        self.log_display_browser = QTextBrowser(self.verticalLayoutWidget)
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.log_display_browser.sizePolicy().hasHeightForWidth())
        self.log_display_browser.setSizePolicy(sizePolicy)
        self.log_display_browser.setMinimumSize(QtCore.QSize(800, 450))
        self.log_display_browser.setMaximumSize(
            QtCore.QSize(16777215, 16777215))
        self.log_display_browser.setBaseSize(QtCore.QSize(800, 450))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.log_display_browser.setFont(font)
        self.log_display_browser.viewport().setProperty(
            "cursor", QtGui.QCursor(QtCore.Qt.IBeamCursor))
        self.log_display_browser.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.log_display_browser.setAcceptDrops(False)
        self.log_display_browser.setVerticalScrollBarPolicy(
            QtCore.Qt.ScrollBarAsNeeded)
        self.log_display_browser.setHorizontalScrollBarPolicy(
            QtCore.Qt.ScrollBarAlwaysOff)
        self.log_display_browser.setObjectName(
            _fromUtf8("log_display_browser"))
        self.log_viewer_layout.addWidget(self.log_display_browser)
        self.log_search_text = QTextEdit(self.verticalLayoutWidget)
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.log_search_text.sizePolicy().hasHeightForWidth())
        self.log_search_text.setSizePolicy(sizePolicy)
        self.log_search_text.setMinimumSize(QtCore.QSize(0, 30))
        self.log_search_text.setMaximumSize(QtCore.QSize(16777215, 30))
        self.log_search_text.setBaseSize(QtCore.QSize(800, 30))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.log_search_text.setFont(font)
        self.log_search_text.viewport().setProperty(
            "cursor", QtGui.QCursor(QtCore.Qt.IBeamCursor))
        self.log_search_text.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.log_search_text.setVerticalScrollBarPolicy(
            QtCore.Qt.ScrollBarAlwaysOff)
        self.log_search_text.setReadOnly(False)
        self.log_search_text.setObjectName(_fromUtf8("log_search_text"))

        self.log_viewer_layout.addWidget(self.log_search_text)
        self.log_search_button = QPushButton(self.verticalLayoutWidget)
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.log_search_button.sizePolicy().hasHeightForWidth())
        self.log_search_button.setSizePolicy(sizePolicy)
        self.log_search_button.setMinimumSize(QtCore.QSize(0, 30))
        self.log_search_button.setBaseSize(QtCore.QSize(0, 30))
        self.log_search_button.setFocusPolicy(QtCore.Qt.TabFocus)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(_fromUtf8(search_button_icon)),
                       QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.log_search_button.setIcon(icon)
        self.log_search_button.setObjectName(_fromUtf8("log_search_button"))
        self.log_viewer_layout.addWidget(self.log_search_button)
        # compatibility between pyqt4 and pyqt5
        try:
            QtCore.QObject.connect(self.log_search_button,
                                   QtCore.SIGNAL('clicked()'),
                                   self.highlight_search_results)
        except:
            self.log_search_button.clicked.connect(
                self.highlight_search_results)
        self.log_search_results_label = QLabel(self.verticalLayoutWidget)
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.log_search_results_label.sizePolicy().hasHeightForWidth())
        sizePolicy.setHorizontalPolicy(QSizePolicy.Expanding)
        self.log_search_results_label.setSizePolicy(sizePolicy)
        self.log_search_results_label.setMargin(5)
        self.log_search_results_label.setMinimumSize(QtCore.QSize(250, 30))
        self.log_search_results_label.setBaseSize(QtCore.QSize(250, 30))
        self.log_search_results_label.setFocusPolicy(QtCore.Qt.NoFocus)
        self.log_search_results_label.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.log_search_results_label.setObjectName(
            _fromUtf8("log_search_results_label"))
        hbox.addWidget(self.log_search_results_label)
        self.log_close_button = QPushButton(self.verticalLayoutWidget)
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.log_close_button.sizePolicy().hasHeightForWidth())
        self.log_close_button.setSizePolicy(sizePolicy)
        self.log_close_button.setMinimumSize(QtCore.QSize(80, 30))
        self.log_close_button.setBaseSize(QtCore.QSize(80, 30))
        self.log_close_button.setFocusPolicy(QtCore.Qt.TabFocus)
        self.log_close_button.setLayoutDirection(QtCore.Qt.RightToLeft)
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(_fromUtf8(cancel_button_icon)),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.log_close_button.setIcon(icon1)
        self.log_close_button.setObjectName(_fromUtf8("log_close_button"))
        hbox.addWidget(self.log_close_button)
        # compatibility between pyqt4 and pyqt5
        try:
            QtCore.QObject.connect(self.log_close_button,
                                   QtCore.SIGNAL('clicked()'), self.close)
        except:
            self.log_close_button.clicked.connect(self.close)
        self.log_viewer_layout.addLayout(hbox)
        self.setLayout(self.log_viewer_layout)
        self.retranslateUi()

        # set default focus to search field
        # Note that 0-millisecond QTimer objects will be replaced by QThreads in the future (not in pyqt5)
        QtCore.QTimer.singleShot(0, self.log_search_text.setFocus)
Ejemplo n.º 39
0
class SummaryWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__()
        self.parent = parent
        self.setWindowTitle(self.tr("Kurulum Bilgileri"))
        self.setLayout(QVBoxLayout())

        label1 = QLabel()
        label1.setText(
            self.
            tr("<h3>Kurulum süreci boyunca yapılacak işlemlerin özetine genel bir bakış atın.</h3>"
               ))
        self.layout().addWidget(label1)

        label2 = QLabel()
        label2.setText(self.tr("<h1>Sistem Yereli</h1>"))
        self.layout().addWidget(label2)

        self.textbrowser1 = QTextBrowser()
        self.textbrowser1.setText("Hebele")
        self.layout().addWidget(self.textbrowser1)

        label3 = QLabel()
        label3.setText(self.tr("<h1>Klavye Düzeni</h1>"))
        self.layout().addWidget(label3)

        self.textbrowser2 = QTextBrowser()
        self.textbrowser2.setText("Hebele")
        self.layout().addWidget(self.textbrowser2)

        label4 = QLabel()
        label4.setText(self.tr("<h1>Disk Bölümleme</h1>"))
        self.layout().addWidget(label4)

        self.textbrowser3 = QTextBrowser()
        self.textbrowser3.setText("Hebele")
        self.layout().addWidget(self.textbrowser3)

    def showEvent(self, event):
        self.textbrowser1.setText(
            self.
            tr("Sistem zamanı {} olarak ayarlanacaktır.\nSistem dili {} olarak ayarlanacaktır."
               ).format(self.parent.lilii_settings["timezone"],
                        self.parent.lilii_settings["lang"]))

        variant = None
        if self.parent.lilii_settings["keyboard_variant"] != None:
            variant = self.parent.lilii_settings["keyboard_variant"][-1]
        else:
            variant = "Default"

        self.textbrowser2.setText(
            self.tr(
                "Klavye modeli olarak {} seçildi.\nKlavye türü {}/{} seçildi."
            ).format(self.parent.lilii_settings["keyboard_model"][-1],
                     self.parent.lilii_settings["keyboard_layout"][-1],
                     variant))

        self.textbrowser3.clear()
        if self.parent.lilii_settings["/"]:
            self.textbrowser3.append(
                self.tr("Kök dizin olarak {} seçildi.").format(
                    self.parent.lilii_settings["/"]))

        if self.parent.lilii_settings["/home"]:
            self.textbrowser3.append(
                self.tr("Ev dizini olarak {} seçildi.").format(
                    self.parent.lilii_settings["/home"]))

        if is_efi() and self.parent.lilii_settings["/boot/efi"]:
            self.textbrowser3.append(
                self.tr("Ön yükleme dizini olarak {} seçildi.").format(
                    self.parent.lilii_settings["/boot/efi"]))

        else:
            self.textbrowser3.append(
                self.tr("Ön yükleyici buraya kurulacak: {}").format(
                    self.parent.lilii_settings["bootloader"]))
Ejemplo n.º 40
0
class Ui_log_viewer_window(QDialog):
    """
    stonix log viewer class
    creates a log viewer window for displaying and searching the last run log
    """
    def __init__(self, parent=None):
        """
        set up the stonix log viewer window gui element

        :return:
        """

        # we need environment to dynamically get the path to the icons
        self.env = Environment()
        self.icon_path = self.env.get_icon_path()
        cancel_button_icon = os.path.join(self.icon_path, "cancel_48.png")
        search_button_icon = os.path.join(self.icon_path, "system-search.png")

        # Create the window
        QDialog.__init__(self, parent)

        self.setObjectName(_fromUtf8("log_viewer_window"))
        self.resize(805, 600)
        self.setMinimumSize(QtCore.QSize(805, 600))
        self.setBaseSize(QtCore.QSize(805, 600))
        self.log_central_widget = QWidget()
        sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.log_central_widget.sizePolicy().hasHeightForWidth())
        self.log_central_widget.setSizePolicy(sizePolicy)
        self.log_central_widget.setObjectName(_fromUtf8("log_central_widget"))
        self.verticalLayoutWidget = QWidget(self.log_central_widget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 20, 800, 600))
        self.verticalLayoutWidget.setObjectName(
            _fromUtf8("verticalLayoutWidget"))
        hbox = QHBoxLayout()
        #hbox.addStretch(1)
        self.log_viewer_layout = QVBoxLayout()
        self.log_viewer_layout.setSpacing(-1)
        self.log_viewer_layout.setSizeConstraint(QLayout.SetDefaultConstraint)
        self.log_viewer_layout.setContentsMargins(5, 5, 5, 10)
        self.log_viewer_layout.setObjectName(_fromUtf8("log_viewer_layout"))
        self.log_display_browser = QTextBrowser(self.verticalLayoutWidget)
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.log_display_browser.sizePolicy().hasHeightForWidth())
        self.log_display_browser.setSizePolicy(sizePolicy)
        self.log_display_browser.setMinimumSize(QtCore.QSize(800, 450))
        self.log_display_browser.setMaximumSize(
            QtCore.QSize(16777215, 16777215))
        self.log_display_browser.setBaseSize(QtCore.QSize(800, 450))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.log_display_browser.setFont(font)
        self.log_display_browser.viewport().setProperty(
            "cursor", QtGui.QCursor(QtCore.Qt.IBeamCursor))
        self.log_display_browser.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.log_display_browser.setAcceptDrops(False)
        self.log_display_browser.setVerticalScrollBarPolicy(
            QtCore.Qt.ScrollBarAsNeeded)
        self.log_display_browser.setHorizontalScrollBarPolicy(
            QtCore.Qt.ScrollBarAlwaysOff)
        self.log_display_browser.setObjectName(
            _fromUtf8("log_display_browser"))
        self.log_viewer_layout.addWidget(self.log_display_browser)
        self.log_search_text = QTextEdit(self.verticalLayoutWidget)
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.log_search_text.sizePolicy().hasHeightForWidth())
        self.log_search_text.setSizePolicy(sizePolicy)
        self.log_search_text.setMinimumSize(QtCore.QSize(0, 30))
        self.log_search_text.setMaximumSize(QtCore.QSize(16777215, 30))
        self.log_search_text.setBaseSize(QtCore.QSize(800, 30))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.log_search_text.setFont(font)
        self.log_search_text.viewport().setProperty(
            "cursor", QtGui.QCursor(QtCore.Qt.IBeamCursor))
        self.log_search_text.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.log_search_text.setVerticalScrollBarPolicy(
            QtCore.Qt.ScrollBarAlwaysOff)
        self.log_search_text.setReadOnly(False)
        self.log_search_text.setObjectName(_fromUtf8("log_search_text"))

        self.log_viewer_layout.addWidget(self.log_search_text)
        self.log_search_button = QPushButton(self.verticalLayoutWidget)
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.log_search_button.sizePolicy().hasHeightForWidth())
        self.log_search_button.setSizePolicy(sizePolicy)
        self.log_search_button.setMinimumSize(QtCore.QSize(0, 30))
        self.log_search_button.setBaseSize(QtCore.QSize(0, 30))
        self.log_search_button.setFocusPolicy(QtCore.Qt.TabFocus)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(_fromUtf8(search_button_icon)),
                       QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.log_search_button.setIcon(icon)
        self.log_search_button.setObjectName(_fromUtf8("log_search_button"))
        self.log_viewer_layout.addWidget(self.log_search_button)
        # compatibility between pyqt4 and pyqt5
        try:
            QtCore.QObject.connect(self.log_search_button,
                                   QtCore.SIGNAL('clicked()'),
                                   self.highlight_search_results)
        except:
            self.log_search_button.clicked.connect(
                self.highlight_search_results)
        self.log_search_results_label = QLabel(self.verticalLayoutWidget)
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.log_search_results_label.sizePolicy().hasHeightForWidth())
        sizePolicy.setHorizontalPolicy(QSizePolicy.Expanding)
        self.log_search_results_label.setSizePolicy(sizePolicy)
        self.log_search_results_label.setMargin(5)
        self.log_search_results_label.setMinimumSize(QtCore.QSize(250, 30))
        self.log_search_results_label.setBaseSize(QtCore.QSize(250, 30))
        self.log_search_results_label.setFocusPolicy(QtCore.Qt.NoFocus)
        self.log_search_results_label.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.log_search_results_label.setObjectName(
            _fromUtf8("log_search_results_label"))
        hbox.addWidget(self.log_search_results_label)
        self.log_close_button = QPushButton(self.verticalLayoutWidget)
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.log_close_button.sizePolicy().hasHeightForWidth())
        self.log_close_button.setSizePolicy(sizePolicy)
        self.log_close_button.setMinimumSize(QtCore.QSize(80, 30))
        self.log_close_button.setBaseSize(QtCore.QSize(80, 30))
        self.log_close_button.setFocusPolicy(QtCore.Qt.TabFocus)
        self.log_close_button.setLayoutDirection(QtCore.Qt.RightToLeft)
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(_fromUtf8(cancel_button_icon)),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.log_close_button.setIcon(icon1)
        self.log_close_button.setObjectName(_fromUtf8("log_close_button"))
        hbox.addWidget(self.log_close_button)
        # compatibility between pyqt4 and pyqt5
        try:
            QtCore.QObject.connect(self.log_close_button,
                                   QtCore.SIGNAL('clicked()'), self.close)
        except:
            self.log_close_button.clicked.connect(self.close)
        self.log_viewer_layout.addLayout(hbox)
        self.setLayout(self.log_viewer_layout)
        self.retranslateUi()

        # set default focus to search field
        # Note that 0-millisecond QTimer objects will be replaced by QThreads in the future (not in pyqt5)
        QtCore.QTimer.singleShot(0, self.log_search_text.setFocus)

        # doesn't appear to be needed and doesn't appear to do anything when enabled
        #QtCore.QMetaObject.connectSlotsByName(self)

    def retranslateUi(self):
        """
        set names and shortcuts for log viewer window

        :return:
        """

        self.setWindowTitle(_translate("log_viewer_window", "Log Viewer",
                                       None))
        self.log_search_button.setText(
            _translate("log_viewer_window", "Search", None))
        self.log_search_button.setShortcut(
            _translate("log_viewer_window", "Ctrl+S", None))
        self.log_close_button.setText(
            _translate("log_viewer_window", "Close", None))
        self.log_close_button.setShortcut(
            _translate("log_viewer_window", "Esc", None))

    def highlight_search_results(self):
        """
        search through log output and highlight all matching search terms

        """

        # get search field text and set up cursor
        searchterm = self.log_search_text.toPlainText()
        cursor = self.log_display_browser.textCursor()
        cursor.select(QtGui.QTextCursor.Document)
        cursor.setCharFormat(QtGui.QTextCharFormat())

        # clear all highlighted items for each new search
        cursor.clearSelection()
        self.log_display_browser.moveCursor(QtGui.QTextCursor.End)

        # reset search results for each new search
        self.search_results = []

        # search through log_display and highlight all matching search terms
        while self.log_display_browser.find(searchterm,
                                            QtGui.QTextDocument.FindBackward):
            result = self.log_display_browser.ExtraSelection()

            highlighter = QtGui.QColor(QtCore.Qt.yellow).lighter(160)

            result.format.setBackground(highlighter)
            result.format.setProperty(QtGui.QTextFormat.FullWidthSelection,
                                      QVariant(True))
            result.cursor = self.log_display_browser.textCursor()
            result.cursor.clearSelection()
            self.search_results.append(result)

        self.log_display_browser.setExtraSelections(self.search_results)
        num_results = str(len(self.search_results))
        self.log_search_results_label.setText("Search Results: " + num_results)

    def display_log_text(self, text):
        """Display the submitted text in the log_display.

        :param text: text to display in log window

        """

        if type(text) is list:
            temptext = ''
            for line in text:
                temptext = temptext + line
            text = temptext
        self.log_display_browser.setPlainText(text)
Ejemplo n.º 41
0
class App(QMainWindow):

    def __init__(self):
        super().__init__()
        self.title = 'UIC search Engine'
        self.left = 500
        self.top = 500
        self.width = 1200
        self.height = 700
        self.initUI()
        self.results_page = 10

    def initUI(self):
        self.setWindowTitle(self.title)
        html='<h1>WELCOME</h1>'
        self.setGeometry(self.left, self.top, self.width, self.height)

        # Create textbox
        self.textbox = QLineEdit(self)
        self.textbox.move(1500, 990)
        self.textbox.resize(500, 60)
        self.textbox.setToolTip("Enter Your Query here")
        self.textbox.setStyleSheet("background: white")
        

        # Create a button in the window
        self.button = QPushButton('Search UIC', self)
        self.button.move(2100, 1000)
        self.button.resize(200,50)
        self.button.setStyleSheet('color: white; background: blue')
        
        
        # connect TextView to function on_click
        self.button.clicked.connect(self.on_click)
        self.result_view = QTextBrowser(self)
        # self.result_view.setReadOnly(True)
        self.result_view.move(1400, 1100)
        self.result_view.resize(800, 500)
        self.result_view.setStyleSheet("background: white")
        self.result_view.hide()
        self.next10 = QPushButton('Search More results....', self)
        self.next10.move(1500, 1650)
        self.next10.resize(300, 50)
        self.next10.setStyleSheet('color: white; background: blue')
        self.next10.clicked.connect(self.on_click_label)
        self.next10.hide()
        self.result_view.append(html)
        self.setStyleSheet("background-image: url(p.jpg); background-repeat: no-repeat; background-position: center; background-attachment: stretch")
        self.showFullScreen()

    @pyqtSlot()
    def on_click(self):
        self.results_page = 10
        query = self.textbox.text()
        search_result = get_search_result(query, 500)
        display_html = '<p>Following are the relavant links</p>'
        self.url_list = []
        for url in search_result:

            display_html += self.add_href(url)
            self.url_list.append(self.add_href(url))

        urls = ''.join(self.url_list[:self.results_page])
        self.result_view.setText(urls)
        self.result_view.setOpenExternalLinks(True)
        # self.result_view.show()
        self.next10.setText('Show more Results....')
        self.next10.show()

        self.setStyleSheet("background-image: url(p.jpg); background-repeat: no-repeat; background-position: center; background-attachment: stretch")

        self.result_view.show()

        self.result_view.textCursor().insertHtml(display_html)
        self.result_view.append(display_html)

    def add_href(self, url):
        return '<a href="' + url + '">' + url + '</a><br><br>'

    @pyqtSlot()
    def on_click_label(self):
        self.results_page = self.results_page + 10
        self.result_view.setText(''.join(self.url_list[:self.results_page]))
Ejemplo n.º 42
0
class DeepTools(QWidget):
    '''a deep learning GUI

    '''
    def __init__(self, parent=None):
        '''init for gui

        Parameters
        ----------
        parent : QWidget
            parent window if any (for future dvpt such as tyssue analyzer)

        '''
        self.currently_selected_metrics = []
        super().__init__(parent)
        self.blinker = Blinker()
        self.initUI()
        self.to_blink_after_worker_execution = None
        self.deepTA = EZDeepLearning()  # init empty model

    def initUI(self):
        print('here')
        '''init ui

        '''
        self.threading_enabled = True
        # logging
        self.logger_console = QTextBrowser(self)
        self.logger_console.setReadOnly(True)
        self.logger_console.textCursor().movePosition(QTextCursor.Left,
                                                      QTextCursor.KeepAnchor,
                                                      1)
        self.logger_console.setHtml('<html>')
        self.logger_console.ensureCursorVisible()
        if not DEBUG:
            XStream.stdout().messageWritten.connect(self.set_html_black)
            XStream.stderr().messageWritten.connect(self.set_html_red)
        self.handler = QtHandler()
        self.handler.setFormatter(logging.Formatter(TA_logger.default_format))
        # change default handler for logging
        TA_logger.setHandler(self.handler)

        self.setWindowTitle(__NAME__ + ' v' + str(__VERSION__))

        # Initialize tab screen
        self.tabs = QTabWidget(self)
        self.model_tab = QWidget()
        self.train_tab = QWidget()
        self.ensemble_tab = QWidget()
        self.predict_tab = QWidget()
        self.advanced_tab = QWidget()
        # self.post_process = QWidget() # redundant with predict

        # Add tabs
        self.tabs.addTab(
            self.model_tab, 'Model'
        )  # split concatenate visualize model and or weights/ can I rename also things and allow for freeze of the layers too...
        self.tabs.addTab(self.train_tab,
                         'Build Train/GT Sets = Image concatenation')
        # self.tabs.addTab(self.predict_tab, 'Predict')
        self.tabs.addTab(
            self.ensemble_tab, 'Ensemble'
        )  # To combine several outputs/models to improve seg quality
        self.tabs.addTab(self.advanced_tab,
                         'Advanced')  # mutate model, feeze, 3D, ... TODO
        self.advanced_tab.setVisible(False)
        # self.tabs.setVisible(False)
        # self.tabs.addTab(self.post_process, 'Post Process') # redundant with predict

        self.tabs.currentChanged.connect(self._onTabChange)

        # creating model tab
        self.model_tab.layout = QGridLayout()
        self.model_tab.layout.setAlignment(Qt.AlignTop)
        self.model_tab.layout.setColumnStretch(0, 25)
        self.model_tab.layout.setColumnStretch(1, 75)
        self.model_tab.layout.setHorizontalSpacing(3)
        self.model_tab.layout.setVerticalSpacing(3)

        # should I allow this to be stored in config file, probably not...
        self.input_model = OpenFileOrFolderWidget(
            parent_window=self,
            label_text='Load model',
            is_file=True,
            extensions=
            "Supported Files (*.h5 *.H5 *.hdf5 *.HDF5 *.json *.JSON *.model);;All Files (*)",
            tip_text='Drag and drop a model file here')

        self.input_weights = OpenFileOrFolderWidget(
            parent_window=self,
            label_text='Load weights (optional)',
            is_file=True,
            extensions=
            "Supported Files (*.h5 *.H5 *.hdf5 *.HDF5);;All Files (*)",
            tip_text='Drag and drop a single weight file here'
        )  # TODO shall i add *.model ???

        # parameters for the pretrained models
        self.groupBox_pretrain = QGroupBox('Model',
                                           objectName='groupBox_pretrain')
        self.groupBox_pretrain.setEnabled(True)
        # groupBox layout
        self.groupBox_pretrain_layout = QGridLayout()
        self.groupBox_pretrain_layout.setAlignment(Qt.AlignTop)
        self.groupBox_pretrain_layout.setColumnStretch(0, 25)
        self.groupBox_pretrain_layout.setColumnStretch(1, 25)
        self.groupBox_pretrain_layout.setColumnStretch(2, 50)
        self.groupBox_pretrain_layout.setColumnStretch(3, 2)
        self.groupBox_pretrain_layout.setHorizontalSpacing(3)
        self.groupBox_pretrain_layout.setVerticalSpacing(3)

        self.groupBox_pretrain_layout.addWidget(self.input_model, 1, 0, 1, 3)
        self.groupBox_pretrain_layout.addWidget(self.input_weights, 2, 0, 1, 3)

        self.groupBox_pretrain.setLayout(self.groupBox_pretrain_layout)
        self.model_tab.layout.addWidget(self.groupBox_pretrain, 1, 0, 1, 2)
        self.model_tab.setLayout(self.model_tab.layout)

        # widget global layout
        table_widget_layout = QVBoxLayout()
        table_widget_layout.setAlignment(Qt.AlignTop)
        table_widget_layout.addWidget(self.tabs)

        log_and_main_layout = QHBoxLayout()
        log_and_main_layout.setAlignment(Qt.AlignTop)

        # TODO put this in a group to get the stuff
        log_groupBox = QGroupBox('Log', objectName='log_groupBox')
        log_groupBox.setEnabled(True)

        help = PyQT_markdown()
        try:
            # this_dir, this_filename = os.path.split(__file__)
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'getting_started2.md'),
            #                             title='getting started: predict using pre-trained network')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'getting_started.md'),
            #                             title='getting started: build and train a custom network')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'getting_started3.md'),
            #                             title='getting started: further train the EPySeg model on your data')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'pretrained_model.md'),
            #                             title='Load a pre-trained model')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'model.md'),
            #                             title='Build a model from scratch')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'load_model.md'),
            #                             title='Load a model')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'train.md'), title='Train')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'predict.md'), title='Predict')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'preprocessing.md'),
            #                             title='Training dataset parameters')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'data_augmentation.md'),
            #                             title='Data augmentation')
            # TODO prevent this window to be resize upon tab changes
            pass
        except:
            traceback.print_exc()

        # Initialize tab screen
        self.help_tabs = QTabWidget(self)
        self.help_tabs.setMinimumWidth(500)
        self.log_tab = QWidget()
        self.help_html_tab = QWidget()
        self.settings_GUI = QWidget()

        # Add tabs
        self.help_tabs.addTab(self.log_tab, 'Log')
        self.help_tabs.addTab(self.help_html_tab, 'Help')
        self.help_tabs.addTab(self.settings_GUI, 'GUI settings')

        # creating model tab
        self.log_tab.layout = QVBoxLayout()
        self.log_tab.layout.setAlignment(Qt.AlignTop)

        # global system progress bar
        self.pbar = QProgressBar(self)

        self.log_tab.layout.addWidget(self.logger_console)
        # self.log_tab.layout.addWidget(self.instant_help)
        self.log_tab.layout.addWidget(self.pbar)
        self.log_tab.setLayout(self.log_tab.layout)

        self.help_html_tab.layout = QVBoxLayout()
        self.help_html_tab.layout.setAlignment(Qt.AlignTop)
        self.help_html_tab.layout.setContentsMargins(0, 0, 0, 0)
        self.help_html_tab.layout.addWidget(help)
        self.help_html_tab.setLayout(self.help_html_tab.layout)

        self.enable_threading_check = QCheckBox(
            'Threading enable/disable', objectName='enable_threading_check')
        self.enable_threading_check.setChecked(True)
        # self.enable_threading_check.stateChanged.connect(self._set_threading)
        self.enable_debug = QCheckBox('Debug mode', objectName='enable_debug')
        self.enable_debug.setChecked(False)
        self.enable_debug.stateChanged.connect(self._enable_debug)

        self.settings_GUI.layout = QVBoxLayout()
        self.settings_GUI.layout.setAlignment(Qt.AlignTop)
        self.settings_GUI.layout.addWidget(self.enable_threading_check)
        self.settings_GUI.layout.addWidget(self.enable_debug)
        self.settings_GUI.setLayout(self.settings_GUI.layout)

        log_and_main_layout.addLayout(table_widget_layout)
        log_and_main_layout.addWidget(self.help_tabs)

        self.setLayout(log_and_main_layout)

        try:
            screen = QApplication.desktop().screenNumber(
                QApplication.desktop().cursor().pos())
            centerPoint = QApplication.desktop().screenGeometry(
                screen).center()
            self.setGeometry(
                QtCore.QRect(centerPoint.x() - self.width(),
                             centerPoint.y() - self.height(), self.width(),
                             self.height()))
        except:
            pass

        # # monitor mouse position to show helpful tips/guide the user
        # self.setMouseTracking(True) # does not work well because of contained objects capturing mouse --> maybe simplest is to have the
        self.show()

    def _onTabChange(self):
        pass

    def set_html_red(self, text):
        # quick n dirty log coloring --> improve when I have time
        textCursor = self.logger_console.textCursor()
        textCursor.movePosition(QTextCursor.End)
        self.logger_console.setTextCursor(textCursor)
        format = QTextCharFormat()
        format.setForeground(QColor(255, 0, 0))  # red
        self.logger_console.setCurrentCharFormat(format)
        self.logger_console.insertPlainText(text)
        self.logger_console.verticalScrollBar().setValue(
            self.logger_console.verticalScrollBar().maximum())

    def set_html_black(self, text):
        # quick n dirty log coloring --> improve when I have time
        textCursor = self.logger_console.textCursor()
        textCursor.movePosition(QTextCursor.End)
        self.logger_console.setTextCursor(textCursor)
        format = QTextCharFormat()
        format.setForeground(QColor(0, 0, 0))  # black
        self.logger_console.setCurrentCharFormat(format)
        self.logger_console.insertPlainText(text)

    def _enable_debug(self):
        if self.enable_debug.isChecked():
            # enable debug extensive log
            logger.setLevel(TA_logger.DEBUG)
            logger.debug('Debug enabled...')
        else:
            # disable debug log
            logger.setLevel(TA_logger.DEFAULT)
            logger.debug('Debug disabled...')
Ejemplo n.º 43
0
 def __init__(self, title, text, image, parent=None):
     super(AboutDialog, self).__init__(parent)
     layout = QVBoxLayout()
     titleLayout = QHBoxLayout()
     name_versionLabel = QLabel(title)
     contentsLayout = QHBoxLayout()
     aboutBrowser = QTextBrowser()
     aboutBrowser.append(text)
     aboutBrowser.setOpenExternalLinks(True)
     creditsBrowser = QTextBrowser()
     creditsBrowser.append(self.contributors())
     creditsBrowser.setOpenExternalLinks(True)
     TabWidget = QTabWidget()
     TabWidget.addTab(aboutBrowser, self.tr('About'))
     TabWidget.addTab(creditsBrowser, self.tr('Contributors'))
     aboutBrowser.moveCursor(QTextCursor.Start)
     creditsBrowser.moveCursor(QTextCursor.Start)
     imageLabel = QLabel()
     imageLabel.setPixmap(QPixmap(image))
     titleLayout.addWidget(imageLabel)
     titleLayout.addWidget(name_versionLabel)
     titleLayout.addStretch()
     contentsLayout.addWidget(TabWidget)
     buttonLayout = QHBoxLayout()
     buttonBox = QDialogButtonBox(QDialogButtonBox.Ok)
     buttonLayout.addWidget(buttonBox)
     layout.addLayout(titleLayout)
     layout.addLayout(contentsLayout)
     layout.addLayout(buttonLayout)
     self.setLayout(layout)
     buttonBox.clicked.connect(self.accept)
     self.setMinimumSize(QSize(380, 400))
     self.setWindowTitle(self.tr('About Meteo-qt'))
Ejemplo n.º 44
0
    def loadDataDialog(self):
        '''Load Data Widget UI'''

        loadData = QDialog()
        loadData.setWindowTitle('Load Data')
        loadData.setWindowIcon(
            QIcon(resource_path('icons/load-pngrepo-com.png')))

        openFilesButton = QPushButton('Open File(s)')
        openFilesButton.clicked.connect(self.filesDialog)
        openFolderButton = QPushButton('Open Folder')
        openFolderButton.clicked.connect(self.folderDialog)

        sepLabel = QLabel('Separator:')
        self.sepCB = QComboBox()
        self.sepCB.addItems(['Tab', 'Comma', 'Space', 'Semicolon'])

        textTypeLabel = QLabel('Text Type')
        self.textTypeCB = QComboBox()
        self.textTypeCB.addItems(['.txt', '.csv', '.dat'])

        headerLineLabel = QLabel('Header Starting Line:')
        self.headerLineSB = QSpinBox()
        self.headerLineSB.setMinimum(1)

        dataLineLabel = QLabel('Data Starting Line:')
        self.dataLineSB = QSpinBox()
        self.dataLineSB.setMinimum(1)

        locLabel = QLabel('Location:')
        self.locList = QTextBrowser()

        self.showCheckBox = QCheckBox('Show All Data to Table')
        self.showCheckBox.setChecked(False)
        self.showCheckBox.toggled.connect(self.showCheckBoxState)
        self.showState = QLabel()

        cancelButton = QPushButton('Cancel')
        cancelButton.clicked.connect(loadData.close)
        loadButton = QPushButton('Load')
        loadButton.clicked.connect(self.loadAction)
        loadButton.clicked.connect(loadData.close)

        grid = QGridLayout()
        grid.addWidget(openFilesButton, 1, 1, 1, 2)
        grid.addWidget(openFolderButton, 1, 3, 1, 2)

        grid.addWidget(sepLabel, 2, 1, 1, 1)
        grid.addWidget(self.sepCB, 2, 2, 1, 1)
        grid.addWidget(textTypeLabel, 2, 3, 1, 1)
        grid.addWidget(self.textTypeCB, 2, 4, 1, 1)

        grid.addWidget(headerLineLabel, 3, 1, 1, 1)
        grid.addWidget(self.headerLineSB, 3, 2, 1, 1)
        grid.addWidget(dataLineLabel, 3, 3, 1, 1)
        grid.addWidget(self.dataLineSB, 3, 4, 1, 1)

        grid.addWidget(locLabel, 4, 1, 1, 1)

        grid.addWidget(self.locList, 5, 1, 10, 4)

        grid.addWidget(self.showCheckBox, 15, 1, 1, 2)
        grid.addWidget(loadButton, 15, 3, 1, 1)
        grid.addWidget(cancelButton, 15, 4, 1, 1)

        loadData.setLayout(grid)

        loadData.exec_()
Ejemplo n.º 45
0
    def init_ui(self):
        vbox = QVBoxLayout()

        self.label_title = QLabel("%s %s" % (_(self.work), self.paras.configuration_name()))
        font = QFont()
        font.setPointSize(18)
        font.setBold(True)
        self.label_title.setFont(font)
        self.label_title.setContentsMargins(10, 5, 5, 7)
        self.label_title.setStyleSheet(self.title_style)
        hbox1 = QHBoxLayout()
        hbox1.addWidget(self.label_title, 1)
        vbox.addLayout(hbox1)

        self.splitter_title = QSplitter(Qt.Vertical)
        self.splitter_event = QSplitter(Qt.Vertical)
        self.splitter_title.splitterMoved.connect(self.on_splitter_title_moved)
        self.splitter_event.splitterMoved.connect(self.on_splitter_event_moved)

        self.lbl_events_title1 = QLabel(_("Main events"))
        self.splitter_title.addWidget(self.lbl_events_title1)

        self.lbl_events_title2 = QLabel(_("Resources"))
        self.splitter_title.addWidget(self.lbl_events_title2)

        self.lbl_events_title3 = QLabel(_("Errors"))
        self.splitter_title.addWidget(self.lbl_events_title3)

        self.pte_events1 = QTextBrowser()
        self.pte_events1.setOpenExternalLinks(True)
        self.pte_events1.setOpenLinks(False)
        self.pte_events1.anchorClicked.connect(self.on_anchor_clicked)
        self.pte_events1.setLineWrapMode(QTextEdit.NoWrap)
        self.splitter_event.addWidget(self.pte_events1)

        self.pte_events2 = QTextBrowser()
        self.pte_events2.setOpenExternalLinks(True)
        self.pte_events2.setOpenLinks(False)
        self.pte_events2.anchorClicked.connect(self.on_anchor_clicked)
        self.pte_events2.setLineWrapMode(QTextEdit.NoWrap)
        self.splitter_event.addWidget(self.pte_events2)

        self.pte_events3 = QPlainTextEdit()
        self.pte_events3.setReadOnly(True)
        self.pte_events3.setLineWrapMode(QPlainTextEdit.NoWrap)
        self.pte_events3.setStyleSheet(Style.red_text())
        self.pte_events3.setCenterOnScroll(True)
        self.splitter_event.addWidget(self.pte_events3)

        self.splitter_title.setStretchFactor(0, 5)
        self.splitter_title.setStretchFactor(1, 3)
        self.splitter_title.setStretchFactor(2, 1)
        self.splitter_event.setStretchFactor(0, 5)
        self.splitter_event.setStretchFactor(1, 3)
        self.splitter_event.setStretchFactor(2, 1)
        hbox_splitters = QHBoxLayout()
        hbox_splitters.addWidget(self.splitter_title, 0)
        hbox_splitters.addWidget(self.splitter_event, 5)
        vbox.addLayout(hbox_splitters)

        lbl_box = QHBoxLayout()
        self.lbl_processing = QLabel(_("Processing:"))
        self.lbl_processing_file = QLabel("")
        font = QFontDatabase.systemFont(QFontDatabase.FixedFont)
        self.lbl_processing_file.setFont(font)
        self.lbl_processing.setFont(font)
        self.lbl_processing.setVisible(False)
        self.lbl_processing_file.setVisible(False)
        lbl_box.addWidget(self.lbl_processing)
        lbl_box.addWidget(self.lbl_processing_file)
        lbl_box.addStretch(1)
        vbox.addLayout(lbl_box)

        btn_box = QHBoxLayout()
        btn_box.addStretch(1)
        self.chk_trial_run = QCheckBox(_("Trial run"))
        self.chk_trial_run.setChecked(not self.paras.is_saving_sitemaps)
        btn_box.addWidget(self.chk_trial_run)
        self.btn_run = QPushButton(_("Run"))
        self.btn_run.clicked.connect(self.on_btn_run_clicked)
        btn_box.addWidget(self.btn_run)
        self.btn_stop = QPushButton(_("Stop"))
        self.btn_stop.clicked.connect(self.on_btn_stop_clicked)
        self.normal_style = self.btn_stop.styleSheet()
        self.btn_stop.setEnabled(False)
        btn_box.addWidget(self.btn_stop)
        self.btn_close = QPushButton(_("Close"))
        self.btn_close.clicked.connect(self.on_btn_close_clicked)
        btn_box.addWidget(self.btn_close)
        vbox.addLayout(btn_box)

        self.setLayout(vbox)
        self.resize(self.conf.work_widget_width(self.work), self.conf.work_widget_height(self.work))
Ejemplo n.º 46
0
class TideWidget(QWidget):
    def __init__(self):
        super(TideWidget, self).__init__()

        self.initUI()

    def mergeData(self):
        '''Calling data merger (tide_merge.py)'''

        tide_merge.main()

    def initUI(self):
        '''Main Widget UI'''

        self.setGeometry(300, 100, 480, 640)
        self.setWindowTitle('Tide Analysis and Prediction GUI')
        self.setWindowIcon(QIcon(resource_path('icons/wave-pngrepo-com.png')))

        loadFilesButton = QPushButton('Load Data')
        loadFilesButton.clicked.connect(self.loadDataDialog)

        mergeButton = QPushButton('Merge Data')
        mergeButton.clicked.connect(self.mergeData)
        plotObsButton = QPushButton('Plot Observation Data')
        plotObsButton.clicked.connect(self.plotLoad)

        timeHeaderLabel = QLabel('Time Header:')
        self.timeHeaderCB = QComboBox()

        depthHeaderLabel = QLabel('Depth Header:')
        self.depthHeaderCB = QComboBox()

        dayFirstLabel = QLabel('Day First:')
        self.dayFirstCB = QComboBox()
        self.dayFirstCB.addItems(['True', 'False'])

        self.table = QTableWidget()
        scroll = QScrollArea()
        scroll.setWidget(self.table)

        self.methodLabel = QLabel()
        self.methodLabel.setAlignment(Qt.AlignRight)
        tideAnalysisLabel = QLabel()
        tideAnalysisLabel.setText('Tidal Analysis Method')
        tideAnalysisLabel.setAlignment(Qt.AlignLeft)
        self.ttideButton = QRadioButton('T Tide')
        self.ttideButton.toggled.connect(self.methodButton)
        self.ttideButton.setChecked(True)
        self.utideButton = QRadioButton('U Tide')
        self.utideButton.toggled.connect(self.methodButton)

        latLabel = QLabel('Latitude (dd.ddddd):')
        self.latDSB = QDoubleSpinBox()
        self.latDSB.setRange(-90.0, 90.0)
        self.latDSB.setDecimals(6)
        self.latDSB.setValue(0.000001)

        self.saveLocLineForm = QLineEdit()
        saveLocButton = QPushButton('Save File Location')
        saveLocButton.clicked.connect(self.savePathDialog)

        startcalLabel = QLabel('Start Date')
        startcalLabel.setAlignment(Qt.AlignHCenter)
        self.startcal = QCalendarWidget()

        endcalLabel = QLabel('End Date')
        endcalLabel.setAlignment(Qt.AlignHCenter)
        self.endcal = QCalendarWidget()

        freqLabel = QLabel('Time Interval:')
        self.freqSB = QSpinBox()
        self.freqSB.setValue(1)
        self.freqUnitCB = QComboBox()
        self.freqUnitCB.addItems(['hours', 'minutes'])

        solveButton = QPushButton('Analyse Tide')
        solveButton.clicked.connect(self.analyse)
        predicButton = QPushButton('Predict Tide')
        predicButton.clicked.connect(self.predict)

        self.saveCheckBox = QCheckBox('Save Prediction')
        self.saveCheckBox.setChecked(True)
        self.saveCheckBox.toggled.connect(self.checkBox)
        self.saveState = QLabel(self.saveCheckBox.text())

        self.plotCheckBox = QCheckBox('Plot Prediction')
        self.plotCheckBox.setChecked(True)
        self.plotCheckBox.toggled.connect(self.checkBox)
        self.plotState = QLabel(self.plotCheckBox.text())

        howToButton = QPushButton('How To Use')
        howToButton.clicked.connect(self.howToDialog)
        aboutButton = QPushButton('About')
        aboutButton.clicked.connect(self.aboutDialog)

        grid = QGridLayout()
        vbox = QVBoxLayout()

        grid.addWidget(loadFilesButton, 1, 1, 1, 2)
        grid.addWidget(mergeButton, 1, 3, 1, 2)

        grid.addWidget(dayFirstLabel, 2, 1, 1, 1)
        grid.addWidget(self.dayFirstCB, 2, 2, 1, 1)
        grid.addWidget(plotObsButton, 2, 3, 1, 2)

        grid.addWidget(timeHeaderLabel, 3, 1, 1, 1)
        grid.addWidget(self.timeHeaderCB, 3, 2, 1, 1)
        grid.addWidget(depthHeaderLabel, 3, 3, 1, 1)
        grid.addWidget(self.depthHeaderCB, 3, 4, 1, 1)

        grid.addWidget(self.table, 4, 1, 5, 4)

        grid.addWidget(self.methodLabel, 9, 1, 1, 2)
        grid.addWidget(tideAnalysisLabel, 9, 3, 1, 2)

        grid.addWidget(self.ttideButton, 10, 1, 1, 2)
        grid.addWidget(self.utideButton, 10, 3, 1, 2)

        grid.addWidget(latLabel, 11, 1, 1, 1)
        grid.addWidget(self.latDSB, 11, 2, 1, 1)
        grid.addWidget(saveLocButton, 11, 3, 1, 1)
        grid.addWidget(self.saveLocLineForm, 11, 4, 1, 1)

        grid.addWidget(startcalLabel, 12, 1, 1, 2)
        grid.addWidget(endcalLabel, 12, 3, 1, 2)

        grid.addWidget(self.startcal, 13, 1, 1, 2)
        grid.addWidget(self.endcal, 13, 3, 1, 2)

        grid.addWidget(freqLabel, 14, 1, 1, 1)
        grid.addWidget(self.freqSB, 14, 2, 1, 2)
        grid.addWidget(self.freqUnitCB, 14, 4, 1, 1)

        grid.addWidget(self.saveCheckBox, 15, 2, 1, 1)
        grid.addWidget(self.plotCheckBox, 15, 3, 1, 1)
        grid.addWidget(solveButton, 15, 1, 1, 1)
        grid.addWidget(predicButton, 15, 4, 1, 1)

        vbox.addStretch(1)
        grid.addLayout(vbox, 20, 1)
        grid.addWidget(howToButton, 21, 1, 1, 2)
        grid.addWidget(aboutButton, 21, 3, 1, 2)
        self.setLayout(grid)

    def loadDataDialog(self):
        '''Load Data Widget UI'''

        loadData = QDialog()
        loadData.setWindowTitle('Load Data')
        loadData.setWindowIcon(
            QIcon(resource_path('icons/load-pngrepo-com.png')))

        openFilesButton = QPushButton('Open File(s)')
        openFilesButton.clicked.connect(self.filesDialog)
        openFolderButton = QPushButton('Open Folder')
        openFolderButton.clicked.connect(self.folderDialog)

        sepLabel = QLabel('Separator:')
        self.sepCB = QComboBox()
        self.sepCB.addItems(['Tab', 'Comma', 'Space', 'Semicolon'])

        textTypeLabel = QLabel('Text Type')
        self.textTypeCB = QComboBox()
        self.textTypeCB.addItems(['.txt', '.csv', '.dat'])

        headerLineLabel = QLabel('Header Starting Line:')
        self.headerLineSB = QSpinBox()
        self.headerLineSB.setMinimum(1)

        dataLineLabel = QLabel('Data Starting Line:')
        self.dataLineSB = QSpinBox()
        self.dataLineSB.setMinimum(1)

        locLabel = QLabel('Location:')
        self.locList = QTextBrowser()

        self.showCheckBox = QCheckBox('Show All Data to Table')
        self.showCheckBox.setChecked(False)
        self.showCheckBox.toggled.connect(self.showCheckBoxState)
        self.showState = QLabel()

        cancelButton = QPushButton('Cancel')
        cancelButton.clicked.connect(loadData.close)
        loadButton = QPushButton('Load')
        loadButton.clicked.connect(self.loadAction)
        loadButton.clicked.connect(loadData.close)

        grid = QGridLayout()
        grid.addWidget(openFilesButton, 1, 1, 1, 2)
        grid.addWidget(openFolderButton, 1, 3, 1, 2)

        grid.addWidget(sepLabel, 2, 1, 1, 1)
        grid.addWidget(self.sepCB, 2, 2, 1, 1)
        grid.addWidget(textTypeLabel, 2, 3, 1, 1)
        grid.addWidget(self.textTypeCB, 2, 4, 1, 1)

        grid.addWidget(headerLineLabel, 3, 1, 1, 1)
        grid.addWidget(self.headerLineSB, 3, 2, 1, 1)
        grid.addWidget(dataLineLabel, 3, 3, 1, 1)
        grid.addWidget(self.dataLineSB, 3, 4, 1, 1)

        grid.addWidget(locLabel, 4, 1, 1, 1)

        grid.addWidget(self.locList, 5, 1, 10, 4)

        grid.addWidget(self.showCheckBox, 15, 1, 1, 2)
        grid.addWidget(loadButton, 15, 3, 1, 1)
        grid.addWidget(cancelButton, 15, 4, 1, 1)

        loadData.setLayout(grid)

        loadData.exec_()

    def showCheckBoxState(self):

        if self.showCheckBox.isChecked() == True:
            self.showState.setText(self.showCheckBox.text())
        else:
            self.showState.setText('unchecked')

    def filesDialog(self):
        '''Load from files Dialog'''

        home_dir = str(Path.home())
        fileFilter = 'All Files (*.*) ;; Text Files (*.txt) ;; Comma Separated Value (*.csv) ;; DAT Files (*.dat)'
        selectedFilter = 'Text Files (*.txt)'
        fname = QFileDialog.getOpenFileNames(self, 'Open File(s)', home_dir,
                                             fileFilter, selectedFilter)

        global filesList
        filesList = fname[0]

        fileListPrint = ''

        for file in filesList:
            fileListPrint += file + '\n'

        self.locList.setText(fileListPrint)

    def folderDialog(self):
        '''Load from folder Dialog'''

        home_dir = str(Path.home())
        fname = QFileDialog.getExistingDirectory(self, 'Open Folder', home_dir)

        textTypeDict = {
            '.txt': '.[Tt][Xx][Tt]',
            '.csv': '.[Cc][Ss][Vv]',
            '.dat': '.[Dd][Aa][Tt]'
        }
        textTypeSelect = textTypeDict[self.textTypeCB.currentText()]

        pathName = fname + '/**/*' + textTypeSelect

        global filesList
        filesList = glob.glob(pathName, recursive=True)

        fileListPrint = ''

        for file in filesList:
            fileListPrint += file + '\n'

        self.locList.setText(fileListPrint)

    def loadDataDict(self):
        '''Raw data merger'''

        head = self.headerLineSB.value() - 1
        start_data = self.dataLineSB.value() - 1
        sepDict = {'Tab': '\t', 'Comma': ',', 'Space': ' ', 'Semicolon': ';'}
        sepSelect = sepDict[self.sepCB.currentText()]

        dummy = []

        for file in filesList:
            raw_single = pd.read_csv(file, sep=sepSelect, header=head)
            raw_single = raw_single.iloc[start_data:, 0:]

            dummy.append(raw_single)

        global raw
        raw = pd.concat(dummy, ignore_index=True, sort=False)

        return raw

    def loadAction(self):
        '''Data loader into Main Widget table'''

        raw = self.loadDataDict()

        if self.showState.text() == 'Show All Data to Table':
            data = raw
        else:
            data = raw.head(100)

        self.timeHeaderCB.clear()
        self.timeHeaderCB.addItems(data.columns)
        self.depthHeaderCB.clear()
        self.depthHeaderCB.addItems(data.columns)

        self.table.setColumnCount(len(data.columns))
        self.table.setRowCount(len(data.index))

        for h in range(len(data.columns)):
            self.table.setHorizontalHeaderItem(
                h, QTableWidgetItem(data.columns[h]))

        for i in range(len(data.index)):
            for j in range(len(data.columns)):
                self.table.setItem(i, j, QTableWidgetItem(str(data.iloc[i,
                                                                        j])))

        self.table.resizeRowsToContents()
        self.table.resizeColumnsToContents()

    def savePathDialog(self):
        '''Save file dialog'''

        home_dir = str(Path.home())
        fname = QFileDialog.getSaveFileName(self, 'Save File', home_dir,
                                            'Text files (*.txt)')
        filePath = (str(Path(fname[0])))
        self.saveLocLineForm.setText(filePath)

    def str2bool(self, v):
        '''Transform string to boolean'''

        return v in ('True')

    def inputDict1(self):
        '''
        Dictionary 1 containing pre-processed time and depth values and time interval between records.
        Processing initial input value from Main Widget 
        '''

        data = raw.copy()

        time = self.timeHeaderCB.currentText()
        depth = self.depthHeaderCB.currentText()
        dayF = self.str2bool(self.dayFirstCB.currentText())

        data[time] = pd.to_datetime(data[time], dayfirst=dayF)
        data.index = data[time]
        data = data.sort_index()

        time_array = data.index

        start_time = time_array[:-1]
        end_time = time_array[1:]
        time_diff_array = end_time - start_time

        time_diff = mode(time_diff_array)
        time_diff_float = np.timedelta64(time_diff, 'm').astype('float64')

        time_gap_div = np.where((time_diff_array > time_diff)
                                & (time_diff_array % time_diff /
                                   time_diff == 0))
        time_gap_undiv = np.where((time_diff_array > time_diff) & (
            time_diff_array % time_diff / time_diff != 0))

        start_gap_div = start_time[time_gap_div] + time_diff
        end_gap_div = end_time[time_gap_div] - time_diff

        start_gap_undiv = start_time[time_gap_undiv] + time_diff
        end_gap_undiv = end_time[time_gap_undiv]

        data_dummy = []

        for i in range(len(start_gap_div)):
            if time_gap_div == []:
                pass
            else:
                time_add = pd.date_range(start=start_gap_div[i],
                                         end=end_gap_div[i],
                                         freq=time_diff)

                nan_add = pd.DataFrame({
                    time:
                    time_add,
                    depth:
                    pd.Series(np.nan, index=list(range(len(time_add))))
                })
                nan_add.index = nan_add[time]
                nan_add = nan_add.iloc[:, 1:]
                data_dummy.append(nan_add)

        for i in range(len(start_gap_undiv)):
            if time_gap_undiv == []:
                pass
            else:
                time_add = pd.date_range(start=start_gap_undiv[i],
                                         end=end_gap_undiv[i],
                                         freq=time_diff)

                nan_add = pd.DataFrame({
                    time:
                    time_add,
                    depth:
                    pd.Series(np.nan, index=list(range(len(time_add))))
                })
                nan_add.index = nan_add[time]
                nan_add = nan_add.iloc[:, 1:]
                data_dummy.append(nan_add)

        data_add = pd.concat(data_dummy, sort=True)
        filled = pd.concat([data, data_add], sort=True)
        filled = filled.sort_index()
        time_array2 = filled.index
        depth_array2 = filled[depth].values

        input_dict = {
            'depth': depth_array2,
            'time': time_array2,
            'interval': time_diff_float
        }

        return input_dict

    def inputDict2(self):
        '''
        Dictionary 2 containing pre-processed analysis inputs 
        (i.e latitude, predicted time, and save file location)
        '''

        startcal_string = self.startcal.selectedDate().toString(Qt.ISODate)
        endcal_string = self.endcal.selectedDate().toString(Qt.ISODate)

        freq_unit_dict = {'hours': 'H', 'minutes': 'min'}
        freq_unit_value = freq_unit_dict[self.freqUnitCB.currentText()]

        if self.latDSB.value() == 0.0 or self.freqSB.value() == 0:
            self.zeroWarning()
            lat = None
        else:
            lat = self.latDSB.value()
            frequency = str(self.freqSB.value()) + freq_unit_value

        time_predic = pd.date_range(start=startcal_string,
                                    end=endcal_string,
                                    freq=frequency)

        save_file = self.saveLocLineForm.text()

        input_dict = {
            'latitude': lat,
            'predicted time': time_predic,
            'save': save_file
        }

        return input_dict

    def plotLoad(self):
        '''Observation data plotter'''

        input_dict = self.inputDict1()

        ad = input_dict['depth']
        at = input_dict['time']

        plt.figure(figsize=(10, 5))
        plt.plot(at, ad, label='Tide Observation Data')
        plt.xlabel('Time')
        plt.ylabel('Water Level')
        plt.legend(loc='best')
        plt.show()

    def plotPredic(self, water_level, msl):
        '''Predicted data plotter'''

        input_dict2 = self.inputDict2()

        ad = water_level
        at = input_dict2['predicted time']
        data_label = 'Predicted Data using ' + self.methodLabel.text()

        plt.figure(figsize=(10, 5))
        plt.plot(at, ad, label=data_label)
        plt.axhline(msl, color='r', label='MSL = ' + str(msl))
        plt.xlabel('Time')
        plt.ylabel('Water Level')
        plt.legend(loc='best')
        plt.show()

    def methodButton(self):

        method_button = self.sender()
        if method_button.isChecked():
            self.methodLabel.setText(method_button.text())

    def checkBox(self):

        if self.saveCheckBox.isChecked() == True:
            self.saveState.setText(self.saveCheckBox.text())
        else:
            self.saveState.setText('unchecked')

        if self.plotCheckBox.isChecked() == True:
            self.plotState.setText(self.plotCheckBox.text())
        else:
            self.plotState.setText('unchecked')

    def analyse(self):
        '''Analysis processing and reporting correspond to selected method'''

        input_dict2 = self.inputDict2()
        save_file = input_dict2['save']

        method_dict = {
            'T Tide': self.ttideAnalyse,
            'U Tide': self.utideAnalyse
        }
        method = self.methodLabel.text()
        coef = method_dict[method]()

        method = method.replace(' ', '-')
        # text_edit = '_' + method + '_report.txt'
        # save_file = save_file.replace('.txt', text_edit)

        if method == 'T-Tide':
            print_coef = t_utils.pandas_style(coef)
            report = open(save_file, 'w')
            report.write(print_coef)
        elif method == 'U-Tide':
            print_coef = pd.DataFrame({
                'name': coef.name,
                'frq': coef.aux.frq,
                'lind': coef.aux.lind,
                'A': coef.A,
                'g': coef.g,
                'A_ci': coef.A_ci,
                'g_ci': coef.g_ci,
                'PE': coef.diagn['PE'],
                'SNR': coef.diagn['SNR']
            })
            print_coef.index = print_coef['name']
            print_coef = print_coef.iloc[:, 1:]
            print_coef.to_csv(save_file, sep='\t')

    def predict(self):
        '''Prediction (analysis included) processing correspond to selected method'''

        input_dict2 = self.inputDict2()
        save_file = input_dict2['save']

        method_dict = {
            'T Tide': self.ttidePredict,
            'U Tide': self.utidePredict
        }
        method = self.methodLabel.text()
        prediction = method_dict[method]()

        time = input_dict2['predicted time']

        if method == 'T Tide':
            water_level = prediction['prediction']
        elif method == 'U Tide':
            p_dict = prediction['prediction']
            water_level = p_dict['h']

        predic_out = pd.DataFrame({'Time': time, 'Depth': water_level})

        if self.saveState.text() == 'Save Prediction':
            # method = method.replace(' ', '-')
            # text_edit = '_' + method + '.txt'
            # save_file = save_file.replace('.txt', text_edit)

            predic_out.to_csv(save_file, sep='\t', index=False)
        else:
            pass

        if self.plotState.text() == 'Plot Prediction':
            self.plotPredic(water_level, prediction['MSL'])
        else:
            pass

        if self.saveState.text() == 'unchecked' and self.plotState.text(
        ) == 'unchecked':
            self.showPredicDialog(predic_out)

    def ttideAnalyse(self):
        '''T Tide Analysis processing'''

        input_dict1 = self.inputDict1()
        input_dict2 = self.inputDict2()
        ad = input_dict1['depth']
        at = input_dict1['time']
        latitude = input_dict2['latitude']
        time_diff = input_dict1['interval'] / 60
        time_num = date2num(at.to_pydatetime())

        coef = t_tide(ad,
                      dt=time_diff,
                      stime=time_num[0],
                      lat=latitude,
                      synth=0)

        return coef

    def ttidePredict(self):
        '''T Tide Prediction processing'''

        input_dict2 = self.inputDict2()

        time_predic = input_dict2['predicted time']
        time_predic_num = date2num(time_predic.to_pydatetime())

        coef = self.ttideAnalyse()
        msl = coef['z0']
        predic = coef(time_predic_num) + msl

        return {'prediction': predic, 'MSL': msl}

    def utideAnalyse(self):
        '''U Tide Analysis processing'''

        input_dict1 = self.inputDict1()
        input_dict2 = self.inputDict2()
        ad = input_dict1['depth']
        at = input_dict1['time']

        time_num = date2num(at.to_pydatetime())
        latitude = input_dict2['latitude']

        coef = solve(time_num, ad, lat=latitude, trend=False, method='robust')

        return coef

    def utidePredict(self):
        '''U Tide Prediction processing'''

        input_dict2 = self.inputDict2()

        time_predic = input_dict2['predicted time']
        time_predic_num = date2num(time_predic.to_pydatetime())

        coef = self.utideAnalyse()
        msl = coef.mean
        predic = reconstruct(time_predic_num, coef, min_SNR=0)

        return {'prediction': predic, 'MSL': msl}

    def zeroWarning(self):

        zeroWarning = QMessageBox()
        zeroWarning.setWindowTitle('Warning')
        zeroWarning.setIcon(QMessageBox.Critical)
        zeroWarning.setText('Cannot process zero value.')

        zeroWarning.exec_()

    def showPredicDialog(self, data):
        '''Showing prediction data in a form of table'''

        showPredic = QDialog()
        showPredic.setWindowTitle('Tide Prediction')
        showPredic.setWindowIcon(
            QIcon(resource_path('icons/wave-pngrepo-com.png')))
        showPredic.resize(320, 720)
        closeButton = QPushButton('Close')
        closeButton.clicked.connect(showPredic.close)

        table = QTableWidget()
        header = table.horizontalHeader()
        scroll = QScrollArea()
        grid = QGridLayout()
        scroll.setWidget(table)
        grid.addWidget(table, 1, 1, 25, 4)
        grid.addWidget(closeButton, 26, 4, 1, 1)
        showPredic.setLayout(grid)

        table.setColumnCount(len(data.columns))
        table.setRowCount(len(data.index))

        for h in range(len(data.columns)):
            table.setHorizontalHeaderItem(h, QTableWidgetItem(data.columns[h]))

        for i in range(len(data.index)):
            for j in range(len(data.columns)):
                table.setItem(i, j, QTableWidgetItem(str(data.iloc[i, j])))

        header.setSectionResizeMode(0, QHeaderView.ResizeToContents)
        header.setSectionResizeMode(1, QHeaderView.Stretch)
        showPredic.exec_()

    def howToDialog(self):
        '''How to use the GUI'''

        howTo = QDialog()
        howTo.setWindowTitle('How to Use')
        howTo.setWindowIcon(
            QIcon(resource_path('icons/question-pngrepo-com.png')))
        closeButton = QPushButton('Close')
        closeButton.clicked.connect(howTo.close)

        how_to_use = open('how_to_use.txt', 'r')
        howToLabel = QLabel(
            'The details of how to use this tide analysis GUI is as follows:')
        howToTextBrowser = QTextBrowser()
        howToTextBrowser.setText(how_to_use.read())

        grid = QGridLayout()
        grid.addWidget(howToLabel, 1, 1, 1, 4)
        grid.addWidget(howToTextBrowser, 2, 1, 50, 4)
        grid.addWidget(closeButton, 52, 4, 1, 1)
        howTo.setLayout(grid)

        howTo.exec_()

    def aboutDialog(self):
        '''About the GUI'''

        about = QDialog()
        about.setWindowTitle('About')
        about.setWindowIcon(
            QIcon(resource_path('icons/information-pngrepo-com.png')))
        closeButton = QPushButton('Close')
        closeButton.clicked.connect(about.close)

        aboutText = '''<body>
        This is a tidal analysis GUI using T Tide and U Tide (both Python version).
        <br><\br><br><\br>
        The GUI itself was developed by 
        <a href=\'https://github.com/rifqiharrys/tide_pyqt5'>Rifqi Muhammad Harrys</a> 
        using PyQt5, a python GUI library.
        <br><\br><br><\br>
        Both T Tide and U Tide developed by two different entities.
        <br><\br>
        The original versions of <a href=\'https://www.eoas.ubc.ca/~rich/#T_Tide'>T Tide</a> and 
        <a href=\'https://www.mathworks.com/matlabcentral/fileexchange/46523-utide-unified-tidal-analysis-and-prediction-functions?w.mathworks.com'>U Tide</a> 
        are in MATLAB language developed by R. Pawlowicz et. al (T Tide) and Daniel Codiga (U Tide).<br><\br><br><\br>
        The python version of <a href=\'https://github.com/moflaher/ttide_py'>T Tide</a> and 
        <a href=\'https://github.com/wesleybowman/UTide'>U Tide</a> were developed by moflaher (T Tide) and Wesley Bowman (U Tide).
        <br><\br><br><\br>
        A description of the theoretical basis of the analysis and some implementation details 
        of T Tide and U Tide Matlab version can be found in:
        </body>'''

        tideCite = '''
        <cite>R. Pawlowicz, B. Beardsley, and S. Lentz, 
        "Classical tidal harmonic analysis including error estimates in MATLAB using 
        T_TIDE", Computers and Geosciences 28 (2002), 929-937.</cite>
        <br><\br><br><\br>
        <cite>Codiga, D.L., 2011. Unified Tidal Analysis and Prediction Using the 
        UTide Matlab Functions. Technical Report 2011-01. Graduate School of Oceanography, 
        University of Rhode Island, Narragansett, RI. 59pp.</cite>
        '''

        aboutLabel1 = QLabel(aboutText)
        aboutLabel1.setWordWrap(True)
        aboutLabel1.setOpenExternalLinks(True)
        aboutLabel2 = QLabel(tideCite)
        aboutLabel2.setTextInteractionFlags(Qt.TextSelectableByMouse)
        aboutLabel2.setWordWrap(True)
        aboutTB = QTextBrowser()
        aboutTB.setText(tideCite)
        grid = QGridLayout()
        grid.addWidget(aboutLabel1, 1, 1, 1, 4)
        grid.addWidget(aboutTB, 2, 1, 1, 4)
        grid.addWidget(closeButton, 3, 4, 1, 1)

        about.setLayout(grid)

        about.exec_()
Ejemplo n.º 47
0
class WorkWidget(QWidget):

    work_started = pyqtSignal()
    work_ended = pyqtSignal()

    def __init__(self, work="", title_style=Style.h2()):
        QWidget.__init__(self)
        self.ctrl = QApplication.instance().ctrl
        self.ctrl.switch_language.connect(self.on_switch_language)
        self.ctrl.switch_configuration.connect(self.on_switch_configuration)
        self.paras = self.ctrl.paras
        self.conf = GuiConf()
        # work should be a verb: Execute, Transport ...
        self.work = work
        self.title_style = title_style
        self.setWindowTitle(_(self.work))
        self.executor_thread = None
        self.splitter_event_moved = False
        self.splitter_title_moved = False
        self.init_ui()
        self.show()

    def init_ui(self):
        vbox = QVBoxLayout()

        self.label_title = QLabel("%s %s" % (_(self.work), self.paras.configuration_name()))
        font = QFont()
        font.setPointSize(18)
        font.setBold(True)
        self.label_title.setFont(font)
        self.label_title.setContentsMargins(10, 5, 5, 7)
        self.label_title.setStyleSheet(self.title_style)
        hbox1 = QHBoxLayout()
        hbox1.addWidget(self.label_title, 1)
        vbox.addLayout(hbox1)

        self.splitter_title = QSplitter(Qt.Vertical)
        self.splitter_event = QSplitter(Qt.Vertical)
        self.splitter_title.splitterMoved.connect(self.on_splitter_title_moved)
        self.splitter_event.splitterMoved.connect(self.on_splitter_event_moved)

        self.lbl_events_title1 = QLabel(_("Main events"))
        self.splitter_title.addWidget(self.lbl_events_title1)

        self.lbl_events_title2 = QLabel(_("Resources"))
        self.splitter_title.addWidget(self.lbl_events_title2)

        self.lbl_events_title3 = QLabel(_("Errors"))
        self.splitter_title.addWidget(self.lbl_events_title3)

        self.pte_events1 = QTextBrowser()
        self.pte_events1.setOpenExternalLinks(True)
        self.pte_events1.setOpenLinks(False)
        self.pte_events1.anchorClicked.connect(self.on_anchor_clicked)
        self.pte_events1.setLineWrapMode(QTextEdit.NoWrap)
        self.splitter_event.addWidget(self.pte_events1)

        self.pte_events2 = QTextBrowser()
        self.pte_events2.setOpenExternalLinks(True)
        self.pte_events2.setOpenLinks(False)
        self.pte_events2.anchorClicked.connect(self.on_anchor_clicked)
        self.pte_events2.setLineWrapMode(QTextEdit.NoWrap)
        self.splitter_event.addWidget(self.pte_events2)

        self.pte_events3 = QPlainTextEdit()
        self.pte_events3.setReadOnly(True)
        self.pte_events3.setLineWrapMode(QPlainTextEdit.NoWrap)
        self.pte_events3.setStyleSheet(Style.red_text())
        self.pte_events3.setCenterOnScroll(True)
        self.splitter_event.addWidget(self.pte_events3)

        self.splitter_title.setStretchFactor(0, 5)
        self.splitter_title.setStretchFactor(1, 3)
        self.splitter_title.setStretchFactor(2, 1)
        self.splitter_event.setStretchFactor(0, 5)
        self.splitter_event.setStretchFactor(1, 3)
        self.splitter_event.setStretchFactor(2, 1)
        hbox_splitters = QHBoxLayout()
        hbox_splitters.addWidget(self.splitter_title, 0)
        hbox_splitters.addWidget(self.splitter_event, 5)
        vbox.addLayout(hbox_splitters)

        lbl_box = QHBoxLayout()
        self.lbl_processing = QLabel(_("Processing:"))
        self.lbl_processing_file = QLabel("")
        font = QFontDatabase.systemFont(QFontDatabase.FixedFont)
        self.lbl_processing_file.setFont(font)
        self.lbl_processing.setFont(font)
        self.lbl_processing.setVisible(False)
        self.lbl_processing_file.setVisible(False)
        lbl_box.addWidget(self.lbl_processing)
        lbl_box.addWidget(self.lbl_processing_file)
        lbl_box.addStretch(1)
        vbox.addLayout(lbl_box)

        btn_box = QHBoxLayout()
        btn_box.addStretch(1)
        self.chk_trial_run = QCheckBox(_("Trial run"))
        self.chk_trial_run.setChecked(not self.paras.is_saving_sitemaps)
        btn_box.addWidget(self.chk_trial_run)
        self.btn_run = QPushButton(_("Run"))
        self.btn_run.clicked.connect(self.on_btn_run_clicked)
        btn_box.addWidget(self.btn_run)
        self.btn_stop = QPushButton(_("Stop"))
        self.btn_stop.clicked.connect(self.on_btn_stop_clicked)
        self.normal_style = self.btn_stop.styleSheet()
        self.btn_stop.setEnabled(False)
        btn_box.addWidget(self.btn_stop)
        self.btn_close = QPushButton(_("Close"))
        self.btn_close.clicked.connect(self.on_btn_close_clicked)
        btn_box.addWidget(self.btn_close)
        vbox.addLayout(btn_box)

        self.setLayout(vbox)
        self.resize(self.conf.work_widget_width(self.work), self.conf.work_widget_height(self.work))

    def on_splitter_title_moved(self, pos, index):
        self.splitter_title_moved = True
        if not self.splitter_event_moved:
            self.splitter_event.moveSplitter(pos, index)
        self.splitter_title_moved = False

    def on_splitter_event_moved(self, pos, index):
        self.splitter_event_moved = True
        if not self.splitter_title_moved:
            self.splitter_title.moveSplitter(pos, index)
        self.splitter_event_moved = False

    def on_switch_language(self):
        self.setWindowTitle(_(self.work))
        self.label_title.setText("%s %s" % (_(self.work), self.paras.configuration_name()))
        self.lbl_events_title1.setText(_("Main events"))
        self.lbl_events_title2.setText(_("Resources"))
        self.lbl_events_title3.setText(_("Errors"))
        self.lbl_processing.setText(_("Processing:"))
        self.chk_trial_run.setText(_("Trial run"))
        self.btn_run.setText(_("Run"))
        self.btn_stop.setText(_("Stop"))
        self.btn_close.setText(_("Close"))

    def on_switch_configuration(self, name=None):
        LOG.debug("Switch configuration: %s" % name)
        self.paras = self.ctrl.paras
        self.label_title.setText("%s %s" % (_(self.work), self.paras.configuration_name()))

    def on_anchor_clicked(self, url):
        QDesktopServices.openUrl(QUrl(url))

    def on_btn_run_clicked(self):
        self.work_started.emit()
        self.pte_events1.setPlainText("")
        self.pte_events2.setPlainText("")
        self.pte_events3.setPlainText("")
        self.lbl_processing.setVisible(True)
        self.lbl_processing_file.setVisible(True)

        self.btn_close.setEnabled(False)
        self.btn_run.setEnabled(False)
        self.chk_trial_run.setEnabled(False)
        self.btn_stop.setEnabled(True)
        self.btn_stop.setStyleSheet(Style.alarm())

    def on_btn_stop_clicked(self):
        self.btn_stop.setStyleSheet(self.normal_style)
        self.btn_stop.setEnabled(False)
        self.on_signal_main_event(_("Interrupt requested..."))
        if self.executor_thread:
            self.executor_thread.requestInterruption()

    def on_signal_exception(self, msg):
        self.pte_events3.appendHtml(msg)
        self.update()

    def on_ask_confirmation(self, text, i_text, answer):
        msg_box = QMessageBox()
        msg_box.setWindowTitle(_("MPT"))
        msg_box.setText(text)
        i_text += "\n\n"
        i_text += _("Ok to proceed?")
        msg_box.setInformativeText(i_text)
        msg_box.setIcon(QMessageBox.Question)
        msg_box.setStandardButtons(QMessageBox.No | QMessageBox.Yes)
        msg_box.setDefaultButton(QMessageBox.Yes)
        exe = msg_box.exec()
        if exe == QMessageBox.No:
            answer.answer = False
        else:
            answer.answer = True
        answer.answered = True

    def on_signal_main_event(self, msg):
        self.pte_events1.append(msg)
        self.update()

    def on_signal_minor_event(self, msg):
        self.pte_events2.append(msg)
        self.update()

    def on_signal_next_file(self, filename):
        lfn = len(filename)
        ww = (self.width() - 150)/7
        www = int(ww/2)
        if lfn > ww:
            filename = filename[:www] + "..." + filename[lfn - www:]
        self.lbl_processing_file.setText(filename)
        self.update()

    def on_signal_end_processing(self, paras):
        self.ctrl.update_configuration(paras)

    def on_executor_thread_finished(self):
        self.btn_stop.setStyleSheet(self.normal_style)
        self.btn_stop.setEnabled(False)
        self.btn_close.setEnabled(True)
        self.btn_run.setEnabled(True)
        self.chk_trial_run.setEnabled(True)
        self.lbl_processing.setVisible(False)
        self.lbl_processing_file.setVisible(False)
        self.update()
        self.work_ended.emit()

    def on_btn_close_clicked(self):
        if self.windowState() & Qt.WindowFullScreen:
            self.setWindowState(Qt.WindowMaximized)
        else:
            self.close()
            self.destroy()

    def closeEvent(self, event):
        LOG.debug("Closing event on work window %s" % self.work)
        if self.executor_thread:
            self.executor_thread.requestInterruption()
        if self.windowState() & Qt.WindowFullScreen:
            self.setWindowState(Qt.WindowMaximized)
            event.ignore()
        else:
            self.save_dimensions()
            self.exit_if_last()
            event.accept()

    def save_dimensions(self):
        LOG.debug("Saving dimensions for work-window %s" % self.work)
        self.conf.set_work_widget_width(self.work, self.width())
        self.conf.set_work_widget_height(self.work, self.height())
        self.conf.persist()

    def exit_if_last(self):
        count_windows = 0
        for window in QApplication.instance().topLevelWindows():
            if window.type() == 1 or window.type() == 15:
                count_windows += 1

        LOG.debug("Testing for last window. window_count=%d" % count_windows)
        if count_windows == 1:
            LOG.debug("Closing last window")
            QApplication.instance().quit()
Ejemplo n.º 48
0
    def __init__(self, app_handle = None):
        super().__init__()
        self.app_handle = app_handle
        if os.name == 'posix':
            pyecog_string = '🇵 🇾 🇪 🇨 🇴 🇬'
        else:
            pyecog_string = 'PyEcog'
        print('\n',pyecog_string,'\n')

        # Initialize Main Window geometry
        # self.title = "ℙ𝕪𝔼𝕔𝕠𝕘"
        self.title = pyecog_string
        (size, rect) = self.get_available_screen()
        icon_file = pkg_resources.resource_filename('pyecog2', 'icons/icon.png')
        print('ICON:', icon_file)
        self.setWindowIcon(QtGui.QIcon(icon_file))
        self.app_handle.setWindowIcon(QtGui.QIcon(icon_file))
        self.setWindowTitle(self.title)
        self.setGeometry(0, 0, size.width(), size.height())
        # self.setWindowFlags(QtCore.Qt.FramelessWindowHint) # fooling around
        # self.setWindowFlags(QtCore.Qt.CustomizeWindowHint| QtCore.Qt.Tool)
        # self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.main_model = MainModel()
        self.autosave_timer = QtCore.QTimer()
        self.live_recording_timer = QtCore.QTimer()

        # Populate Main window with widgets
        # self.createDockWidget()
        self.dock_list = {}
        self.paired_graphics_view = PairedGraphicsView(parent=self)

        self.tree_element = FileTreeElement(parent=self)
        self.main_model.sigProjectChanged.connect(lambda: self.tree_element.set_rootnode_from_project(self.main_model.project))
        self.dock_list['File Tree'] = QDockWidget("File Tree", self)
        self.dock_list['File Tree'].setWidget(self.tree_element.widget)
        self.dock_list['File Tree'].setFloating(False)
        self.dock_list['File Tree'].setObjectName("File Tree")
        self.dock_list['File Tree'].setAllowedAreas(Qt.RightDockWidgetArea | Qt.LeftDockWidgetArea | Qt.TopDockWidgetArea | Qt.BottomDockWidgetArea)
        self.dock_list['File Tree'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable)

        self.plot_controls = PlotControls(self.main_model)
        self.plot_controls.sigUpdateXrange_i.connect(self.paired_graphics_view.insetview_set_xrange)
        self.plot_controls.sigUpdateXrange_o.connect(self.paired_graphics_view.overview_set_xrange)
        self.plot_controls.sigUpdateFilter.connect(self.paired_graphics_view.updateFilterSettings)
        self.dock_list['Plot Controls'] = QDockWidget("Plot controls", self)
        self.dock_list['Plot Controls'].setWidget(self.plot_controls)
        self.dock_list['Plot Controls'].setFloating(False)
        self.dock_list['Plot Controls'].setObjectName("Plot Controls")
        self.dock_list['Plot Controls'].setAllowedAreas(
            Qt.RightDockWidgetArea | Qt.LeftDockWidgetArea | Qt.TopDockWidgetArea | Qt.BottomDockWidgetArea)
        self.dock_list['Plot Controls'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable)

        self.dock_list['Hints'] = QDockWidget("Hints", self)
        self.text_edit = QTextBrowser()
        hints_file = pkg_resources.resource_filename('pyecog2', 'HelperHints.md')
        # text = open('HelperHints.md').read()
        print('hints file:',hints_file)
        text = open(hints_file).read()
        text = text.replace('icons/banner_small.png',pkg_resources.resource_filename('pyecog2', 'icons/banner_small.png'))
        self.text_edit.setMarkdown(text)
        self.dock_list['Hints'].setWidget(self.text_edit)
        self.dock_list['Hints'].setObjectName("Hints")
        # self.dock_list['Hints'].setFloating(False)
        # self.dock_list['Hints'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable)

        self.annotation_table = AnnotationTableWidget(self.main_model.annotations,self) # passing self as parent in position 2
        self.dock_list['Annotations Table'] = QDockWidget("Annotations Table", self)
        self.dock_list['Annotations Table'].setWidget(self.annotation_table)
        self.dock_list['Annotations Table'].setObjectName("Annotations Table")
        self.dock_list['Annotations Table'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable)

        self.annotation_parameter_tree = AnnotationParameterTee(self.main_model.annotations)
        self.dock_list['Annotation Parameter Tree'] = QDockWidget("Annotation Parameter Tree", self)
        self.dock_list['Annotation Parameter Tree'].setWidget(self.annotation_parameter_tree)
        self.dock_list['Annotation Parameter Tree'].setObjectName("Annotation Parameter Tree")
        self.dock_list['Annotation Parameter Tree'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable)

        self.video_element = VideoWindow(project=self.main_model.project)
        self.dock_list['Video'] = QDockWidget("Video", self)
        self.dock_list['Video'].setWidget(self.video_element)
        self.dock_list['Video'].setObjectName("Video")
        # self.dock_list['Video'].setFloating(True)
        # self.dock_list['Video'].hide()
        self.video_element.mediaPlayer.setNotifyInterval(40) # 25 fps
        # Video units are in miliseconds, pyecog units are in seconds
        self.video_element.sigTimeChanged.connect(self.main_model.set_time_position)
        self.main_model.sigTimeChanged.connect(self.video_element.setGlobalPosition)

        self.dock_list['FFT'] = QDockWidget("FFT", self)
        self.dock_list['FFT'].setWidget(FFTwindow(self.main_model))
        self.dock_list['FFT'].setObjectName("FFT")
        # self.dock_list['FFT'].hide()

        self.dock_list['Wavelet'] = QDockWidget("Wavelet", self)
        self.dock_list['Wavelet'].setWidget(WaveletWindow(self.main_model))
        self.dock_list['Wavelet'].setObjectName("Wavelet")
        # self.dock_list['Wavelet'].hide()

        self.dock_list['Console'] = QDockWidget("Console", self)
        self.dock_list['Console'].setWidget(ConsoleWidget(namespace={'MainWindow':self}))
        self.dock_list['Console'].setObjectName("Console")
        self.dock_list['Console'].hide()

        self.build_menubar()

        self.setCentralWidget(self.paired_graphics_view.splitter)

        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['Console'])
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['File Tree'])
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['Hints'])
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['Plot Controls'])
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['Video'])
        self.addDockWidget(Qt.RightDockWidgetArea, self.dock_list['Annotation Parameter Tree'])
        self.addDockWidget(Qt.RightDockWidgetArea, self.dock_list['Annotations Table'])
        self.addDockWidget(Qt.RightDockWidgetArea, self.dock_list['FFT'])
        self.setCorner(Qt.BottomLeftCorner,Qt.LeftDockWidgetArea)
        self.setCorner(Qt.BottomRightCorner,Qt.RightDockWidgetArea)
        self.addDockWidget(Qt.BottomDockWidgetArea, self.dock_list['Wavelet'])
        # self.tabifyDockWidget(self.dock_list['Hints'], self.dock_list['File Tree'])
        self.resizeDocks([self.dock_list['File Tree'], self.dock_list['Hints'], self.dock_list['Plot Controls'],self.dock_list['Video']],[350,100,100,300],Qt.Vertical)
        self.resizeDocks([self.dock_list['Wavelet']],[400],Qt.Vertical)
        self.resizeDocks([self.dock_list['Video']],[400],Qt.Vertical)
        self.resizeDocks([self.dock_list['Video']],[400],Qt.Horizontal)
        self.resizeDocks([self.dock_list['FFT']],[400],Qt.Vertical)
        self.resizeDocks([self.dock_list['FFT']],[400],Qt.Horizontal)

        settings = QSettings("PyEcog","PyEcog")
        settings.beginGroup("StandardMainWindow")
        settings.setValue("windowGeometry", self.saveGeometry())
        settings.setValue("windowState", self.saveState())
        settings.setValue("darkMode", False)
        settings.setValue("autoSave", True)
        settings.endGroup()

        self.settings = QSettings("PyEcog", "PyEcog")
        print("reading configurations from: " + self.settings.fileName())
        self.settings.beginGroup("MainWindow")
        # print(self.settings.value("windowGeometry", type=QByteArray))
        self.restoreGeometry(self.settings.value("windowGeometry", type=QByteArray))
        self.restoreState(self.settings.value("windowState", type=QByteArray))

        self.action_darkmode.setChecked(self.settings.value("darkMode",type=bool))
        self.toggle_darkmode()  # pre toggle darkmode to make sure project loading dialogs are made with the correct color pallete
        try:
            settings = QSettings("PyEcog","PyEcog")
            settings.beginGroup("ProjectSettings")
            fname = settings.value("ProjectFileName")
            self.show()
            if fname.endswith('.pyecog'):
                print('Loading last opened Project:', fname)
                self.load_project(fname)
            else:
                print('Loading last opened directory:', fname)
                self.load_directory(fname)
        except Exception as e:
            print('ERROR in tree build')
            print(e)

        self.action_darkmode.setChecked(self.settings.value("darkMode",type=bool))
        self.toggle_darkmode() # toggle again darkmode just to make sure the wavelet window and FFT are updated as well
        self.action_autosave.setChecked(self.settings.value("autoSave",type=bool))
        self.toggle_auto_save()
Ejemplo n.º 49
0
class ChartDialog(QDialog):
    """The chart dialog"""

    def __init__(self, parent):
        if Figure is None:
            raise ModuleNotFoundError

        super().__init__(parent)

        self.actions = ChartDialogActions(self)

        self.chart_templates_toolbar = ChartTemplatesToolBar(self)

        self.setWindowTitle("Chart dialog")
        self.setModal(True)
        self.resize(800, 600)
        self.parent = parent

        self.actions = ChartDialogActions(self)

        self.dialog_ui()

    def on_template(self):
        """Event handler for pressing a template toolbar button"""

        chart_template_name = self.sender().data()
        chart_template_path = MPL_TEMPLATE_PATH / chart_template_name
        try:
            with open(chart_template_path) as template_file:
                chart_template_code = template_file.read()
        except OSError:
            return

        self.editor.insertPlainText(chart_template_code)

    def dialog_ui(self):
        """Sets up dialog UI"""

        msg = "Enter Python code into the editor to the left. Globals " + \
              "such as X, Y, Z, S are available as they are in the grid. " + \
              "The last line must result in a matplotlib figure.\n \n" + \
              "Pressing Apply displays the figure or an error message in " + \
              "the right area."

        self.message = QTextBrowser(self)
        self.message.setText(msg)
        self.editor = SpellTextEdit(self)
        self.splitter = QSplitter(self)

        buttonbox = self.create_buttonbox()

        self.splitter.addWidget(self.editor)
        self.splitter.addWidget(self.message)
        self.splitter.setOpaqueResize(False)
        self.splitter.setSizes([9999, 9999])

        # Layout
        layout = QVBoxLayout(self)
        layout.addWidget(self.chart_templates_toolbar)

        layout.addWidget(self.splitter)
        layout.addWidget(buttonbox)

        self.setLayout(layout)

    def apply(self):
        """Executes the code in the dialog and updates the canvas"""

        # Get current cell
        key = self.parent.grid.current
        code = self.editor.toPlainText()

        figure = self.parent.grid.model.code_array._eval_cell(key, code)

        if isinstance(figure, Figure):
            canvas = FigureCanvasQTAgg(figure)
            self.splitter.replaceWidget(1, canvas)
            canvas.draw()
        else:
            if isinstance(figure, Exception):
                self.message.setText("Error:\n{}".format(figure))
            else:
                msg_text = "Error:\n{} has type '{}', " + \
                           "which is no instance of {}."
                msg = msg_text.format(figure,
                                      type(figure).__name__,
                                      Figure)
                self.message.setText(msg)
            self.splitter.replaceWidget(1, self.message)

    def create_buttonbox(self):
        """Returns a QDialogButtonBox with Ok and Cancel"""

        button_box = QDialogButtonBox(QDialogButtonBox.Ok
                                      | QDialogButtonBox.Apply
                                      | QDialogButtonBox.Cancel)
        button_box.accepted.connect(self.accept)
        button_box.rejected.connect(self.reject)
        button_box.button(QDialogButtonBox.Apply).clicked.connect(self.apply)
        return button_box
Ejemplo n.º 50
0
    def create_base_ui(self):
        self.base_layout = QVBoxLayout(self)
        self.label_above_text_box = QLabel("Selected files:")
        self.big_text_box = QTextBrowser()
        self.select_file_label = QLabel("Choose filetype")
        self.rtf_button = QRadioButton(
            ".*rtf files", clicked=lambda: self._set_filetype("rtf"))
        self.rtf_button.setChecked(True)
        self.converter.set_filetype("rtf")
        self.txt_button = QRadioButton(
            ".*txt files", clicked=lambda: self._set_filetype("txt"))
        self.file_buttons = QButtonGroup()
        self.file_buttons.addButton(self.rtf_button)
        self.file_buttons.addButton(self.txt_button)

        self.my_button = QPushButton("Choose Files",
                                     clicked=lambda: self._select_files())

        self.engine_label = QLabel("Choose engine (only used for *.rtf files)")
        self.engine_buttons = QButtonGroup()
        self.word_button = QRadioButton(
            "Word", clicked=lambda: self._set_engine("word"))
        self.word_button.setChecked(True)
        self.open_office_button = QRadioButton(
            "Open Office", clicked=lambda: self._set_engine("of"))
        self.engine_buttons.addButton(self.word_button)
        self.engine_buttons.addButton(self.open_office_button)

        self.h_toc_orientation_button = QRadioButton(
            "Horizontal table of contents",
            clicked=lambda: self._set_toc_orientation("L"))
        self.v_toc_orientation_button = QRadioButton(
            "Vertical table of contents",
            clicked=lambda: self._set_toc_orientation("P"))

        self.toc_button = QCheckBox("Generate table of contents")
        self.toc_button.clicked.connect(
            self.v_toc_orientation_button.setChecked)
        self.compile_button = QPushButton("Compile from selected files",
                                          clicked=lambda: self._compile())

        self.save_location_button = QPushButton(
            "Select file save location",
            clicked=lambda: self._set_save_location())
        self.save_file_label = QLabel("Save location not yet selected")

        self.base_layout.addWidget(self.select_file_label)
        self.base_layout.addWidget(self.rtf_button)
        self.base_layout.addWidget(self.txt_button)
        self.base_layout.addWidget(self.my_button)
        self.base_layout.addWidget(self.engine_label)
        self.base_layout.addWidget(self.word_button)
        self.base_layout.addWidget(self.open_office_button)
        self.base_layout.addWidget(self.toc_button)
        self.base_layout.addWidget(self.toc_button)
        self.base_layout.addWidget(self.v_toc_orientation_button)
        self.base_layout.addWidget(self.h_toc_orientation_button)
        self.base_layout.addWidget(self.save_location_button)
        self.base_layout.addWidget(self.save_file_label)
        self.base_layout.addWidget(self.compile_button)
        self.base_layout.addWidget(self.label_above_text_box)
        self.base_layout.addWidget(self.big_text_box)
        self.progress_bar = QProgressBar(self)
        self.progress_bar.setValue(0)
        self.base_layout.addWidget(self.progress_bar)
        self.main_layout.addLayout(self.base_layout)
        self.show()
Ejemplo n.º 51
0
 def out_info(self):
     self.info = QTextBrowser(self)
     self.info.move(30,180)
     self.info.resize(290,150)
     
Ejemplo n.º 52
0
    def __init__(self, name, url, expected_filename):
        super(BrowserDownloadDialog, self).__init__()

        self.name = name
        self.url = url
        self.expected_filename = expected_filename
        self.downloaded_path = None

        layout = QGridLayout()

        info_label = QLabel()
        info_label.setText(
            _('This {name} cannot be directly downloaded by the '
              'launcher. You have to use your browser to download it.').format(
                  name=name))
        layout.addWidget(info_label, 0, 0, 1, 2)
        self.info_label = info_label

        step1_label = QLabel()
        step1_label.setText(_('1. Open the URL in your browser.'))
        layout.addWidget(step1_label, 1, 0, 1, 2)
        self.step1_label = step1_label

        url_tb = QTextBrowser()
        url_tb.setText(
            '<a href="{url}">{url}</a>'.format(url=html.escape(url)))
        url_tb.setReadOnly(True)
        url_tb.setOpenExternalLinks(True)
        url_tb.setMaximumHeight(23)
        url_tb.setLineWrapMode(QTextEdit.NoWrap)
        url_tb.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        layout.addWidget(url_tb, 2, 0, 1, 2)
        self.url_tb = url_tb

        step2_label = QLabel()
        step2_label.setText(
            _('2. Download the {name} on that page and wait '
              'for the download to complete.').format(name=name))
        layout.addWidget(step2_label, 3, 0, 1, 2)
        self.step2_label = step2_label

        step3_label = QLabel()
        step3_label.setText(_('3. Select the downloaded archive.'))
        layout.addWidget(step3_label, 4, 0, 1, 2)
        self.step3_label = step3_label

        path = get_downloads_directory()
        if expected_filename is not None:
            path = os.path.join(path, expected_filename)

        download_path_le = QLineEdit()
        download_path_le.setText(path)
        layout.addWidget(download_path_le, 5, 0)
        self.download_path_le = download_path_le

        download_path_button = QToolButton()
        download_path_button.setText('...')
        download_path_button.clicked.connect(self.set_download_path)
        layout.addWidget(download_path_button, 5, 1)
        self.download_path_button = download_path_button

        buttons_container = QWidget()
        buttons_layout = QHBoxLayout()
        buttons_layout.setContentsMargins(0, 0, 0, 0)
        buttons_container.setLayout(buttons_layout)

        install_button = QPushButton()
        install_button.setText(_('Install this {name}').format(name=name))
        install_button.clicked.connect(self.install_clicked)
        buttons_layout.addWidget(install_button)
        self.install_button = install_button

        do_not_install_button = QPushButton()
        do_not_install_button.setText(_('Do not install'))
        do_not_install_button.clicked.connect(self.do_not_install_clicked)
        buttons_layout.addWidget(do_not_install_button)
        self.do_not_install_button = do_not_install_button

        layout.addWidget(buttons_container, 6, 0, 1, 2, Qt.AlignRight)
        self.buttons_container = buttons_container
        self.buttons_layout = buttons_layout

        self.setLayout(layout)

        self.setWindowTitle(_('Browser download'))
Ejemplo n.º 53
0
class MainWindow(QMainWindow):
    '''
    basically handles the combination of the the tree menu bar and the paired view

    Most of the code here is for setting up the geometry of the gui and the
    menu bar stuff
    '''
    def __init__(self, app_handle = None):
        super().__init__()
        self.app_handle = app_handle
        if os.name == 'posix':
            pyecog_string = '🇵 🇾 🇪 🇨 🇴 🇬'
        else:
            pyecog_string = 'PyEcog'
        print('\n',pyecog_string,'\n')

        # Initialize Main Window geometry
        # self.title = "ℙ𝕪𝔼𝕔𝕠𝕘"
        self.title = pyecog_string
        (size, rect) = self.get_available_screen()
        icon_file = pkg_resources.resource_filename('pyecog2', 'icons/icon.png')
        print('ICON:', icon_file)
        self.setWindowIcon(QtGui.QIcon(icon_file))
        self.app_handle.setWindowIcon(QtGui.QIcon(icon_file))
        self.setWindowTitle(self.title)
        self.setGeometry(0, 0, size.width(), size.height())
        # self.setWindowFlags(QtCore.Qt.FramelessWindowHint) # fooling around
        # self.setWindowFlags(QtCore.Qt.CustomizeWindowHint| QtCore.Qt.Tool)
        # self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.main_model = MainModel()
        self.autosave_timer = QtCore.QTimer()
        self.live_recording_timer = QtCore.QTimer()

        # Populate Main window with widgets
        # self.createDockWidget()
        self.dock_list = {}
        self.paired_graphics_view = PairedGraphicsView(parent=self)

        self.tree_element = FileTreeElement(parent=self)
        self.main_model.sigProjectChanged.connect(lambda: self.tree_element.set_rootnode_from_project(self.main_model.project))
        self.dock_list['File Tree'] = QDockWidget("File Tree", self)
        self.dock_list['File Tree'].setWidget(self.tree_element.widget)
        self.dock_list['File Tree'].setFloating(False)
        self.dock_list['File Tree'].setObjectName("File Tree")
        self.dock_list['File Tree'].setAllowedAreas(Qt.RightDockWidgetArea | Qt.LeftDockWidgetArea | Qt.TopDockWidgetArea | Qt.BottomDockWidgetArea)
        self.dock_list['File Tree'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable)

        self.plot_controls = PlotControls(self.main_model)
        self.plot_controls.sigUpdateXrange_i.connect(self.paired_graphics_view.insetview_set_xrange)
        self.plot_controls.sigUpdateXrange_o.connect(self.paired_graphics_view.overview_set_xrange)
        self.plot_controls.sigUpdateFilter.connect(self.paired_graphics_view.updateFilterSettings)
        self.dock_list['Plot Controls'] = QDockWidget("Plot controls", self)
        self.dock_list['Plot Controls'].setWidget(self.plot_controls)
        self.dock_list['Plot Controls'].setFloating(False)
        self.dock_list['Plot Controls'].setObjectName("Plot Controls")
        self.dock_list['Plot Controls'].setAllowedAreas(
            Qt.RightDockWidgetArea | Qt.LeftDockWidgetArea | Qt.TopDockWidgetArea | Qt.BottomDockWidgetArea)
        self.dock_list['Plot Controls'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable)

        self.dock_list['Hints'] = QDockWidget("Hints", self)
        self.text_edit = QTextBrowser()
        hints_file = pkg_resources.resource_filename('pyecog2', 'HelperHints.md')
        # text = open('HelperHints.md').read()
        print('hints file:',hints_file)
        text = open(hints_file).read()
        text = text.replace('icons/banner_small.png',pkg_resources.resource_filename('pyecog2', 'icons/banner_small.png'))
        self.text_edit.setMarkdown(text)
        self.dock_list['Hints'].setWidget(self.text_edit)
        self.dock_list['Hints'].setObjectName("Hints")
        # self.dock_list['Hints'].setFloating(False)
        # self.dock_list['Hints'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable)

        self.annotation_table = AnnotationTableWidget(self.main_model.annotations,self) # passing self as parent in position 2
        self.dock_list['Annotations Table'] = QDockWidget("Annotations Table", self)
        self.dock_list['Annotations Table'].setWidget(self.annotation_table)
        self.dock_list['Annotations Table'].setObjectName("Annotations Table")
        self.dock_list['Annotations Table'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable)

        self.annotation_parameter_tree = AnnotationParameterTee(self.main_model.annotations)
        self.dock_list['Annotation Parameter Tree'] = QDockWidget("Annotation Parameter Tree", self)
        self.dock_list['Annotation Parameter Tree'].setWidget(self.annotation_parameter_tree)
        self.dock_list['Annotation Parameter Tree'].setObjectName("Annotation Parameter Tree")
        self.dock_list['Annotation Parameter Tree'].setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable)

        self.video_element = VideoWindow(project=self.main_model.project)
        self.dock_list['Video'] = QDockWidget("Video", self)
        self.dock_list['Video'].setWidget(self.video_element)
        self.dock_list['Video'].setObjectName("Video")
        # self.dock_list['Video'].setFloating(True)
        # self.dock_list['Video'].hide()
        self.video_element.mediaPlayer.setNotifyInterval(40) # 25 fps
        # Video units are in miliseconds, pyecog units are in seconds
        self.video_element.sigTimeChanged.connect(self.main_model.set_time_position)
        self.main_model.sigTimeChanged.connect(self.video_element.setGlobalPosition)

        self.dock_list['FFT'] = QDockWidget("FFT", self)
        self.dock_list['FFT'].setWidget(FFTwindow(self.main_model))
        self.dock_list['FFT'].setObjectName("FFT")
        # self.dock_list['FFT'].hide()

        self.dock_list['Wavelet'] = QDockWidget("Wavelet", self)
        self.dock_list['Wavelet'].setWidget(WaveletWindow(self.main_model))
        self.dock_list['Wavelet'].setObjectName("Wavelet")
        # self.dock_list['Wavelet'].hide()

        self.dock_list['Console'] = QDockWidget("Console", self)
        self.dock_list['Console'].setWidget(ConsoleWidget(namespace={'MainWindow':self}))
        self.dock_list['Console'].setObjectName("Console")
        self.dock_list['Console'].hide()

        self.build_menubar()

        self.setCentralWidget(self.paired_graphics_view.splitter)

        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['Console'])
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['File Tree'])
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['Hints'])
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['Plot Controls'])
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_list['Video'])
        self.addDockWidget(Qt.RightDockWidgetArea, self.dock_list['Annotation Parameter Tree'])
        self.addDockWidget(Qt.RightDockWidgetArea, self.dock_list['Annotations Table'])
        self.addDockWidget(Qt.RightDockWidgetArea, self.dock_list['FFT'])
        self.setCorner(Qt.BottomLeftCorner,Qt.LeftDockWidgetArea)
        self.setCorner(Qt.BottomRightCorner,Qt.RightDockWidgetArea)
        self.addDockWidget(Qt.BottomDockWidgetArea, self.dock_list['Wavelet'])
        # self.tabifyDockWidget(self.dock_list['Hints'], self.dock_list['File Tree'])
        self.resizeDocks([self.dock_list['File Tree'], self.dock_list['Hints'], self.dock_list['Plot Controls'],self.dock_list['Video']],[350,100,100,300],Qt.Vertical)
        self.resizeDocks([self.dock_list['Wavelet']],[400],Qt.Vertical)
        self.resizeDocks([self.dock_list['Video']],[400],Qt.Vertical)
        self.resizeDocks([self.dock_list['Video']],[400],Qt.Horizontal)
        self.resizeDocks([self.dock_list['FFT']],[400],Qt.Vertical)
        self.resizeDocks([self.dock_list['FFT']],[400],Qt.Horizontal)

        settings = QSettings("PyEcog","PyEcog")
        settings.beginGroup("StandardMainWindow")
        settings.setValue("windowGeometry", self.saveGeometry())
        settings.setValue("windowState", self.saveState())
        settings.setValue("darkMode", False)
        settings.setValue("autoSave", True)
        settings.endGroup()

        self.settings = QSettings("PyEcog", "PyEcog")
        print("reading configurations from: " + self.settings.fileName())
        self.settings.beginGroup("MainWindow")
        # print(self.settings.value("windowGeometry", type=QByteArray))
        self.restoreGeometry(self.settings.value("windowGeometry", type=QByteArray))
        self.restoreState(self.settings.value("windowState", type=QByteArray))

        self.action_darkmode.setChecked(self.settings.value("darkMode",type=bool))
        self.toggle_darkmode()  # pre toggle darkmode to make sure project loading dialogs are made with the correct color pallete
        try:
            settings = QSettings("PyEcog","PyEcog")
            settings.beginGroup("ProjectSettings")
            fname = settings.value("ProjectFileName")
            self.show()
            if fname.endswith('.pyecog'):
                print('Loading last opened Project:', fname)
                self.load_project(fname)
            else:
                print('Loading last opened directory:', fname)
                self.load_directory(fname)
        except Exception as e:
            print('ERROR in tree build')
            print(e)

        self.action_darkmode.setChecked(self.settings.value("darkMode",type=bool))
        self.toggle_darkmode() # toggle again darkmode just to make sure the wavelet window and FFT are updated as well
        self.action_autosave.setChecked(self.settings.value("autoSave",type=bool))
        self.toggle_auto_save()

    def get_available_screen(self):
        app = QApplication.instance()
        screen = app.primaryScreen()
        print('Screen: %s' % screen.name())
        size = screen.size()
        print('Size: %d x %d' % (size.width(), size.height()))
        rect = screen.availableGeometry()
        print('Available: %d x %d' % (rect.width(), rect.height()))
        return (size,rect)

    def reset_geometry(self):
        self.settings = QSettings("PyEcog", "PyEcog")
        # print("reading cofigurations from: " + self.settings.fileName())
        self.settings.beginGroup("StandardMainWindow")
        print(self.settings.value("windowGeometry", type=QByteArray))
        self.restoreGeometry(self.settings.value("windowGeometry", type=QByteArray))
        self.restoreState(self.settings.value("windowState", type=QByteArray))
        self.action_darkmode.setChecked(self.settings.value("darkMode",type=bool))
        self.toggle_darkmode()
        self.show()

    def load_directory(self,dirname=None):
        print('Openening folder')
        if type(dirname) != str:
            dirname = self.select_directory()
        temp_animal = Animal(id='-', eeg_folder=dirname)
        temp_project = Project(self.main_model,eeg_data_folder=dirname, title=dirname,project_file = dirname)
        temp_project.add_animal(temp_animal)
        self.tree_element.set_rootnode_from_project(temp_project)
        self.main_model.project = temp_project

    def new_project(self):
        self.main_model.project.__init__(main_model=self.main_model)  #= Project(self.main_model)
        self.tree_element.set_rootnode_from_project(self.main_model.project)

    def load_project(self,fname = None):
        if type(fname) is not str:
            dialog = QFileDialog(self)
            dialog.setWindowTitle('Load Project ...')
            dialog.setFileMode(QFileDialog.ExistingFile)
            # dialog.setOption(QFileDialog.DontUseNativeDialog, True)
            dialog.setAcceptMode(QFileDialog.AcceptOpen)
            dialog.setNameFilter('*.pyecog')
            if dialog.exec():
                fname = dialog.selectedFiles()[0]

        if type(fname) is str:
            print('load_project:Loading:',fname)
            if os.path.isfile(fname+'_autosave'):
                last_file_modification = os.path.getmtime(fname)
                last_autosave_modification = os.path.getmtime(fname+'_autosave')
                if last_autosave_modification>last_file_modification:
                    msg = QMessageBox()
                    msg.setIcon(QMessageBox.Information)
                    msg.setText("A more recently modified autosave file exists, do you want to load it instead?")
                    msg.setDetailedText("File name:" + fname +
                                        "\nLast autosave file modification: " +
                                           datetime.fromtimestamp(last_autosave_modification).isoformat(sep=' ') +
                                           "\nLast project file modification: " +
                                           datetime.fromtimestamp(last_file_modification).isoformat(
                                               sep=' ')
                                           )
                    msg.setWindowTitle("Load autosave")
                    msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
                    retval = msg.exec_()
                    if retval == QMessageBox.Yes:
                        fname = fname+'_autosave'

            self.main_model.project.load_from_json(fname)
            self.tree_element.set_rootnode_from_project(self.main_model.project)
            if self.main_model.project.current_animal.eeg_init_time:
                init_time = np.min(self.main_model.project.current_animal.eeg_init_time)
            else:
                init_time = 0
            plot_range = np.array([init_time, init_time+3600])
            print('trying to plot ', plot_range)
            self.paired_graphics_view.set_scenes_plot_channel_data(plot_range)
            self.main_model.set_time_position(init_time)
            self.main_model.set_window_pos([init_time,init_time])

        self.toggle_auto_save()


    def save(self):
        print('save action triggered')
        fname = self.main_model.project.project_file
        if not os.path.isfile(fname):
            self.save_as()
        else:
            print('Saving project to:', fname)
            self.main_model.project.save_to_json(fname)
        self.toggle_auto_save()

    def save_as(self):
        dialog = QFileDialog(self)
        dialog.setWindowTitle('Save Project as ...')
        dialog.setFileMode(QFileDialog.AnyFile)
        # dialog.setOption(QFileDialog.DontUseNativeDialog, True)
        dialog.setAcceptMode(QFileDialog.AcceptSave)
        dialog.setNameFilter('*.pyecog')
        if dialog.exec():
            fname = dialog.selectedFiles()[0]
            if not fname.endswith('.pyecog'):
                fname = fname + '.pyecog'
            print(fname)
            self.main_model.project.project_file = fname
            print('Saving project to:', self.main_model.project.project_file)
            self.main_model.project.save_to_json(fname)
        self.toggle_auto_save()

    def auto_save(self):
        print('autosave_save action triggered')
        fname = self.main_model.project.project_file
        if not os.path.isfile(fname):
            print('warning - project file does not exist yet')
        elif fname.endswith('.pyecog'):
            print('Auto saving project to:', fname+'_autosave')
            self.main_model.project.save_to_json(fname+'_autosave')
        else:
            print('project filename not in *.pyecog')

    def toggle_auto_save(self):
        if self.action_autosave.isChecked():
            self.autosave_timer.start(60000)  # autosave every minute
        else:
            self.autosave_timer.stop()

    def toggle_fullscreen(self):
        if self.action_fullscreen.isChecked():
            self.showFullScreen()
        else:
            self.showNormal()

    def toggle_darkmode(self):
        if self.action_darkmode.isChecked():
            print('Setting Dark Mode')
            # Fusion dark palette adapted from https://gist.github.com/QuantumCD/6245215.
            palette = QPalette()
            palette.setColor(QPalette.Window, QColor(53, 53, 53))
            palette.setColor(QPalette.WindowText, Qt.white)
            # palette.setColor(QPalette.Base, QColor(25, 25, 25)) # too Dark
            palette.setColor(QPalette.Base, QColor(35, 39, 41))
            # palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
            palette.setColor(QPalette.AlternateBase, QColor(45, 50, 53))
            palette.setColor(QPalette.ToolTipBase, Qt.black)
            palette.setColor(QPalette.ToolTipText, Qt.white)
            palette.setColor(QPalette.Text, Qt.white)
            palette.setColor(QPalette.Button, QColor(53, 53, 53))
            palette.setColor(QPalette.ButtonText, Qt.white)
            palette.setColor(QPalette.BrightText, Qt.red)
            palette.setColor(QPalette.Link, QColor(42, 130, 218))
            palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
            palette.setColor(QPalette.HighlightedText, Qt.black)
            self.app_handle.setPalette(palette)
            self.main_model.color_settings['pen'].setColor(QColor(255,255,255,100))
            self.main_model.color_settings['brush'].setColor(QColor(0,0,0,255))
            self.paired_graphics_view.set_scenes_plot_channel_data()
            self.main_model.sigWindowChanged.emit(self.main_model.window)

        else:
            print('Setting Light Mode')
            palette = QPalette()
            self.app_handle.setPalette(palette)
            self.main_model.color_settings['pen'].setColor(QColor(0,0,0,100))
            self.main_model.color_settings['brush'].setColor(QColor(255,255,255,255))
            self.paired_graphics_view.set_scenes_plot_channel_data()
            self.main_model.sigWindowChanged.emit(self.main_model.window)

    def select_directory(self, label_text='Select a directory'):
        '''
        Method launches a dialog allow user to select a directory
        '''
        dialog = QFileDialog(self)
        dialog.setWindowTitle(label_text)
        dialog.setFileMode(QFileDialog.DirectoryOnly)
        dialog.setAcceptMode(QFileDialog.AcceptOpen)
        # we might want to set home directory using settings
        # for now rely on default behaviour
        # home = os.path.expanduser("~") # default, if no settings available
        # dialog.setDirectory(home)
        # dialog.setOption(QFileDialog.DontUseNativeDialog, True)
        dialog.setOption(QFileDialog.ShowDirsOnly, False)
        if dialog.exec():
            return dialog.selectedFiles()[0]
        else:
            return ''

    def reload_plot(self):
        #print('reload')
        xmin,xmax = self.paired_graphics_view.insetview_plot.vb.viewRange()[0]
        x_range = xmax-xmin
        # index = self.tree_element.tree_view.currentIndex()
        # self.tree_element.model.data(index, TreeModel.prepare_for_plot_role)
        self.main_model.project.file_buffer.clear_buffer()
        self.main_model.project.file_buffer.get_data_from_range([xmin,xmax],n_envelope=10,channel=0)
        buffer_x_max = self.main_model.project.file_buffer.get_t_max_for_live_plot()
        #print(full_xrange)
        print('reload_plot',buffer_x_max,xmax)
        if buffer_x_max > xmax:
            #print('called set xrange')
            self.paired_graphics_view.insetview_plot.vb.setXRange(buffer_x_max-x_range,buffer_x_max, padding=0)


    def load_live_recording(self):
        self.timer.timeout.connect(self.reload_plot)
        if self.actionLiveUpdate.isChecked():
            self.live_recording_timer.start(100)
        else:
            self.live_recording_timer.stop()

    def open_git_url(self):
        webbrowser.open('https://github.com/KullmannLab/pyecog2')

    def open_docs_url(self):
        webbrowser.open('https://jcornford.github.io/pyecog_docs/')

    def open_video_window(self):
        self.dock_list['Video'].show()
        self.show()

    def open_fft_window(self):
        self.dock_list['FFT'].show()
        self.dock_list['FFT'].widget().updateData()
        self.show()

    def open_wavelet_window(self):
        self.dock_list['Wavelet'].show()
        self.dock_list['Wavelet'].widget().update_data()
        self.show()

    def open_console_window(self):
        self.dock_list['Console'].show()
        self.show()

    def openNDFconverter(self):
        print('opening NDF converter')
        self.ndf_converter = NDFConverterWindow(parent=self)
        self.ndf_converter.show()

    def openProjectEditor(self):
        print('opening Project Editor')
        self.projectEditor = ProjectEditWindow(self.main_model.project,parent=self)
        self.projectEditor.show()

    def openFeatureExtractor(self):
        self.featureExtractorWindow = FeatureExtractorWindow(self.main_model.project,parent=self)
        self.featureExtractorWindow.show()

    def openClassifier(self):
        if hasattr(self,'ClassifierWindow'):
            self.ClassifierWindow.setWindowState((self.ClassifierWindow.windowState() & ~Qt.WindowMinimized)|Qt.WindowActive)
            self.ClassifierWindow.raise_()
            self.ClassifierWindow.show()
            return
        self.ClassifierWindow = ClassifierWindow(self.main_model.project,parent=self)
        geometry = self.ClassifierWindow.geometry()
        geometry.setHeight(self.geometry().height())
        self.ClassifierWindow.setGeometry(geometry)
        self.ClassifierWindow.show()

    def export_annotations(self):
        dialog = QFileDialog(self)
        dialog.setWindowTitle('Export annotations as ...')
        dialog.setFileMode(QFileDialog.AnyFile)
        # dialog.setOption(QFileDialog.DontUseNativeDialog, True)
        dialog.setAcceptMode(QFileDialog.AcceptSave)
        dialog.setNameFilter('*.csv')
        if dialog.exec():
            fname = dialog.selectedFiles()[0]
            print(fname)
            print('Exporting annotations to:', fname)
            self.main_model.project.export_annotations(fname)

    def build_menubar(self):
        self.menu_bar = self.menuBar()

        # FILE section
        self.menu_file = self.menu_bar.addMenu("File")
        self.action_NDF_converter     = self.menu_file.addAction("Open NDF converter")
        self.menu_file.addSeparator()
        self.action_load_directory    = self.menu_file.addAction("Load directory")
        self.menu_file.addSeparator()
        self.actionLiveUpdate  = self.menu_file.addAction("Live Recording")
        self.actionLiveUpdate.setCheckable(True)
        self.actionLiveUpdate.toggled.connect(self.load_live_recording)
        self.actionLiveUpdate.setChecked(False)
        self.actionLiveUpdate.setShortcut('Ctrl+L')

        self.menu_file.addSeparator()
        self.action_quit       = self.menu_file.addAction("Quit")
        self.action_NDF_converter.triggered.connect(self.openNDFconverter)
        self.action_load_directory.triggered.connect(self.load_directory)
        self.action_quit.triggered.connect(self.close)
        self.actionLiveUpdate.triggered.connect(self.load_live_recording)

        # PROJECT section
        self.menu_project = self.menu_bar.addMenu("Project")
        self.action_edit_project = self.menu_project.addAction("Edit Project Settings")
        self.action_edit_project.triggered.connect(self.openProjectEditor)

        self.menu_project.addSeparator()
        self.action_new_project = self.menu_project.addAction("New Project")
        self.action_load_project = self.menu_project.addAction("Load Project")
        self.action_save = self.menu_project.addAction("Save Project")
        self.action_save.setShortcut('Ctrl+S')
        self.action_save_as = self.menu_project.addAction("Save Project as...")
        self.action_save_as.setShortcut('Ctrl+Shift+S')
        self.action_new_project.triggered.connect(self.new_project)
        self.action_load_project.triggered.connect(self.load_project)
        self.action_save.triggered.connect(self.save)
        self.action_save_as.triggered.connect(self.save_as)
        self.menu_project.addSeparator()
        self.action_autosave  = self.menu_project.addAction("Enable autosave")
        self.action_autosave.setCheckable(True)
        self.action_autosave.toggled.connect(self.toggle_auto_save)
        self.action_autosave.setChecked(True)
        self.autosave_timer.timeout.connect(self.auto_save)


        # ANNOTATIONS section
        self.menu_annotations = self.menu_bar.addMenu("Annotations")
        self.annotations_undo = self.menu_annotations.addAction("Undo")
        self.annotations_undo.setShortcut('Ctrl+Z')
        self.annotations_undo.triggered.connect(self.main_model.annotations.step_back_in_history)
        self.annotations_redo = self.menu_annotations.addAction("Redo")
        self.annotations_redo.setShortcut('Ctrl+Shift+Z')
        self.annotations_redo.triggered.connect(self.main_model.annotations.step_forward_in_history)
        self.action_export_annotations = self.menu_annotations.addAction("Export to CSV")
        self.action_export_annotations.triggered.connect(self.export_annotations)
        self.action_import_annotations = self.menu_annotations.addAction("Import annotations")
        self.action_import_annotations.setDisabled(True)

        # CLASSIFIER section
        self.menu_classifier = self.menu_bar.addMenu("Classifier")
        self.action_setup_feature_extractor = self.menu_classifier.addAction("Feature Extractor Options")
        self.action_setup_classifier = self.menu_classifier.addAction("Classifier Options")
        self.action_setup_feature_extractor.triggered.connect(self.openFeatureExtractor)
        self.action_setup_classifier.triggered.connect(self.openClassifier)
        # self.action_train_classifier.setDisabled(True)
        # self.action_run_classifier.setDisabled(True)
        # self.action_review_classifications.setDisabled(True)

        # TOOLS section
        self.menu_tools = self.menu_bar.addMenu("Tools")
        self.action_open_video_window = self.menu_tools.addAction("Video")
        self.action_open_video_window.triggered.connect(self.open_video_window)
        # To do
        self.action_open_fft_window = self.menu_tools.addAction("FFT")
        self.action_open_fft_window.triggered.connect(self.open_fft_window)

        self.action_open_morlet_window = self.menu_tools.addAction("Morlet Wavelet Transform")
        self.action_open_morlet_window.triggered.connect(self.open_wavelet_window)

        self.action_open_console_window = self.menu_tools.addAction("Console")
        self.action_open_console_window.triggered.connect(self.open_console_window)

        # HELP section
        self.menu_help = self.menu_bar.addMenu("Help")
        self.action_show_hints    = self.menu_help.addAction("Show Hints")
        self.action_show_hints.triggered.connect(self.dock_list['Hints'].show)

        self.action_reset_geometry    = self.menu_help.addAction("Reset Main Window layout")
        self.action_reset_geometry.triggered.connect(self.reset_geometry)

        self.action_fullscreen = self.menu_help.addAction("Full Screen")
        self.action_fullscreen.setCheckable(True)
        self.action_fullscreen.toggled.connect(self.toggle_fullscreen)
        self.action_fullscreen.setChecked(False)

        self.action_darkmode = self.menu_help.addAction("Dark mode")
        self.action_darkmode.setCheckable(True)
        self.action_darkmode.toggled.connect(self.toggle_darkmode)
        self.action_darkmode.setChecked(False)


        self.menu_help.addSeparator()
        self.action_go_to_git = self.menu_help.addAction("Go to Git Repository")
        self.action_go_to_git.triggered.connect(self.open_git_url)

        self.action_go_to_doc = self.menu_help.addAction("Go to web documentation")
        self.action_go_to_doc.triggered.connect(self.open_docs_url)

        self.menu_bar.setNativeMenuBar(False)

        #self.menubar.addMenu("Edit")
        #self.menubar.addMenu("View")

    def closeEvent(self, event):
        self.auto_save()
        print('closing')
        settings = QSettings("PyEcog","PyEcog")
        settings.beginGroup("MainWindow")
        settings.setValue("windowGeometry", self.saveGeometry())
        settings.setValue("windowState", self.saveState())
        settings.setValue("darkMode",self.action_darkmode.isChecked())
        settings.setValue("autoSave",self.action_autosave.isChecked())
        settings.endGroup()

        settings.beginGroup("ProjectSettings")
        settings.setValue("ProjectFileName", self.main_model.project.project_file)
        settings.endGroup()
        print('current project filename:',self.main_model.project.project_file)
        # for dock_name in self.dock_list.keys():
        #     settings.beginGroup(dock_name)
        #     settings.setValue("windowGeometry", self.dock_list[dock_name].saveGeometry())
        #     # settings.setValue("windowState", self.dock_list[dock_name].saveState())
        #     settings.endGroup()
        self.saveState()
        print('Finished closeEvent')

    def keyPressEvent(self, evt):
        print('Key press captured by Main', evt.key())
        modifiers = evt.modifiers()
        if evt.key() == QtCore.Qt.Key_Space:
            print('Space pressed')
            self.video_element.play()
            return

        if evt.key() == QtCore.Qt.Key_Left:
            if modifiers == QtCore.Qt.ShiftModifier:
                self.paired_graphics_view.overview_page_left()
            else:
                self.paired_graphics_view.insetview_page_left()
            return

        if evt.key() == QtCore.Qt.Key_Right:
            if modifiers == QtCore.Qt.ShiftModifier:
                self.paired_graphics_view.overview_page_right()
            else:
                self.paired_graphics_view.insetview_page_right()
            return

        if evt.key() == QtCore.Qt.Key_Delete:
            # self.main_model.annotations.delete_annotation(self.main_model.annotations.focused_annotation)
            self.annotation_table.removeSelection()
            return

        numbered_keys = [QtCore.Qt.Key_1,QtCore.Qt.Key_2,QtCore.Qt.Key_3,QtCore.Qt.Key_4,QtCore.Qt.Key_5,
                         QtCore.Qt.Key_6,QtCore.Qt.Key_7,QtCore.Qt.Key_8,QtCore.Qt.Key_9,QtCore.Qt.Key_0]

        for i in range(len(numbered_keys)):
            if evt.key() == numbered_keys[i]:
                print(i+1,'pressed')
                label = self.annotation_parameter_tree.get_label_from_shortcut(i + 1)
                if label is not None:
                    if self.main_model.annotations.focused_annotation is None:
                        print('Adding new annotation')
                        new_annotation = AnnotationElement(label = label,
                                                           start = self.main_model.window[0],
                                                           end = self.main_model.window[1],
                                                           notes = '')
                        self.main_model.annotations.add_annotation(new_annotation)
                        self.main_model.annotations.focusOnAnnotation(new_annotation)
                    else:
                        print('Calling annotation_table changeSelectionLabel')
                        self.annotation_table.changeSelectionLabel(label)
                        # annotation = self.main_model.annotations.focused_annotation
                        # annotation.setLabel(self.main_model.annotations.labels[i])
                        # self.main_model.annotations.focusOnAnnotation(annotation)
                    return
Ejemplo n.º 54
0
    def viewJsonMessage(self, msgJson):
        """
        :param message bytes: raw message data
        """

        dlg = QDialog()
        layout = QVBoxLayout()
        dlg.setLayout(layout)
        dlg.setMinimumSize(
            (2 * self.app.desktopGeometry.width()) / 3,
            (2 * self.app.desktopGeometry.height()) / 3,
        )

        msgView = QTextBrowser(dlg)
        msgView.setFontFamily('Montserrat')
        msgView.setFontWeight(QFont.DemiBold)
        msgView.setFontPointSize(12)
        layout.addWidget(msgView)
        msgView.insertPlainText(json.dumps(msgJson, indent=4))

        msgView.moveCursor(QTextCursor.Start)

        dlg.exec_()
Ejemplo n.º 55
0
class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.filetype_set = False
        self.save_location = ""
        self.main_layout = QHBoxLayout(self)
        self.converter = Converter()
        self.setWindowTitle("PDF compiler")

        self.create_base_ui()

    def create_thread(self):
        try:
            self.thread.isFinished()
        except:
            self.thread = QThread()
            self.thread.finished.connect(self._update_finished_text)
            self.converter.moveToThread(self.thread)
            self.thread.started.connect(self.converter.convert)
            self.converter.finished.connect(self.thread.quit)
            # self.converter.finished.connect(self.converter.deleteLater)
            self.thread.finished.connect(self.thread.deleteLater)
            self.converter.progress.connect(self._on_progress_update)
            self.converter.send_toc.connect(self.create_toc_show_window)

    def create_toc_show_window(self, toc_dict):
        self._update_text_window(
            "Please accept the proposed table of contents")
        self.toc_text_window = QTextEdit()
        self.toc_text_window.resize(400, 200)
        self.accept_toc_button = QPushButton("Accept Table of Contents")
        self.accept_toc_button.clicked.connect(self.accept_toc)
        self.tmp_layout = QVBoxLayout()
        self.tmp_layout.addWidget(self.toc_text_window)
        self.tmp_layout.addWidget(self.accept_toc_button)
        self.main_layout.addLayout(self.tmp_layout)
        text = ""
        for key, value in toc_dict.items():
            text += f'{key}: {value}\n'
        self.toc_text_window.setText(text)

    def accept_toc(self):
        text = self.toc_text_window.toPlainText()
        df = {}
        for line in text.splitlines():
            line = line.split(":")
            value, data = line[0], line[1]
            value, data = value.strip(), int(data)
            df[value] = data
        self.converter.set_toc_dict(df)
        self.converter.accept_toc()
        self.layout().removeWidget(self.toc_text_window)
        self.toc_text_window.deleteLater()
        self.toc_text_window = None
        self.layout().removeWidget(self.accept_toc_button)
        self.accept_toc_button.deleteLater()
        self.accept_toc_button = None
        self._update_text_window("Creating the PDF. Just a second")

    def create_base_ui(self):
        self.base_layout = QVBoxLayout(self)
        self.label_above_text_box = QLabel("Selected files:")
        self.big_text_box = QTextBrowser()
        self.select_file_label = QLabel("Choose filetype")
        self.rtf_button = QRadioButton(
            ".*rtf files", clicked=lambda: self._set_filetype("rtf"))
        self.rtf_button.setChecked(True)
        self.converter.set_filetype("rtf")
        self.txt_button = QRadioButton(
            ".*txt files", clicked=lambda: self._set_filetype("txt"))
        self.file_buttons = QButtonGroup()
        self.file_buttons.addButton(self.rtf_button)
        self.file_buttons.addButton(self.txt_button)

        self.my_button = QPushButton("Choose Files",
                                     clicked=lambda: self._select_files())

        self.engine_label = QLabel("Choose engine (only used for *.rtf files)")
        self.engine_buttons = QButtonGroup()
        self.word_button = QRadioButton(
            "Word", clicked=lambda: self._set_engine("word"))
        self.word_button.setChecked(True)
        self.open_office_button = QRadioButton(
            "Open Office", clicked=lambda: self._set_engine("of"))
        self.engine_buttons.addButton(self.word_button)
        self.engine_buttons.addButton(self.open_office_button)

        self.h_toc_orientation_button = QRadioButton(
            "Horizontal table of contents",
            clicked=lambda: self._set_toc_orientation("L"))
        self.v_toc_orientation_button = QRadioButton(
            "Vertical table of contents",
            clicked=lambda: self._set_toc_orientation("P"))

        self.toc_button = QCheckBox("Generate table of contents")
        self.toc_button.clicked.connect(
            self.v_toc_orientation_button.setChecked)
        self.compile_button = QPushButton("Compile from selected files",
                                          clicked=lambda: self._compile())

        self.save_location_button = QPushButton(
            "Select file save location",
            clicked=lambda: self._set_save_location())
        self.save_file_label = QLabel("Save location not yet selected")

        self.base_layout.addWidget(self.select_file_label)
        self.base_layout.addWidget(self.rtf_button)
        self.base_layout.addWidget(self.txt_button)
        self.base_layout.addWidget(self.my_button)
        self.base_layout.addWidget(self.engine_label)
        self.base_layout.addWidget(self.word_button)
        self.base_layout.addWidget(self.open_office_button)
        self.base_layout.addWidget(self.toc_button)
        self.base_layout.addWidget(self.toc_button)
        self.base_layout.addWidget(self.v_toc_orientation_button)
        self.base_layout.addWidget(self.h_toc_orientation_button)
        self.base_layout.addWidget(self.save_location_button)
        self.base_layout.addWidget(self.save_file_label)
        self.base_layout.addWidget(self.compile_button)
        self.base_layout.addWidget(self.label_above_text_box)
        self.base_layout.addWidget(self.big_text_box)
        self.progress_bar = QProgressBar(self)
        self.progress_bar.setValue(0)
        self.base_layout.addWidget(self.progress_bar)
        self.main_layout.addLayout(self.base_layout)
        self.show()

    def _select_files(self):
        dialog = QFileDialog()
        self.label_above_text_box.setText("Selected files:")
        file_filter = "All files"
        if not self.converter.filetype_set():
            self._update_text_window("Please select filetype first")
            return None
        else:
            if self.converter.get_filetype() == "txt":
                file_filter = 'Text file (*.txt)'
            elif self.converter.get_filetype() == "rtf":
                file_filter = 'Rich Text Format file (*.rtf)'

            filename = dialog.getOpenFileNames(filter=file_filter)
            self.converter.set_files(filename[0])
        file_string = ""
        for file in filename[0]:
            file_string += file
            file_string += "\n"
        self._update_text_window(file_string)

    def _set_filetype(self, filetype):
        self.converter.set_filetype(filetype)

    def _set_engine(self, engine):
        self.converter.set_engine(engine)

    def _set_toc_orientation(self, orientation):
        self.converter.set_toc_orientation(orientation)

    def _set_save_location(self):
        dialog = QFileDialog()
        dialog.setOption(QFileDialog.ShowDirsOnly, True)
        dialog.setFileMode(QFileDialog.Directory)
        if dialog.exec_() == QFileDialog.Accepted:
            file = dialog.selectedFiles()[0]
            self.converter.set_filename(file + "/" + parameters["PDF name"])
            self.save_file_label.setText(
                f"Save file location \n{file}/compiled.pdf")
            self.compile_button.setText("Compile from selected files")

    def _update_progress_bar_length(self):
        if not self.converter.converter_ready():
            return None
        self.progress_bar.setMaximum(self.converter.get_num_files() + 1)

    def _remove_progress_bar(self):
        self.progress_bar.setValue(0)
        self.layout().removeWidget(self.progress_bar)

    def _compile(self):
        self.converter.set_create_toc(self.toc_button.isChecked())
        if not self.converter.filename_set():
            self.compile_button.setText(
                "Compile from selected files\n Select save location first!")
            return None
        if not self.converter.files_set():
            self._update_text_window("Select files first!")
            return None
        self._update_started_text()
        self.create_thread()
        self._update_progress_bar_length()
        self.thread.start()

    def _update_text_window(self, msg):
        self.big_text_box.setText(msg)

    def _on_progress_update(self, value):
        self.progress_bar.setValue(value)

    def _update_finished_text(self):
        if self.toc_button.isChecked():
            compile_text = f"PDF compiled as {self.converter.filename}"
        else:
            compile_text = f"PDF compiled as {self.converter.filename} \nTable of contents page not created"
        self._update_text_window(compile_text)
        self.compile_button.setText(
            "RESTART PROGRAM BEFORE COMPILING OTHER DOCUMENTS")

    def _update_started_text(self):
        self.label_above_text_box.setText("Compiling..." "")
        self._update_text_window(
            "Compiling PDF from rtf files. \nThis may take some time \nDo not open "
            "the selected engine while this program is running")
Ejemplo n.º 56
0
    def __init__(self):
        super().__init__()
        # self.window = QWidget()
        self.resize(1000, 600)
        self.setWindowTitle("拍一拍聊天室")

        # 聊天窗口
        self.messageBrowser = QTextBrowser()

        # 字体选择
        self.fontComboBox = QFontComboBox()
        self.fontComboBox.setObjectName("fontComboBox")
        self.fontComboBox.currentFontChanged.connect(
            self.on_fontComboBox_currentFontChanged)

        # 字体大小
        self.sizeComboBox = QComboBox()
        self.sizeComboBox.setObjectName("SizeComboBox")
        self.sizeComboBox.setCurrentIndex(0)
        for i in range(31):
            self.sizeComboBox.addItem("")
        _translate = QCoreApplication.translate
        self.sizeComboBox.setCurrentText(_translate("Widget", "10"))
        for i in range(31):
            self.sizeComboBox.setItemText(i, _translate("Widget", str(i + 10)))
        self.sizeComboBox.currentIndexChanged.connect(
            self.on_SizeComboBox_currentIndexChanged)

        # 加粗
        self.boldToolBtn = QToolButton()
        self.boldToolBtn.setContextMenuPolicy(Qt.DefaultContextMenu)
        icon = QIcon()
        root = QFileInfo(__file__).absolutePath()  # 获取根目录
        icon.addPixmap(QPixmap(root + "/image/bold.png"), QIcon.Normal,
                       QIcon.Off)
        self.boldToolBtn.setIcon(icon)
        self.boldToolBtn.setIconSize(QSize(22, 22))
        self.boldToolBtn.setCheckable(True)
        self.boldToolBtn.setAutoRaise(True)
        self.boldToolBtn.setObjectName("boldToolBtn")
        self.boldToolBtn.setToolTip(_translate("Widget", "加粗"))
        self.boldToolBtn.setText(_translate("Widget", "..."))
        self.boldToolBtn.clicked.connect(self.on_boldToolBtn_clicked)

        # 斜体
        self.italicToolBtn = QToolButton()
        icon1 = QIcon()
        icon1.addPixmap(QPixmap(root + "/image/italic.png"), QIcon.Normal,
                        QIcon.Off)
        self.italicToolBtn.setIcon(icon1)
        self.italicToolBtn.setIconSize(QSize(22, 22))
        self.italicToolBtn.setCheckable(True)
        self.italicToolBtn.setAutoRaise(True)
        self.italicToolBtn.setObjectName("italicToolBtn")
        self.italicToolBtn.setToolTip(_translate("Widget", "倾斜"))
        self.italicToolBtn.setText(_translate("Widget", "..."))
        self.italicToolBtn.clicked.connect(self.on_italicToolBtn_clicked)

        # 下划线
        self.underlineToolBtn = QToolButton()
        icon2 = QIcon()
        icon2.addPixmap(QPixmap(root + "/image/under.png"), QIcon.Normal,
                        QIcon.Off)
        self.underlineToolBtn.setIcon(icon2)
        self.underlineToolBtn.setIconSize(QSize(22, 22))
        self.underlineToolBtn.setCheckable(True)
        self.underlineToolBtn.setAutoRaise(True)
        self.underlineToolBtn.setObjectName("underlineToolBtn")
        self.underlineToolBtn.setToolTip(_translate("Widget", "下划线"))
        self.underlineToolBtn.setText(_translate("Widget", "..."))
        self.underlineToolBtn.clicked.connect(self.on_underlineToolBtn_clicked)

        # 颜色
        self.colorToolBtn = QToolButton()
        icon3 = QIcon()
        icon3.addPixmap(QPixmap(root + "/image/color.png"), QIcon.Normal,
                        QIcon.Off)
        self.colorToolBtn.setIcon(icon3)
        self.colorToolBtn.setIconSize(QSize(22, 22))
        self.colorToolBtn.setAutoRaise(True)
        self.colorToolBtn.setObjectName("colorToolBtn")
        self.colorToolBtn.setToolTip(_translate("Widget", "更改字体颜色"))
        self.colorToolBtn.setText(_translate("Widget", "..."))
        self.colorToolBtn.clicked.connect(self.on_colorToolBtn_clicked)

        # 聊天记录
        self.saveToolBtn = QToolButton()
        icon4 = QIcon()
        icon4.addPixmap(QPixmap(root + "/image/save.png"), QIcon.Normal,
                        QIcon.Off)
        self.saveToolBtn.setIcon(icon4)
        self.saveToolBtn.setIconSize(QSize(22, 22))
        self.saveToolBtn.setAutoRaise(True)
        self.saveToolBtn.setObjectName("saveToolBtn")
        self.saveToolBtn.setToolTip(_translate("Widget", "保存聊天记录"))
        self.saveToolBtn.setText(_translate("Widget", "..."))
        self.saveToolBtn.clicked.connect(self.on_saveToolBtn_clicked)

        self.clearToolBtn = QToolButton()
        icon5 = QIcon()
        icon5.addPixmap(QPixmap(root + "/image/clear.png"), QIcon.Normal,
                        QIcon.Off)
        self.clearToolBtn.setIcon(icon5)
        self.clearToolBtn.setIconSize(QSize(22, 22))
        self.clearToolBtn.setAutoRaise(True)
        self.clearToolBtn.setObjectName("clearToolBtn")
        self.clearToolBtn.setToolTip(_translate("Widget", "清空聊天记录"))
        self.clearToolBtn.setText(_translate("Widget", "..."))
        self.clearToolBtn.clicked.connect(self.on_clearToolBtn_clicked)

        # 发送按钮
        self.sendButton = QPushButton('发送')
        self.sendButton.clicked.connect(self.sendChatMsg)

        # 发送功能横向布局
        functionboxLayout = QHBoxLayout()
        functionboxLayout.addWidget(self.fontComboBox)
        functionboxLayout.addWidget(self.sizeComboBox)
        functionboxLayout.addWidget(self.boldToolBtn)
        functionboxLayout.addWidget(self.italicToolBtn)
        functionboxLayout.addWidget(self.underlineToolBtn)
        functionboxLayout.addWidget(self.colorToolBtn)
        functionboxLayout.addWidget(self.saveToolBtn)
        functionboxLayout.addWidget(self.clearToolBtn)
        functionboxLayout.addStretch(1)
        functionboxLayout.addWidget(self.sendButton)

        # 输入框
        self.messageEdit = QTextEdit()

        # 左侧竖向布局,三行
        vhoxLayout_left = QVBoxLayout()
        vhoxLayout_left.addWidget(self.messageBrowser)
        vhoxLayout_left.addLayout(functionboxLayout)
        vhoxLayout_left.addWidget(self.messageEdit)
        vhoxLayout_left.setStretch(0, 4)
        vhoxLayout_left.setStretch(1, 1)
        vhoxLayout_left.setStretch(2, 2)

        # 在线用户列表
        self.userView = QTreeWidget()
        self.userView.setHeaderLabels(["用户列表"])
        self.userView_online_node = QTreeWidgetItem(self.userView)
        self.userView_online_node.setText(0, "在线用户")
        self.userView_all_node = QTreeWidgetItem(self.userView)
        self.userView_all_node.setText(0, "所有用户")
        self.userView.setContextMenuPolicy(Qt.CustomContextMenu)
        self.userView.customContextMenuRequested.connect(self.userView_menu)

        # 公共栏Label
        self.announcement_label = QLabel()
        self.announcement_label.setText("公告栏")

        # 公告栏
        self.announcement_edit = QTextEdit()
        self.announcement_edit.setEnabled(False)

        # 左侧竖向布局,一整块
        vhoxLayout_right = QVBoxLayout()
        vhoxLayout_right.addWidget(self.userView)
        vhoxLayout_right.addWidget(self.announcement_label)
        vhoxLayout_right.addWidget(self.announcement_edit)

        # 最大布局,横向两列
        hboxLayout = QHBoxLayout(self)
        hboxLayout.addLayout(vhoxLayout_left)
        hboxLayout.addLayout(vhoxLayout_right)
        hboxLayout.setStretch(0, 3)
        hboxLayout.setStretch(1, 1)

        self.show()
Ejemplo n.º 57
0
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.textSuffix = QTextEdit(self.centralwidget)
        self.textSuffix.setGeometry(QRect(20, 230, 261, 31))
        self.textSuffix.setObjectName("textSuffix")
        self.textRiskf = QTextEdit(self.centralwidget)
        self.textRiskf.setGeometry(QRect(20, 360, 261, 31))
        self.textRiskf.setObjectName("textRiskf")
        self.label = QLabel(self.centralwidget)
        self.label.setGeometry(QRect(20, 330, 261, 20))
        self.label.setObjectName("label")
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setGeometry(QRect(20, 270, 281, 21))
        self.label_2.setObjectName("label_2")
        self.label_3 = QLabel(self.centralwidget)
        self.label_3.setGeometry(QRect(20, 200, 261, 16))
        self.label_3.setObjectName("label_3")
        self.label_4 = QLabel(self.centralwidget)
        self.label_4.setGeometry(QRect(20, 130, 261, 21))
        self.label_4.setObjectName("label_4")
        self.label_5 = QLabel(self.centralwidget)
        self.label_5.setGeometry(QRect(20, 60, 261, 21))
        self.label_5.setObjectName("label_5")
        self.startButton = QPushButton(self.centralwidget)
        self.startButton.setGeometry(QRect(20, 510, 111, 31))
        self.startButton.setObjectName("startButton")
        self.label_6 = QLabel(self.centralwidget)
        self.label_6.setGeometry(QRect(20, 10, 261, 41))
        font = QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        font.setBold(True)
        font.setUnderline(True)
        font.setWeight(75)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.resultBrowser = QTextBrowser(self.centralwidget)
        self.resultBrowser.setGeometry(QRect(310, 30, 461, 501))
        self.resultBrowser.setObjectName("resultBrowser")
        self.DateStart = QDateEdit(self.centralwidget)
        self.DateStart.setGeometry(QRect(20, 90, 121, 31))
        self.DateStart.setMaximumDate(QDate(2050, 12, 31))
        self.DateStart.setMinimumDate(QDate(1990, 12, 31))
        self.DateStart.setDate(QDate(2018, 1, 1))
        self.DateStart.setObjectName("DateStart")
        self.DateEnd = QDateEdit(self.centralwidget)
        self.DateEnd.setGeometry(QRect(19, 163, 121, 31))
        self.DateEnd.setDateTime(QDateTime(QDate(2018, 1, 1), QTime(0, 0, 0)))
        self.DateEnd.setMaximumDateTime(QDateTime(QDate(2050, 12, 31), QTime(23, 59, 59)))
        self.DateEnd.setMinimumDate(QDate(1990, 12, 31))
        self.DateEnd.setObjectName("DateEnd")
        self.spinBoxMode = QSpinBox(self.centralwidget)
        self.spinBoxMode.setGeometry(QRect(20, 290, 71, 31))
        self.spinBoxMode.setMinimum(1)
        self.spinBoxMode.setMaximum(3)
        self.spinBoxMode.setObjectName("spinBoxMode")
        self.label_7 = QLabel(self.centralwidget)
        self.label_7.setGeometry(QRect(170, 300, 101, 21))
        self.label_7.setObjectName("label_7")
        self.endButton = QPushButton(self.centralwidget)
        self.endButton.setGeometry(QRect(160, 510, 121, 31))
        self.endButton.setObjectName("endButton")
        self.fileButton = QPushButton(self.centralwidget)
        self.fileButton.setGeometry(QRect(20, 410, 261, 31))
        self.fileButton.setObjectName("fileButton")
        self.pathBrowser = QTextBrowser(self.centralwidget)
        self.pathBrowser.setGeometry(QRect(20, 450, 261, 41))
        self.pathBrowser.setObjectName("pathBrowser")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setGeometry(QRect(0, 0, 800, 23))
        self.menubar.setObjectName("menubar")
        self.menuAnalysis = QMenu(self.menubar)
        self.menuAnalysis.setObjectName("menuAnalysis")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.menubar.addAction(self.menuAnalysis.menuAction())

        self.retranslateUi(MainWindow)
        QMetaObject.connectSlotsByName(MainWindow)
        ####################################################

        self.mythread = MyThread()
        self.mainthread = MyMainThread()

        self.fileButton.clicked.connect(lambda : self.file_path())
        self.mythread.trigger.connect(self.update_text)
        self.mainthread.result.connect(self.update_result)

        self.startButton.clicked.connect(lambda : self.input_Parameters())
        self.startButton.clicked.connect(lambda : self.mainthread.start())
        self.startButton.clicked.connect(lambda : self.mythread.start())
        self.endButton.clicked.connect(lambda : self.end_calculation())
Ejemplo n.º 58
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.textSuffix = QTextEdit(self.centralwidget)
        self.textSuffix.setGeometry(QRect(20, 230, 261, 31))
        self.textSuffix.setObjectName("textSuffix")
        self.textRiskf = QTextEdit(self.centralwidget)
        self.textRiskf.setGeometry(QRect(20, 360, 261, 31))
        self.textRiskf.setObjectName("textRiskf")
        self.label = QLabel(self.centralwidget)
        self.label.setGeometry(QRect(20, 330, 261, 20))
        self.label.setObjectName("label")
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setGeometry(QRect(20, 270, 281, 21))
        self.label_2.setObjectName("label_2")
        self.label_3 = QLabel(self.centralwidget)
        self.label_3.setGeometry(QRect(20, 200, 261, 16))
        self.label_3.setObjectName("label_3")
        self.label_4 = QLabel(self.centralwidget)
        self.label_4.setGeometry(QRect(20, 130, 261, 21))
        self.label_4.setObjectName("label_4")
        self.label_5 = QLabel(self.centralwidget)
        self.label_5.setGeometry(QRect(20, 60, 261, 21))
        self.label_5.setObjectName("label_5")
        self.startButton = QPushButton(self.centralwidget)
        self.startButton.setGeometry(QRect(20, 510, 111, 31))
        self.startButton.setObjectName("startButton")
        self.label_6 = QLabel(self.centralwidget)
        self.label_6.setGeometry(QRect(20, 10, 261, 41))
        font = QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        font.setBold(True)
        font.setUnderline(True)
        font.setWeight(75)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.resultBrowser = QTextBrowser(self.centralwidget)
        self.resultBrowser.setGeometry(QRect(310, 30, 461, 501))
        self.resultBrowser.setObjectName("resultBrowser")
        self.DateStart = QDateEdit(self.centralwidget)
        self.DateStart.setGeometry(QRect(20, 90, 121, 31))
        self.DateStart.setMaximumDate(QDate(2050, 12, 31))
        self.DateStart.setMinimumDate(QDate(1990, 12, 31))
        self.DateStart.setDate(QDate(2018, 1, 1))
        self.DateStart.setObjectName("DateStart")
        self.DateEnd = QDateEdit(self.centralwidget)
        self.DateEnd.setGeometry(QRect(19, 163, 121, 31))
        self.DateEnd.setDateTime(QDateTime(QDate(2018, 1, 1), QTime(0, 0, 0)))
        self.DateEnd.setMaximumDateTime(QDateTime(QDate(2050, 12, 31), QTime(23, 59, 59)))
        self.DateEnd.setMinimumDate(QDate(1990, 12, 31))
        self.DateEnd.setObjectName("DateEnd")
        self.spinBoxMode = QSpinBox(self.centralwidget)
        self.spinBoxMode.setGeometry(QRect(20, 290, 71, 31))
        self.spinBoxMode.setMinimum(1)
        self.spinBoxMode.setMaximum(3)
        self.spinBoxMode.setObjectName("spinBoxMode")
        self.label_7 = QLabel(self.centralwidget)
        self.label_7.setGeometry(QRect(170, 300, 101, 21))
        self.label_7.setObjectName("label_7")
        self.endButton = QPushButton(self.centralwidget)
        self.endButton.setGeometry(QRect(160, 510, 121, 31))
        self.endButton.setObjectName("endButton")
        self.fileButton = QPushButton(self.centralwidget)
        self.fileButton.setGeometry(QRect(20, 410, 261, 31))
        self.fileButton.setObjectName("fileButton")
        self.pathBrowser = QTextBrowser(self.centralwidget)
        self.pathBrowser.setGeometry(QRect(20, 450, 261, 41))
        self.pathBrowser.setObjectName("pathBrowser")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setGeometry(QRect(0, 0, 800, 23))
        self.menubar.setObjectName("menubar")
        self.menuAnalysis = QMenu(self.menubar)
        self.menuAnalysis.setObjectName("menuAnalysis")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.menubar.addAction(self.menuAnalysis.menuAction())

        self.retranslateUi(MainWindow)
        QMetaObject.connectSlotsByName(MainWindow)
        ####################################################

        self.mythread = MyThread()
        self.mainthread = MyMainThread()

        self.fileButton.clicked.connect(lambda : self.file_path())
        self.mythread.trigger.connect(self.update_text)
        self.mainthread.result.connect(self.update_result)

        self.startButton.clicked.connect(lambda : self.input_Parameters())
        self.startButton.clicked.connect(lambda : self.mainthread.start())
        self.startButton.clicked.connect(lambda : self.mythread.start())
        self.endButton.clicked.connect(lambda : self.end_calculation())

        
    def input_Parameters(self):
        self.aa = str(self.DateStart.date().toString("yyyyMMdd"))
        self.bb = str(self.DateEnd.date().toString("yyyyMMdd"))
        self.cc = str(self.textSuffix.toPlainText())
        self.dd = int(self.spinBoxMode.value())
        self.ee = float(self.textRiskf.toPlainText())

        if self.dd==1:
            self.dx='p1f1'
        elif self.dd==2:
            self.dx='p0f1'
        elif self.dd==3:
            self.dx='p1f0'
        else:
            raise Exception('Running Mode is wrong')

        self.mainthread.parameters_in = [self.aa ,self.bb, self.cc, self.dx, self.ee, self.directory1]


    def file_path(self):  
        self.directory1 = QFileDialog.getExistingDirectory(self.centralwidget,"Please choose folder","/")+'/'
        self.pathBrowser.append(str(self.directory1))

    def update_text(self, message):
        self.resultBrowser.append(str(message))
    
    def update_result(self,message):
        self.mythread.stop_()
        sleep(1)
        self.resultBrowser.append(str(message))
        print(self.mainthread.str_result)
        for i in self.mainthread.str_result:
            print(i)
            self.resultBrowser.append(i)

    def end_calculation(self):
        self.mythread.stop_()
        self.mainthread.stop_()
        sleep(1)
        self.resultBrowser.append('\nCalculation terminated by user...')


    def retranslateUi(self, MainWindow):
        _translate = QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Please input risk free rate(0.035)"))
        self.label_2.setText(_translate("MainWindow", "Choose a running mode(e.g (1)p1f1/(2)p0f1"))
        self.label_3.setText(_translate("MainWindow", "Please input the suffix for result file"))
        self.label_4.setText(_translate("MainWindow", "Please input earliest date(e.g 2018-01-01)"))
        self.label_5.setText(_translate("MainWindow", "Please input latest date(e.g 2018-12-30)"))
        self.startButton.setText(_translate("MainWindow", "Start Analysis"))
        self.label_6.setText(_translate("MainWindow", "Barra Contribution Analysis(v_test)"))
        self.label_7.setText(_translate("MainWindow", " (3)p1f0"))
        self.endButton.setText(_translate("MainWindow", "End Process"))
        self.fileButton.setText(_translate("MainWindow", "Choose a folder"))
        self.menuAnalysis.setTitle(_translate("MainWindow", "Analysis"))
Ejemplo n.º 59
0
    def __init__(self, app, extype, value, tb):
        super(ExceptionWindow, self).__init__()

        self.app = app

        layout = QGridLayout()

        information_label = QLabel()
        information_label.setText(
            _('The CDDA Game Launcher just crashed. An '
              'unhandled exception was raised. Here are the details.'))
        layout.addWidget(information_label, 0, 0)
        self.information_label = information_label

        tb_io = StringIO()
        traceback.print_tb(tb, file=tb_io)
        traceback_content = html.escape(tb_io.getvalue()).replace('\n', '<br>')

        text_content = QTextBrowser()
        text_content.setReadOnly(True)
        text_content.setOpenExternalLinks(True)
        text_content.setHtml(
            _('''
<p>CDDA Game Launcher version: {version}</p>
<p>OS: {os} ({bitness})</p>
<p>Type: {extype}</p>
<p>Value: {value}</p>
<p>Traceback:</p>
<code>{traceback}</code>
''').format(version=html.escape(version),
            extype=html.escape(str(extype)),
            value=html.escape(str(value)),
            os=html.escape(platform.platform()),
            traceback=traceback_content,
            bitness=html.escape(bitness())))

        layout.addWidget(text_content, 1, 0)
        self.text_content = text_content

        report_url = cons.NEW_ISSUE_URL + '?' + urlencode({
            'title':
            _('Unhandled exception: [Enter a title]'),
            'body':
            _('''* Description: [Enter what you did and what happened]
* Version: {version}
* OS: {os} ({bitness})
* Type: `{extype}`
* Value: {value}
* Traceback:
```
{traceback}
```
''').format(version=version,
            extype=str(extype),
            value=str(value),
            traceback=tb_io.getvalue(),
            os=platform.platform(),
            bitness=bitness())
        })

        report_label = QLabel()
        report_label.setOpenExternalLinks(True)
        report_label.setText(
            _('Please help us make a better launcher '
              '<a href="{url}">by reporting this issue on GitHub</a>.').format(
                  url=html.escape(report_url)))
        layout.addWidget(report_label, 2, 0)
        self.report_label = report_label

        exit_button = QPushButton()
        exit_button.setText(_('Exit'))
        exit_button.clicked.connect(lambda: self.app.exit(-100))
        layout.addWidget(exit_button, 3, 0, Qt.AlignRight)
        self.exit_button = exit_button

        self.setLayout(layout)
        self.setWindowTitle(_('Something went wrong'))
        self.setMinimumSize(350, 0)
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(0, 0, 300, 120)
        self.setWindowTitle('Работа с картой')

        # Строка ввода объекта поиска
        self.name_input = QLineEdit(self)
        self.name_input.resize(250, 30)

        # Кнопка поиска
        self.button = QPushButton('Искать', self)
        self.button.resize(50, 30)
        self.button.move(250, 0)
        self.button.clicked.connect(self.run)

        # Кнопка сброса поискового результата
        self.button_restart = QPushButton('Сброс поискового результата', self)
        self.button_restart.resize(200, 30)
        self.button_restart.move(0, 30)
        self.button_restart.clicked.connect(self.restart)

        # Строка для надписи ...
        self.label = QLabel('Полный адрес объекта:', self)
        self.label.resize(200, 20)
        self.label.move(0, 60)

        # Поле вывода полного адреса объекта
        self.label_full_name = QTextBrowser(self)
        self.label_full_name.resize(300, 40)
        self.label_full_name.move(0, 80)

        self.post_ind = QRadioButton('Почтовый индекс', self)
        self.post_ind.move(150, 60)
        self.post_ind.toggled.connect(self.post_index)

        self.postal_code = None
        self.toponym_address = None

    def run(self):
        try:
            if self.name_input.text() != '':
                # Геокодировка объекта, если он задан
                map_location = self.geocode(self.name_input.text())
                if map_location:
                    # Удаление действий до работы
                    for event in pygame.event.get():
                        pass

                    # Инициализация работы карты
                    self.map = App(map_location)
                    self.map.run()
        except Exception as f:
            print(f)

    def restart(self):
        try:
            self.name_input.setText('')
            #делаем экран белым
            screen.fill((255, 255, 255))
            # обновляем экран
            pygame.display.flip()
            if self.toponym_address:
                # останавливаем работу с картой
                self.map.stop()
            # Передача в поле QTextBrowser полного адреса объекта
            if self.post_ind.isChecked(
            ) and self.toponym_address and self.postal_code:
                self.label_full_name.setPlainText(self.toponym_address + ' ' +
                                                  self.postal_code)
            elif self.toponym_address:
                self.label_full_name.setPlainText(self.toponym_address)
            else:
                self.label_full_name.setPlainText('')
            self.toponym_address = None
            self.postal_code = None
        except Exception as f:
            print(f)

    def post_index(self):
        if self.post_ind.isChecked():
            print(8888)

    def geocode(self, toponym_to_find):
        try:
            geocoder_api_server = "http://geocode-maps.yandex.ru/1.x/"

            geocoder_params = {
                "apikey": "40d1649f-0493-4b70-98ba-98533de7710b",
                "geocode": toponym_to_find,
                "format": "json"
            }
            response = requests.get(geocoder_api_server,
                                    params=geocoder_params)

            if not response:
                # обработка ошибочной ситуации
                pass
            # Преобразуем ответ в json-объект
            json_response = response.json()
            # Получаем первый топоним из ответа геокодера.
            toponym = json_response["response"]["GeoObjectCollection"][
                "featureMember"][0]["GeoObject"]
            # Координаты центра топонима:
            toponym_coodrinates = toponym["Point"]["pos"]
            # Долгота и широта:
            toponym_longitude, toponym_lattitude = toponym_coodrinates.split(
                " ")
            # Почтовый индекс
            if self.post_ind.isChecked():
                self.postal_code = toponym["metaDataProperty"][
                    "GeocoderMetaData"]["Address"]["postal_code"]
            # Полный адрес топонима:
            self.toponym_address = toponym["metaDataProperty"][
                "GeocoderMetaData"]["text"]
            # Рамка вокруг объекта:
            envelope = toponym["boundedBy"]["Envelope"]

            # левая, нижняя, правая и верхняя границы из координат углов:
            l, b = envelope["lowerCorner"].split(" ")
            r, t = envelope["upperCorner"].split(" ")

            # Вычисляем полуразмеры по вертикали и горизонтали
            dx = abs(float(l) - float(r)) / 2.0
            dy = abs(float(t) - float(b)) / 2.0

            # Собираем размеры в параметр span
            span = f"{dx},{dy}"
            # Собираем параметры для запроса к StaticMapsAPI:
            map_location = {
                "coords":
                list(map(float, (toponym_longitude, toponym_lattitude))),
                "spn": (span),
            }
            return map_location
        except KeyError:
            print(
                "Уберите галку с почтового индекса, в базе данных этого индекса нет"
            )
        except Exception as f:
            print('Вы ввели несуществующие координаты или название места')
            pass