コード例 #1
0
def make_splash():
    splash_pic = QPixmap('oncat/img/splash.png')
    splash = QSplashScreen(splash_pic, Qt.WindowStaysOnTopHint)
    splash.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
    splash.setEnabled(True)
    splash.show()
    return splash
コード例 #2
0
    def openDialog(self):

        # Only single instance of Plugin
        if self.exists == True: return
        else: self.exists = True

        self.resources = Resources(self.plugin_dir)
        self.dlg = PlanHeatDMMDialog(self)
        self.data = Data(plugin=False)

        splash = QSplashScreen(
            QtGui.QPixmap(self.plugin_dir + os.path.sep +
                          'resources/PlanHeatPrincipal.png'),
            QtCore.Qt.WindowStaysOnTopHint)
        splash.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint
                              | QtCore.Qt.FramelessWindowHint)
        splash.setEnabled(False)
        splash.show()

        # Run the dialog event loop
        self.run()
        splash.finish(self.dlg)
        self.dlg.show()

        result = self.dlg.exec_()

        self.exists = False

        # See if OK was pressed
        if result:
            # Do something useful here
            pass
        else:
            pass
コード例 #3
0
ファイル: quikgui.py プロジェクト: frc604/quikplan-public
def run():
    app = QApplication(sys.argv)
    qtmodern.styles.dark(app)

    app.setWindowIcon(QIcon("resources/icon.ico"))
    if platform.system() == "Windows":
        ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(
            "quikplan")  # App ID for taskbar icon

    splash = QSplashScreen(
        QPixmap("resources/quikplan.png").scaledToHeight(
            400, QtCore.Qt.TransformationMode.SmoothTransformation))
    splash.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint
                          | QtCore.Qt.FramelessWindowHint)
    splash.show()

    main = Window()

    def showWindow():
        splash.close()
        main.show()

    QtCore.QTimer.singleShot(1000, showWindow)

    sys.exit(app.exec_())
コード例 #4
0
def main():
    import time
    os.chdir(civiltools_path)
    app = QtWidgets.QApplication(sys.argv)
    splash_pix = QPixmap("./images/civil-engineering.jpg")
    splash = QSplashScreen(splash_pix, Qt.WindowStaysOnTopHint)
    splash.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
    splash.setEnabled(False)
    # adding progress bar
    progressBar = QProgressBar(splash)
    progressBar.setMaximum(10)
    progressBar.setGeometry(50, splash_pix.height() - 30, splash_pix.width() - 100, 20)

    splash.show()
    splash.showMessage("<h1><font color='DarkRed'>civiltools by Ebrahim Raeyat Roknabadi </font></h1>", Qt.AlignCenter | Qt.AlignCenter, Qt.black)

    for i in range(1, 11):
        progressBar.setValue(i)
        t = time.time()
        while time.time() < t + 0.1:
            app.processEvents()

    # Simulate something that takes time
    time.sleep(1)
    # translator = QtCore.QTranslator()
    # translator.load("main_form.qm")
    # app.installTranslator(translator)
    window = FormWidget()
    window.setWindowTitle(_appname + ' ' + _version)
    window.show()
    splash.finish(window)
    sys.exit(app.exec_())
コード例 #5
0
    def run(self):
        """Run method that performs all the real work"""
        try:
            # locale.setlocale(locale.LC_ALL, 'en-GB')
            # Only single instance of Plugin
            if self.exists == True:
                return
            else:
                self.exists = True

            self.dlg = PlanHeatDMMDialog(self)
            self.resources = Resources(self.plugin_dir)
            self.data = Data(plugin=True)

            # Name of project
            self.data.projectName = master_mapping_config.CURRENT_PROJECT_NAME

            # Redirection
            dmm_folder = os.path.join(master_mapping_config.CURRENT_MAPPING_DIRECTORY,
                                                    master_mapping_config.DMM_FOLDER)
            os.makedirs(dmm_folder, exist_ok=True)
            self.data.outputSaveFile = os.path.join(dmm_folder, master_mapping_config.DMM_PREFIX)


            splash = QSplashScreen(QtGui.QPixmap(self.plugin_dir + os.path.sep + 'resources/PlanHeatPrincipal.png'), QtCore.Qt.WindowStaysOnTopHint)
            splash.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.FramelessWindowHint)
            splash.setEnabled(False)
            splash.show()

            # Run the dialog event loop
            initWindowStatus(self)
            self.resources.loadAppResources()
            initWindowbehavior(self)

            # Deserialize the module
            DMMSerializer.deserialize(self)

            splash.finish(self.dlg)

            # show the dialog
            self.dlg.show()

            # Run the dialog event loop
            result = self.dlg.exec_()

            self.exists = False

            # See if OK was pressed
            if result:
                # Do something useful here -
                pass
            else:
                pass



        except Exception as e:
            self.exists = False
            print(str(e))
コード例 #6
0
ファイル: dialogs.py プロジェクト: dkratzert/FinalCif
def show_splash(text: str) -> QSplashScreen:
    splash = QSplashScreen()
    splash_font = QFont()
    # splashFont.setFamily("Arial")
    splash_font.setBold(True)
    splash_font.setPixelSize(16)
    splash_font.setStretch(120)
    splash.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.SplashScreen)
    splash = QSplashScreen()
    splash.show()
    splash.setStyleSheet("background-color:#fcc77c;")
    splash.setFont(splash_font)
    splash.setMinimumWidth(400)
    splash.setMaximumHeight(100)
    splash.showMessage(text, alignment=Qt.AlignCenter, )
    return splash
コード例 #7
0
def main():
    app = QApplication(sys.argv)
    app.setStyle("Fusion")
    app.setStyleSheet("QPushButton { margin: 200ex; }")
    dark_palette = QPalette()
    dark_palette.setColor(QPalette.Window, QColor(53, 53, 53))
    dark_palette.setColor(QPalette.WindowText, Qt.white)
    dark_palette.setColor(QPalette.Base, QColor(25, 25, 25))
    dark_palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
    dark_palette.setColor(QPalette.ToolTipBase, Qt.white)
    dark_palette.setColor(QPalette.ToolTipText, Qt.white)
    dark_palette.setColor(QPalette.Text, Qt.white)
    dark_palette.setColor(QPalette.Button, QColor(53, 53, 53))
    dark_palette.setColor(QPalette.ButtonText, Qt.white)
    dark_palette.setColor(QPalette.BrightText, Qt.red)
    dark_palette.setColor(QPalette.Link, QColor(42, 130, 218))
    dark_palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
    dark_palette.setColor(QPalette.HighlightedText, Qt.black)
    app.setPalette(dark_palette)
    splash_pix = QPixmap('splash.png')
    splash = QSplashScreen(splash_pix, Qt.WindowStaysOnTopHint)
    splash.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
    splash.setEnabled(False)
    progressBar = QProgressBar(splash)
    progressBar.setMaximum(10)
    progressBar.setGeometry(0,
                            splash_pix.height() - 50, splash_pix.width(), 20)

    splash.show()
    splash.showMessage("<h1><font color='green'>Welcome!</font></h1>",
                       Qt.AlignTop | Qt.AlignCenter, Qt.black)

    for i in range(1, 11):
        progressBar.setValue(i)
        t = time.time()
        while time.time() < t + 0.1:
            app.processEvents()

    time.sleep(2)
    splash.close()
    controller = Controller()
    controller.show_first()
    sys.exit(app.exec_())
コード例 #8
0
ファイル: main.py プロジェクト: thelegend831/FarSeer-NMR
def run(argv):
    app = QApplication(argv)
    import argparse

    parser = argparse.ArgumentParser(description='Run Farseer')
    parser.add_argument('--config',
                        metavar='path',
                        required=False,
                        help='Farseer Configuration File')
    splash_file = os.path.join(os.pardir, 'gui', 'images', 'splash-screen.png')
    splash_pix = QtGui.QPixmap(splash_file)
    args = parser.parse_args()
    splash = QSplashScreen(splash_pix, QtCore.Qt.WindowStaysOnTopHint)
    splash.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint
                          | QtCore.Qt.FramelessWindowHint)
    splash.setEnabled(False)
    splash.show()
    screen_resolution = app.desktop().screenGeometry()

    gui_settings, stylesheet = gui_utils.deliver_settings(screen_resolution)

    ex = Main(gui_settings=gui_settings, config=args.config)
    splash.finish(ex)
    font_file = os.path.join(os.pardir, 'gui', 'SinkinSans',
                             'SinkinSans-400Regular.otf')
    font_id = QtGui.QFontDatabase.addApplicationFont(font_file)
    app.setStyleSheet(stylesheet)
    ex.show()
    ex.raise_()
    execution = app.exec_()

    del ex
    del app

    sys.exit(execution)
    return
コード例 #9
0
        sub = host.split(".")
        subnet = sub[0] + "." + sub[1] + "." + sub[2]

        array = [host, subnet]
        return array

if __name__ == '__main__':

    app = QApplication(sys.argv)

    #--- setting darkstyle sheet on main window
    dark_stylesheet = qdarkstyle.load_stylesheet_pyqt5()
    app.setStyleSheet(dark_stylesheet)

    #--- splash process
    splash_pix = QPixmap('logo.ico')
    splash = QSplashScreen(splash_pix, Qt.WindowStaysOnTopHint)
    splash.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
    splash.setEnabled(False)
    progressBar = QProgressBar(splash)
    progressBar.setGeometry(0,
                            splash_pix.height() - 50, splash_pix.width(), 20)

    splash.show()
    splash.showMessage(
        "<h1><font color='green'>Coinpaign Scanning...</font></h1>",
        Qt.AlignTop | Qt.AlignCenter, Qt.black)
    #-------------------
    ex = App()
    sys.exit(app.exec_())
コード例 #10
0
    sys._excepthook = sys.excepthook
    sys.excepthook = my_exception_hook

    settings = UserSettings()
    settings.load()

    app = QApplication(sys.argv)
    app.setAttribute(Qt.AA_DontCreateNativeWidgetSiblings)
    # filter = SuperFilter(app)
    # app.installEventFilter(filter)
    app.setWindowIcon(QIcon("qt_ui/images/main.png"))
    set_attributes(app)
    set_style_sheet(
        app, "qt_ui/themes/qt_stylesheet_very_dark.css")  #settings.THEME_PATH

    screen = app.desktop().screenGeometry()

    pixmap = QPixmap("qt_ui/images/loading_screen_round.png")
    pixmap = pixmap.scaled(screen.height() / 2,
                           screen.height() / 2,
                           transformMode=Qt.SmoothTransformation)

    splash = QSplashScreen(pixmap)
    splash.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.SplashScreen)
    splash.show()
    app.processEvents()

    main = MainWindow(splash)
    MAIN_WINDOW = main
    sys.exit(app.exec_())
コード例 #11
0
ファイル: main.py プロジェクト: pipibear/web-browser
                    ), QMessageBox.Ok, QMessageBox.Ok)
                sys.exit()
            else:
                localServer = QLocalServer()
                localServer.listen(serverName)
        except Exception as e:
            QMessageBox.critical(None, Util.lang('alert', 'Alert'),
                                 e.__str__(), QMessageBox.Ok, QMessageBox.Ok)
            sys.exit()
    #print(Util.timestamp() - startupTime)

    #splash
    splash = None
    if Util.getConfigValue('showSplash') and os.path.exists(splashPath):
        splash = QSplashScreen(QPixmap(splashPath))
        splash.setWindowFlags(Qt.SplashScreen | Qt.FramelessWindowHint
                              | Qt.Tool)
        splash.showMessage("Loading... 0%", Qt.AlignHCenter | Qt.AlignBottom,
                           Qt.white)
        splash.show()
        qApp.processEvents()

    Util.loadTheme()

    #main
    Window.Margins = 5 if Util.getConfigValue('resizable') else 0
    Window.StayOnTop = Util.getConfigValue('windowStayOnTop')
    mainWnd = MainWindow()

    mainWnd.setWidget(WebWindow(mainWnd))
    mainWnd.loadData(splash)
コード例 #12
0
ファイル: main.py プロジェクト: jasonbutt/hivedesktop
    def __init__(self):
        super(QMainWindow, self).__init__()
        # Set up the user interface from Designer.
        self.setupUi(self)

        self.setAccessibleName("Hive Desktop")
        self.redrawLock = Lock()
        self.updateLock = Lock()

        self.optionsDialog = dialogs.Options(self)
        self.aboutDialog = dialogs.About(
            self,
            copyright='holger80',
            programName='Hive Desktop',
            version=VERSION,
            website='https://github.com/holgern/hivedesktop',
            websiteLabel='Github',
            comments=
            '"Welcome to Hive desktop!\n This is the first release for testing qt5.\n Please vote for holger80 as witness, if you like this :).',
            licenseName='GPL-3.0',
            # licenseUrl=helpers.joinpath_to_cwd('LICENSE').as_uri(),
            authors=('holger80', ),
            # dependencies=[l.strip() for l in requirements.readlines()],
        )
        self.mdrenderer = MDRenderer(str(helpers.joinpath_to_cwd('themes')))

        # tmpfile = helpers.mktemp(prefix='hivedesktop', suffix='.html')

        self.post = {"body": "##test", "authorperm": "@test/test"}
        self.thread = threads.MDThread(self)

        # self.webview.url = tmpfile.as_uri()

        self.feedListWidget.currentRowChanged.connect(
            self.change_displayed_post, Qt.QueuedConnection)

        self.timer = QTimer()
        self.timer.timeout.connect(self.refresh_account_thread)

        self.timer2 = QTimer()
        self.timer2.timeout.connect(self.update_account_hist_thread)

        self.timer3 = QTimer()
        self.timer3.timeout.connect(self.update_account_feed_thread)

        self.cache_path = QStandardPaths.writableLocation(
            QStandardPaths.CacheLocation)
        self.db_type = "shelve"
        self.feed = []
        self.post = None
        # Get settings
        settings = QSettings()
        # Get checkbox state with speciying type of checkbox:
        # type=bool is a replacement of toBool() in PyQt5
        check_state = settings.value(SETTINGS_TRAY, True, type=bool)
        hist_info_check_state = settings.value(SETTINGS_HIST_INFO,
                                               True,
                                               type=bool)
        account_state = settings.value(SETTINGS_ACCOUNT, "", type=str)
        # Set state
        self.accountHistNotificationCheckBox.setChecked(hist_info_check_state)
        self.autoRefreshCheckBox.setChecked(check_state)
        if check_state:
            self.timer.start(5000)
            self.timer2.start(15000)
            self.timer3.start(60000)
        self.accountLineEdit.setText(account_state)
        # connect the slot to the signal by clicking the checkbox to save the state settings
        self.autoRefreshCheckBox.clicked.connect(self.save_check_box_settings)
        self.accountHistNotificationCheckBox.clicked.connect(
            self.save_check_box_settings)
        self.accountLineEdit.editingFinished.connect(
            self.save_account_settings)
        self.actionAbout.triggered.connect(self.about)
        self.actionOptions.triggered.connect(self.options)
        self.threadpool = QThreadPool()

        self.minimizeAction = QAction("Mi&nimize", self, triggered=self.hide)
        self.maximizeAction = QAction("Ma&ximize",
                                      self,
                                      triggered=self.showMaximized)
        self.restoreAction = QAction("&Restore",
                                     self,
                                     triggered=self.showNormal)

        menu = QMenu()
        menu.addAction(self.minimizeAction)
        menu.addAction(self.maximizeAction)
        menu.addAction(self.restoreAction)
        menu.addSeparator()
        # aboutAction = menu.addAction("about")
        # aboutAction.triggered.connect(self.about)
        exitAction = menu.addAction("Exit")
        exitAction.triggered.connect(self.closeApp)

        self.tray = QSystemTrayIcon(QIcon(':/icons/icon.ico'))

        self.tray.setContextMenu(menu)

        self.tray.setToolTip("Hive Desktop!")
        self.tray.setObjectName("Hive Desktop")
        self.setWindowTitle("Hive Desktop")
        self.tray.show()

        splash_pix = QPixmap(':/icons/splash.png')
        splash = QSplashScreen(splash_pix, Qt.WindowStaysOnTopHint)
        splash.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
        splash.setEnabled(False)

        splash.show()
        splash.showMessage("<h1><font color='green'>starting...</font></h1>",
                           Qt.AlignTop | Qt.AlignCenter, Qt.black)

        account = account_state
        nodelist = NodeList()
        nodelist.update_nodes()
        self.stm = Steem(node=nodelist.get_nodes(hive=True))
        if account != "":
            try:
                self.hist_account = Account(account, steem_instance=self.stm)
            except:
                self.hist_account = None
        else:
            self.hist_account = None
        if self.hasFocus is not None:
            self.init_new_account()
        # self.button.clicked.connect(lambda: self.text.setText(_get_quote(self.hist_account, self.stm)))
        self.refreshPushButton.clicked.connect(self.refresh_account_thread)
        self.refreshPushButton.clicked.connect(self.update_account_hist_thread)
        self.accountLineEdit.editingFinished.connect(self.update_account_info)
        splash.deleteLater()
        self.tray.showMessage("Ready", "Account history loaded!")
コード例 #13
0
class proxyMaker(QWidget):
    DEFAULT_LOC = 'ord1'

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

    def initUI(self):
        serverNames = ['GigaNet', 'UpCloud', 'Vultr', 'NetNut']
        actionNames = ['Create', 'Info', 'Destroy', 'Save and Quit']

        # Input Horizontal
        hbox = QVBoxLayout(self)
        splitter = QSplitter(self)
        splitter.setOrientation(Qt.Vertical)

        # Top Horizontal
        top = QFrame(splitter)
        top.setFrameShape(QFrame.StyledPanel)
        # Bottom Horizontal
        bottom = QFrame(splitter)
        bottom.setFrameShape(QFrame.StyledPanel)

        # Inputs
        # Server, NumberProxies, Location, Action
        inputBox = QHBoxLayout(top)
        serverSplitter = QSplitter(top)
        serverSplitter.setOrientation(Qt.Horizontal)
        numberSplitter = QSplitter(top)
        numberSplitter.setOrientation(Qt.Horizontal)
        locationSplitter = QSplitter(top)
        locationSplitter.setOrientation(Qt.Horizontal)
        actionSplitter = QSplitter(top)
        actionSplitter.setOrientation(Qt.Horizontal)

        # Server, NumberProxies, Location, Action Verticals
        serverBox = QFrame(serverSplitter)
        serverBox.setFrameShape(QFrame.StyledPanel)
        numberBox = QFrame(numberSplitter)
        numberBox.setFrameShape(QFrame.StyledPanel)
        locationBox = QFrame(locationSplitter)
        locationBox.setFrameShape(QFrame.StyledPanel)
        actionBox = QFrame(actionSplitter)
        actionBox.setFrameShape(QFrame.StyledPanel)

        ### Server
        self.serverLayout = QVBoxLayout(serverBox)
        self.serverButtons = [QPushButton(x) for x in serverNames]
        [x.setCheckable(True) for x in self.serverButtons]
        self.serverButtonsGroup = QButtonGroup()
        [self.serverButtonsGroup.addButton(x) for x in self.serverButtons]
        self.serverButtonsGroup.setExclusive(True)

        self.serverButtons[0].clicked.connect(self.giganet)
        self.serverButtons[1].clicked.connect(self.upcloud)
        self.serverButtons[2].clicked.connect(self.vultr)
        self.serverButtons[3].clicked.connect(self.netnut)

        # Number and Location Box
        generalInfoLayout = QVBoxLayout(numberBox)
        self.numberDisplay = QPlainTextEdit()
        self.numberDisplay.setPlaceholderText("Number of proxies.")
        self.locationDisplay = QPlainTextEdit()
        self.locationDisplay.setPlaceholderText("Location of proxies.")

        # Server specific requirements
        specificInfoLayout = QVBoxLayout(locationBox)
        self.gigaInfo = ['APIKEY', 'APIHASH']
        self.gigaInfo[0] = QPlainTextEdit()
        self.gigaInfo[0].setPlaceholderText("GigaNet API KEY.")
        self.gigaInfo[0].setVisible(False)
        self.gigaInfo[1] = QPlainTextEdit()
        self.gigaInfo[1].setPlaceholderText("GigaNet API HASH.")
        self.gigaInfo[1].setVisible(False)

        self.ucInfo = ['ucUSR', 'ucPSWD']
        self.ucInfo[0] = QPlainTextEdit()
        self.ucInfo[0].setPlaceholderText("UpCloud Username.")
        self.ucInfo[0].setVisible(False)
        self.ucInfo[1] = QPlainTextEdit()
        self.ucInfo[1].setPlaceholderText("UpCloud Password.")
        self.ucInfo[1].setVisible(False)

        self.vInfo = ['vtoken']
        self.vInfo[0] = QPlainTextEdit()
        self.vInfo[0].setPlaceholderText("Vultr.")
        self.vInfo[0].setVisible(False)

        self.nnInfo = ['nnUSR', 'nnPSWD']
        self.nnInfo[0] = QPlainTextEdit()
        self.nnInfo[0].setPlaceholderText("NetNut Username.")
        self.nnInfo[0].setVisible(False)
        self.nnInfo[1] = QPlainTextEdit()
        self.nnInfo[1].setPlaceholderText("NetNut Password.")
        self.nnInfo[1].setVisible(False)

        # Action Box
        self.actionLayout = QVBoxLayout(actionBox)
        self.actionButtons = [QPushButton(x) for x in actionNames]
        [x.setCheckable(True) for x in self.actionButtons]
        self.actionButtonsGroup = QButtonGroup()
        [self.actionButtonsGroup.addButton(x) for x in self.actionButtons]
        self.actionButtonsGroup.setExclusive(True)

        self.actionButtons[0].clicked.connect(self.create)
        self.actionButtons[1].clicked.connect(self.info)
        self.actionButtons[2].clicked.connect(self.destroy)
        self.actionButtons[3].clicked.connect(self.quit)

        # Output
        # Log, Verticals
        outputBox = QHBoxLayout(bottom)
        logSplitter = QSplitter(bottom)
        logSplitter.setOrientation(Qt.Horizontal)
        proxySplitter = QSplitter(bottom)
        proxySplitter.setOrientation(Qt.Horizontal)

        # Log, Proxy Verticals
        logBox = QFrame(logSplitter)
        logBox.setFrameShape(QFrame.StyledPanel)
        proxyBox = QFrame(proxySplitter)
        proxyBox.setFrameShape(QFrame.StyledPanel)

        # Log
        logLayout = QVBoxLayout(logBox)
        self.logDisplay = QPlainTextEdit()
        self.logDisplay.setReadOnly(True)
        self.logDisplay.setPlainText("Log will display here.")

        # Proxy
        proxyLayout = QVBoxLayout(proxyBox)
        self.proxyDisplay = QPlainTextEdit()
        self.proxyDisplay.setPlainText("Proxies:")
        self.proxyDisplay.setReadOnly(True)

        # Add widgets into layout
        [self.serverLayout.addWidget(x) for x in self.serverButtons]
        [self.actionLayout.addWidget(x) for x in self.actionButtons]

        generalInfoLayout.addWidget(self.numberDisplay)
        generalInfoLayout.addWidget(self.locationDisplay)

        [
            specificInfoLayout.addWidget(self.gigaInfo[i])
            for i in range(len(self.gigaInfo))
        ]
        [
            specificInfoLayout.addWidget(self.ucInfo[i])
            for i in range(len(self.ucInfo))
        ]
        [
            specificInfoLayout.addWidget(self.vInfo[i])
            for i in range(len(self.vInfo))
        ]
        [
            specificInfoLayout.addWidget(self.nnInfo[i])
            for i in range(len(self.nnInfo))
        ]

        logLayout.addWidget(self.logDisplay)
        proxyLayout.addWidget(self.proxyDisplay)

        inputBox.addWidget(serverSplitter)
        inputBox.addWidget(numberSplitter)
        inputBox.addWidget(locationSplitter)
        inputBox.addWidget(actionSplitter)
        outputBox.addWidget(logSplitter)
        outputBox.addWidget(proxySplitter)
        hbox.addWidget(splitter)

        # Restore Information from data/info.txt if exists
        if os.path.isfile("data/info.txt"):
            print("Info.txt found.")
            with open("data/info.txt") as fh:
                data = json.load(fh)
                for dataHandler in data['giganet']:
                    self.gigaInfo[0].setPlainText(dataHandler['apikey'])
                    self.gigaInfo[1].setPlainText(dataHandler['apihash'])
                for dataHandler in data['upcloud']:
                    self.ucInfo[0].setPlainText(dataHandler['ucuser'])
                    self.ucInfo[1].setPlainText(dataHandler['ucpass'])
                for dataHandler in data['vultr']:
                    self.vInfo[0].setPlainText(dataHandler['vtoken'])
                for dataHandler in data['netnut']:
                    self.nnInfo[0].setPlainText(dataHandler['nnuser'])
                    self.nnInfo[1].setPlainText(dataHandler['nnpass'])

    def initSplashScreen(self):
        splash_pix = QPixmap('data/image/loading.jpg')
        self.splash = QSplashScreen(splash_pix)
        self.splash.setWindowFlags(Qt.WindowStaysOnTopHint
                                   | Qt.FramelessWindowHint)
        self.splash.setEnabled(False)

    def giganet(self):
        print("Giganet")
        [self.gigaInfo[i].setVisible(True) for i in range(len(self.gigaInfo))]
        [self.ucInfo[i].setVisible(False) for i in range(len(self.ucInfo))]
        [self.vInfo[i].setVisible(False) for i in range(len(self.vInfo))]
        [self.nnInfo[i].setVisible(False) for i in range(len(self.nnInfo))]
        self.locationDisplay.setDisabled(False)

    def upcloud(self):
        print("UpCloud")
        [self.gigaInfo[i].setVisible(False) for i in range(len(self.gigaInfo))]
        [self.ucInfo[i].setVisible(True) for i in range(len(self.ucInfo))]
        [self.vInfo[i].setVisible(False) for i in range(len(self.vInfo))]
        [self.nnInfo[i].setVisible(False) for i in range(len(self.nnInfo))]
        self.locationDisplay.setDisabled(False)

    def vultr(self):
        print("Vultr")
        [self.gigaInfo[i].setVisible(False) for i in range(len(self.gigaInfo))]
        [self.ucInfo[i].setVisible(False) for i in range(len(self.ucInfo))]
        [self.vInfo[i].setVisible(True) for i in range(len(self.vInfo))]
        [self.nnInfo[i].setVisible(False) for i in range(len(self.nnInfo))]
        self.locationDisplay.setDisabled(False)

    def netnut(self):
        print("NetNut")
        [self.gigaInfo[i].setVisible(False) for i in range(len(self.gigaInfo))]
        [self.ucInfo[i].setVisible(False) for i in range(len(self.ucInfo))]
        [self.vInfo[i].setVisible(False) for i in range(len(self.vInfo))]
        [self.nnInfo[i].setVisible(True) for i in range(len(self.nnInfo))]
        self.locationDisplay.setDisabled(True)

    def enableAll(self):
        # Enable all buttons and text boxes
        [x.setDisabled(False) for x in self.serverButtons]
        [x.setDisabled(False) for x in self.actionButtons]
        self.numberDisplay.setDisabled(False)
        self.locationDisplay.setDisabled(False)
        [
            self.gigaInfo[i].setDisabled(False)
            for i in range(len(self.gigaInfo))
        ]
        [self.ucInfo[i].setDisabled(False) for i in range(len(self.ucInfo))]
        [self.vInfo[i].setDisabled(False) for i in range(len(self.vInfo))]
        [self.nnInfo[i].setDisabled(False) for i in range(len(self.nnInfo))]
        self.logDisplay.setDisabled(False)
        self.proxyDisplay.setDisabled(False)

    def disableAll(self):
        # Disable all buttons and text boxes
        [x.setDisabled(True) for x in self.serverButtons]
        [x.setDisabled(True) for x in self.actionButtons]
        self.numberDisplay.setDisabled(True)
        self.locationDisplay.setDisabled(True)
        [self.gigaInfo[i].setDisabled(True) for i in range(len(self.gigaInfo))]
        [self.ucInfo[i].setDisabled(True) for i in range(len(self.ucInfo))]
        [self.vInfo[i].setDisabled(True) for i in range(len(self.vInfo))]
        [self.nnInfo[i].setDisabled(True) for i in range(len(self.nnInfo))]
        self.logDisplay.setDisabled(True)
        self.proxyDisplay.setDisabled(True)

    def threadHelper(self, func, args, res):
        res.append(func(*args))

    def threadHelperNoArgs(self, func):
        func()

    def create(self):
        print("Create")

        if self.serverButtons[0].isChecked() \
                and len(self.numberDisplay.toPlainText()) != 0 \
                and len(self.locationDisplay.toPlainText()) != 0:

            print("Giga create")
            numProxies = self.numberDisplay.toPlainText()
            serverLocation = self.locationDisplay.toPlainText()
            gigaKey = self.gigaInfo[0].toPlainText()
            gigaHash = self.gigaInfo[1].toPlainText()
            self.logDisplay.setPlainText("Giganet chosen. Creating ...")
            self.logDisplay.appendPlainText(
                "Number of Proxies: {}".format(numProxies))
            self.logDisplay.appendPlainText(
                "Server Location: {}".format(serverLocation))

            # Mutliple Gigenet accounts (key, hash) split by ','
            if ',' in gigaKey or ',' in gigaHash:
                gigaKey = gigaKey.split(",")
                gigaHash = gigaHash.split(",")
            else:
                gigaKey = [gigaKey]
                gigaHash = [gigaHash]

            keyHash = {}

            for i in range(0, len(gigaKey)):
                keyHash["gigaKey{0}".format(i)] = (
                    gigaKey[i],
                    gigaHash[i],
                )
                self.taskGigaCreate(i, keyHash, numProxies, serverLocation)

        elif self.serverButtons[1].isChecked() \
                and len(self.numberDisplay.toPlainText()) != 0:

            print("Upcloud create")
            numProxies = self.numberDisplay.toPlainText()
            ucUsr = self.ucInfo[0].toPlainText()
            ucPswd = self.ucInfo[1].toPlainText()
            self.logDisplay.setPlainText("UpCloud chosen. Creating ...")
            self.logDisplay.appendPlainText(
                "Number of Proxies: {}".format(numProxies))
            self.logDisplay.appendPlainText(
                "Server Location preset as us-chi1 ")

            res = []
            ucApiInit(ucUsr, ucPswd)
            thread = threading.Thread(target=self.threadHelper,
                                      args=(ucApiCreate, (numProxies, ), res))
            thread.start()
            thread.join()

            # Show splash screen when thread is still running.
            stillAlive = 0
            while thread.is_alive():
                if not stillAlive:
                    self.splash.show()
                    self.disableAll()
                    # When QSplashScreen is running, there should be an event loop running
                    # processEvents forces app to process all events
                    app.processEvents()
                    stillAlive = 1

            self.splash.close()
            self.enableAll()

            logFile, infoFile = ucApiReturnFileName()
            logThread = displayOutput(logFile, self.logDisplay)
            proxyThread = displayOutput(infoFile, self.proxyDisplay)

        elif self.serverButtons[2].isChecked() \
                and len(self.numberDisplay.toPlainText()) != 0 \
                and len(self.locationDisplay.toPlainText()) != 0:

            print("Vultr")

        elif self.serverButtons[3].isChecked() \
                and len(self.numberDisplay.toPlainText()) != 0:

            print("NetNut")
            numProxies = self.numberDisplay.toPlainText()
            self.logDisplay.setPlainText("NetNut chosen. Creating ...")
            self.logDisplay.appendPlainText(
                "Number of Proxies: {}".format(numProxies))
            nnUsername = self.nnInfo[0].toPlainText()
            nnPassword = self.nnInfo[1].toPlainText()

            # Run API function in a thread and return value store in res.
            res = []
            nnApiInit()
            thread = threading.Thread(target=self.threadHelper,
                                      args=(nnApiCreate, (
                                          numProxies,
                                          nnUsername,
                                          nnPassword,
                                      ), res))
            thread.start()

            # Show splash screen when thread is still running.
            stillAlive = 0
            while thread.is_alive():
                if not stillAlive:
                    self.splash.show()
                    self.disableAll()
                    # When QSplashScreen is running, there should be an event loop running
                    # processEvents forces app to process all events
                    app.processEvents()
                    stillAlive = 1

            self.splash.close()
            self.enableAll()

            logFile, infoFile = nnApiReturnFileName()

            logThread = displayThread(logFile, self.logDisplay)
            proxyThread = displayThread(infoFile, self.proxyDisplay)
            logThread.start()
            proxyThread.start()

        else:
            print("Check input")

    def info(self):
        print("Info")

        if self.serverButtons[0].isChecked():
            print("Giga Info")
            serverLocation = self.locationDisplay.toPlainText()
            gigaKey = self.gigaInfo[0].toPlainText()
            gigaHash = self.gigaInfo[1].toPlainText()
            self.logDisplay.setPlainText("Giganet chosen. Getting Info ...")

            # Mutliple Gigenet accounts (key, hash) split by ','
            if ',' in gigaKey or ',' in gigaHash:
                gigaKey = gigaKey.split(",")
                gigaHash = gigaHash.split(",")
            else:
                gigaKey = [gigaKey]
                gigaHash = [gigaHash]

            keyHash = {}

            for i in range(0, len(gigaKey)):
                keyHash["gigaKey{0}".format(i)] = (
                    gigaKey[i],
                    gigaHash[i],
                )
                self.taskGigaInfo(i, keyHash, serverLocation)

        else:
            print("Check input")

    def destroy(self):
        print("Destroy")

        if self.serverButtons[0].isChecked():
            print("Giga destroy")
            self.logDisplay.setPlainText("Giganet chosen. Destroying ...")
            serverLocation = self.locationDisplay.toPlainText()
            gigaKey = self.gigaInfo[0].toPlainText()
            gigaHash = self.gigaInfo[1].toPlainText()

            # Mutliple Gigenet accounts (key, hash) split by ','
            if ',' in gigaKey or ',' in gigaHash:
                gigaKey = gigaKey.split(",")
                gigaHash = gigaHash.split(",")
            else:
                gigaKey = [gigaKey]
                gigaHash = [gigaHash]

            keyHash = {}

            for i in range(0, len(gigaKey)):
                keyHash["gigaKey{0}".format(i)] = (
                    gigaKey[i],
                    gigaHash[i],
                )
                self.taskGigaDestroy(i, keyHash, serverLocation)

        elif self.serverButtons[1].isChecked():
            print("Upcloud destroy")
            ucUsr = self.ucInfo[0].toPlainText()
            ucPswd = self.ucInfo[1].toPlainText()
            self.logDisplay.setPlainText("UpCloud chosen. destroy ...")

            res = []
            ucApiInit(ucUsr, ucPswd)
            ucApiDestroy()

            logFile, infoFile = ucApiReturnFileName()
            logThread = displayOutput(logFile, self.logDisplay)
            proxyThread = displayOutput(infoFile, self.proxyDisplay)

        else:
            print("Check input")

        if sys.platform == 'linux':
            os.system("rm *.txt")

    def quit(self):
        data = {}
        data['giganet'] = []
        data['giganet'].append({
            'apikey': self.gigaInfo[0].toPlainText(),
            'apihash': self.gigaInfo[1].toPlainText()
        })
        data['upcloud'] = []
        data['upcloud'].append({
            'ucuser': self.ucInfo[0].toPlainText(),
            'ucpass': self.ucInfo[1].toPlainText()
        })
        data['vultr'] = []
        data['vultr'].append({'vtoken': self.vInfo[0].toPlainText()})
        data['netnut'] = []
        data['netnut'].append({
            'nnuser': self.nnInfo[0].toPlainText(),
            'nnpass': self.nnInfo[1].toPlainText()
        })

        with open('data/info.txt', 'w') as fh:
            json.dump(data, fh)

        QApplication.quit()

    def taskGigaCreate(self, idx, keyHashDict, numProxies, serverLocation):
        keyHash = keyHashDict["gigaKey{0}".format(idx)]
        print("[DEBUG] Runnning {}: {} | {} | {} | {} | {}".format(
            idx, keyHashDict["gigaKey{0}".format(idx)], keyHash[0], keyHash[1],
            numProxies, serverLocation))
        # Run API function in a thread and return value store in res.
        res = []
        gigaApiInit(serverLocation, keyHash[0], keyHash[1])
        thread = threading.Thread(target=self.threadHelper,
                                  args=(gigaApiCreate, (
                                      numProxies,
                                      serverLocation,
                                  ), res))
        thread.start()
        thread.join()

        # Show splash screen when thread is still running.
        stillAlive = 0
        while thread.is_alive():
            if not stillAlive:
                self.splash.show()
                self.disableAll()
                # When QSplashScreen is running, there should be an event loop running
                # processEvents forces app to process all events
                app.processEvents()
                stillAlive = 1

        self.splash.close()
        self.enableAll()

        logFile, infoFile = gigaApiReturnFileName()
        logThread = displayOutput(logFile, self.logDisplay)
        proxyThread = displayOutput(infoFile, self.proxyDisplay)

    def taskGigaInfo(self, idx, keyHashDict, serverLocation):
        keyHash = keyHashDict["gigaKey{0}".format(idx)]
        print("[DEBUG]Runnning {}: {} | {} | {} | {}".format(
            idx, keyHashDict["gigaKey{0}".format(idx)], keyHash[0], keyHash[1],
            serverLocation))

        gigaApiInit(serverLocation, keyHash[0], keyHash[1])
        # Run API function in a thread and return value store in res.
        thread = threading.Thread(target=self.threadHelperNoArgs,
                                  args=(gigaApiInfo, ))
        thread.start()

        # Show splash screen when thread is still running.
        stillAlive = 0
        while thread.is_alive():
            if not stillAlive:
                self.splash.show()
                self.disableAll()
                # When QSplashScreen is running, there should be an event loop running
                # processEvents forces app to process all events
                app.processEvents()
                stillAlive = 1

        self.splash.close()
        self.enableAll()

        logFile, infoFile = gigaApiReturnFileName()

        logThread = displayOutput(logFile, self.logDisplay)
        proxyThread = displayOutput(infoFile, self.proxyDisplay)

    def taskGigaDestroy(self, idx, keyHashDict, serverLocation=DEFAULT_LOC):
        keyHash = keyHashDict["gigaKey{0}".format(idx)]
        print("[DEBUG] Runnning {}: {} | {} | {} | {}".format(
            idx, keyHashDict["gigaKey{0}".format(idx)], keyHash[0], keyHash[1],
            serverLocation))

        gigaApiInit(serverLocation, keyHash[0], keyHash[1])
        # Run API function in a thread and return value store in res.
        thread = threading.Thread(target=self.threadHelperNoArgs,
                                  args=(gigaApiDestroy, ))
        thread.start()

        # Show splash screen when thread is still running.
        stillAlive = 0
        while thread.is_alive():
            if not stillAlive:
                self.splash.show()
                self.disableAll()
                # When QSplashScreen is running, there should be an event loop running
                # processEvents forces app to process all events
                app.processEvents()
                stillAlive = 1

        self.splash.close()
        self.enableAll()

        logFile, infoFile = gigaApiReturnFileName()

        logThread = displayOutput(logFile, self.logDisplay)
コード例 #14
0
ファイル: PhyloSuite.py プロジェクト: schnappi-wkl/PhyloSuite
def start():
    app = QSingleApplication(sys.argv)
    splash = QSplashScreen(
        QPixmap(":/picture/resourses/start.jpg"))
    with open(thisPath + os.sep + 'style.qss', encoding="utf-8", errors='ignore') as f:
        qss_file = f.read()
    splash.setWindowFlags(Qt.Window)
    font_size = 13 if platform.system().lower() == "windows" else 15
    splash.setFont(QFont('Arial', font_size))
    splash.setStyleSheet(qss_file)
    icon = QIcon(":/picture/resourses/windowIcon.png")
    splash.setWindowIcon(icon)
    splash.show()
    app.processEvents()
    splash.showMessage("Checking if the program is already running...", Qt.AlignBottom, Qt.black)
    if platform.system().lower() == "windows":
        multiprocessing.freeze_support() # windows必须调用这个,不然会出错
    # 异常调试
    import cgitb
    sys.excepthook = cgitb.Hook(1, None, 5, sys.stderr, 'text')
    ##为了存路径到系统
    QApplication.setApplicationName("PhyloSuite_settings")
    QApplication.setOrganizationName("PhyloSuite")
    QSettings.setDefaultFormat(QSettings.IniFormat)
    path_settings = QSettings()
    path_settings.setValue("thisPath", thisPath)
    os.chdir(thisPath)
    dialog = QDialog()
    dialog.setStyleSheet(qss_file)
    # 异常处理
    def handle_exception(exc_type, exc_value, exc_traceback):
        rgx = re.compile(r'PermissionError.+?[\'\"](.+\.csv)[\'\"]')
        if issubclass(exc_type, KeyboardInterrupt):
            return sys.__excepthook__(exc_type, exc_value, exc_traceback)
        exception = str("".join(traceback.format_exception(
            exc_type, exc_value, exc_traceback)))
        print(exception)
        if rgx.search(exception):
            #忽略csv未关闭的报错
            return
        msg = QMessageBox(dialog)
        msg.setIcon(QMessageBox.Critical)
        msg.setText(
            'The program encountered an unforeseen problem, please report the bug at <a href="https://github.com/dongzhang0725/PhyloSuite/issues">https://github.com/dongzhang0725/PhyloSuite/issues</a> '
            'or send an email with the detailed traceback to [email protected]')
        msg.setWindowTitle("Error")
        msg.setDetailedText(exception)
        msg.setStandardButtons(QMessageBox.Ok)
        msg.exec_()
    sys.excepthook = handle_exception
    # 避免重复运行程序
    if app.isRunning():
        QMessageBox.information(
            dialog,
            "PhyloSuite",
            "<p style='line-height:25px; height:25px'>App is running!</p>")
        sys.exit(0)

    # 界面运行选择
    splash.showMessage("Choosing workplace...", Qt.AlignBottom, Qt.black)
    launcher_settings = QSettings(
        thisPath + '/settings/launcher_settings.ini', QSettings.IniFormat)
    launcher_settings.setFallbacksEnabled(False)
    not_exe_lunch = launcher_settings.value("ifLaunch", "false")
    workPlace = launcher_settings.value(
        "workPlace", [thisPath + os.sep + "myWorkPlace"])
    # 删除无效的路径
    workPlace_copy = deepcopy(workPlace)
    for num,i in enumerate(workPlace_copy):
        if not os.path.exists(i):
            workPlace.remove(i)
        else:
            ##替换带.的路径
            if re.search(r"^\.", i):
                workPlace[num] = os.path.abspath(i)
    # 如果workPlace被删干净了
    if not workPlace:
        workPlace = [thisPath + os.sep + "myWorkPlace"]
    # 重新保存下路径
    if len(workPlace) > 15:
        workPlace = workPlace[:15]  # 只保留15个工作区
    launcher_settings.setValue(
        "workPlace", workPlace)
    if not_exe_lunch == "true":
        splash.showMessage("Starting PhyloSuite...", Qt.AlignBottom, Qt.black)
        myMainWindow = MyMainWindow(workPlace)
        Factory().centerWindow(myMainWindow)
        myMainWindow.show()
        splash.finish(myMainWindow)
        sys.exit(app.exec_())
    else:
        launcher = Launcher()
        if launcher.exec_() == QDialog.Accepted:
            splash.showMessage("Starting PhyloSuite...", Qt.AlignBottom, Qt.black)
            workPlace = launcher.WorkPlace
            myMainWindow = MyMainWindow(workPlace)
            Factory().centerWindow(myMainWindow)
            myMainWindow.show()
            splash.finish(myMainWindow)
            sys.exit(app.exec_())