def main(): app = QApplication(sys.argv) #shared= QSharedMemory("wepush") #if shared.attach(): #return 0 #shared.create(1) #sys.stdout=common.Mystd() loop = QEventLoop(app) asyncio.set_event_loop(loop) win = QWebEngineView() # QWebEngineView() director['root_win'] = win #thread.start_new_thread (server.start_server,(28289,)) #win =QWebView() #win.setWindowIcon(QIcon( './html/wechat.ico')) win.setMinimumSize(1200, 900) win.setWindowTitle('微信群发工具V1.0') url = 'file:///%s/test.html' % base_dir.replace('\\', '/') win.load(QUrl(url)) win.show() with loop: from server import start_server #loop.set_debug(True) loop.run_until_complete(start_server) #loop.create_task(send()) #loop.create_task(start_server) loop.run_forever()
class MainTest(unittest.TestCase): def test_WebEngineView_findText_exists(self): QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) app = QApplication.instance() or QApplication() top_level = QWidget() layout = QVBoxLayout(top_level) self._view = QWebEngineView() self._view.loadFinished.connect(self.loaded) self._view.load(QUrl.fromLocalFile(os.path.join(TEST_DIR, "fox.html"))) self._view.setMinimumSize(QSize(400, 300)) self._callback_count = 0 layout.addWidget(self._view) top_level.show() app.exec_() def found_callback(self, found): self.assertTrue(found) self._callback_count += 1 if self._callback_count == 2: QCoreApplication.quit() def javascript_callback(self, result): self.assertEqual(result, "Title") self._callback_count += 1 if self._callback_count == 2: QCoreApplication.quit() def loaded(self, ok): self.assertTrue(ok) if not ok: QCoreApplication.quit() self._view.page().runJavaScript("document.title", 1, partial(self.javascript_callback)) self._view.findText("fox", QWebEnginePage.FindFlags(), partial(self.found_callback))
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(780, 879) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(":/icons/cat.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) MainWindow.setWindowIcon(icon) MainWindow.setStyleSheet("background-color:rgb(70, 70, 70)") self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.centralwidget) self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.widget = QtWidgets.QWidget(self.centralwidget) self.widget.setObjectName("widget") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget) self.horizontalLayout_2.setSpacing(1) self.horizontalLayout_2.setContentsMargins(1, 1, 5, 5) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.tabWidget_main = QtWidgets.QTabWidget(self.widget) self.tabWidget_main.setFocusPolicy(QtCore.Qt.NoFocus) self.tabWidget_main.setStatusTip("") self.tabWidget_main.setStyleSheet("background-color:rgb(60, 60, 60)") self.tabWidget_main.setObjectName("tabWidget_main") self.tab_import = QtWidgets.QWidget() self.tab_import.setObjectName("tab_import") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab_import) self.verticalLayout_2.setSpacing(5) self.verticalLayout_2.setContentsMargins(5, 5, 5, 5) self.verticalLayout_2.setObjectName("verticalLayout_2") self.widget_2 = QtWidgets.QWidget(self.tab_import) self.widget_2.setStyleSheet("background-color:rgb(65, 65, 65)") self.widget_2.setObjectName("widget_2") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widget_2) self.verticalLayout_3.setContentsMargins(0, 0, 0, 0) self.verticalLayout_3.setObjectName("verticalLayout_3") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.pushButton_search = QtWidgets.QPushButton(self.widget_2) font = QtGui.QFont() font.setFamily("Carlito") self.pushButton_search.setFont(font) self.pushButton_search.setStyleSheet( "QPushButton:hover{background:rgb(150, 150, 150);}") icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap(":/icons/magnifier.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_search.setIcon(icon1) self.pushButton_search.setObjectName("pushButton_search") self.gridLayout.addWidget(self.pushButton_search, 0, 2, 1, 1) self.lineEdit_filepath = QtWidgets.QLineEdit(self.widget_2) self.lineEdit_filepath.setStyleSheet( "QLineEdit{border:1px solid gray; width:300px;border-radius:5px; padding:2px 4px;}" ) self.lineEdit_filepath.setObjectName("lineEdit_filepath") self.gridLayout.addWidget(self.lineEdit_filepath, 0, 1, 1, 1) self.label_file_path = QtWidgets.QLabel(self.widget_2) font = QtGui.QFont() font.setFamily("Alef") font.setPointSize(9) font.setWeight(9) font.setItalic(False) font.setBold(False) self.label_file_path.setFont(font) self.label_file_path.setStyleSheet("font: 75 9pt \"Alef\";") self.label_file_path.setObjectName("label_file_path") self.gridLayout.addWidget(self.label_file_path, 0, 0, 1, 1) self.verticalLayout_3.addLayout(self.gridLayout) self.horizontalLayout_6 = QtWidgets.QHBoxLayout() self.horizontalLayout_6.setSpacing(7) self.horizontalLayout_6.setContentsMargins(-1, -1, -1, 0) self.horizontalLayout_6.setObjectName("horizontalLayout_6") self.pushButton_left = QtWidgets.QPushButton(self.widget_2) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Ignored) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.pushButton_left.sizePolicy().hasHeightForWidth()) self.pushButton_left.setSizePolicy(sizePolicy) self.pushButton_left.setMinimumSize(QtCore.QSize(20, 20)) self.pushButton_left.setBaseSize(QtCore.QSize(20, 20)) self.pushButton_left.setStyleSheet( "QPushButton{background:rgb(94, 94, 94);border-radius:5px;}QPushButton:hover{background:rgb(15, 185, 15);}\n" "") self.pushButton_left.setText("") icon2 = QtGui.QIcon() icon2.addPixmap(QtGui.QPixmap(":/icons/left-arrow.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_left.setIcon(icon2) self.pushButton_left.setObjectName("pushButton_left") self.horizontalLayout_6.addWidget(self.pushButton_left) self.pushButton_right = QtWidgets.QPushButton(self.widget_2) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Ignored) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.pushButton_right.sizePolicy().hasHeightForWidth()) self.pushButton_right.setSizePolicy(sizePolicy) self.pushButton_right.setMinimumSize(QtCore.QSize(20, 20)) self.pushButton_right.setBaseSize(QtCore.QSize(20, 20)) self.pushButton_right.setStyleSheet( "QPushButton{background:rgb(94, 94, 94);border-radius:5px;}QPushButton:hover{background:rgb(15, 185, 15);}\n" "") self.pushButton_right.setText("") icon3 = QtGui.QIcon() icon3.addPixmap(QtGui.QPixmap(":/icons/right-arrow.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_right.setIcon(icon3) self.pushButton_right.setFlat(False) self.pushButton_right.setObjectName("pushButton_right") self.horizontalLayout_6.addWidget(self.pushButton_right) self.comboBox_filterlist = QtWidgets.QComboBox(self.widget_2) self.comboBox_filterlist.setStyleSheet("") self.comboBox_filterlist.setObjectName("comboBox_filterlist") self.comboBox_filterlist.addItem("") self.comboBox_filterlist.addItem("") self.comboBox_filterlist.addItem("") self.horizontalLayout_6.addWidget(self.comboBox_filterlist) spacerItem = QtWidgets.QSpacerItem(399, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_6.addItem(spacerItem) self.verticalLayout_3.addLayout(self.horizontalLayout_6) self.listView = QtWidgets.QListView(self.widget_2) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.listView.sizePolicy().hasHeightForWidth()) self.listView.setSizePolicy(sizePolicy) self.listView.setMinimumSize(QtCore.QSize(50, 50)) self.listView.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.listView.setStyleSheet( "QPushButton:hover{background:rgb(15, 185, 15);}") self.listView.setObjectName("listView") self.verticalLayout_3.addWidget(self.listView) self.widget_3 = QtWidgets.QWidget(self.widget_2) self.widget_3.setStyleSheet("background-color:rgb(75, 75, 75)") self.widget_3.setObjectName("widget_3") self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.widget_3) self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.comboBox_export_mode = QtWidgets.QComboBox(self.widget_3) self.comboBox_export_mode.setObjectName("comboBox_export_mode") self.comboBox_export_mode.addItem("") self.comboBox_export_mode.addItem("") self.comboBox_export_mode.addItem("") self.horizontalLayout_3.addWidget(self.comboBox_export_mode) spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem1) self.verticalLayout_3.addWidget(self.widget_3) self.widget_4 = QtWidgets.QWidget(self.widget_2) self.widget_4.setStyleSheet("background-color:rgb(75, 75, 75)") self.widget_4.setObjectName("widget_4") self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.widget_4) self.verticalLayout_4.setContentsMargins(0, 0, 0, 0) self.verticalLayout_4.setObjectName("verticalLayout_4") self.gridLayout_2 = QtWidgets.QGridLayout() self.gridLayout_2.setObjectName("gridLayout_2") self.label_namsepace = QtWidgets.QLabel(self.widget_4) self.label_namsepace.setStyleSheet("font: 75 9pt \"Alef\";") self.label_namsepace.setObjectName("label_namsepace") self.gridLayout_2.addWidget(self.label_namsepace, 0, 2, 1, 1) self.lineEdit_namespace = QtWidgets.QLineEdit(self.widget_4) self.lineEdit_namespace.setStyleSheet( "QLineEdit{border:1px solid gray; width:50px;border-radius:5px; padding:2px 4px;}" ) self.lineEdit_namespace.setObjectName("lineEdit_namespace") self.gridLayout_2.addWidget(self.lineEdit_namespace, 0, 3, 1, 1) self.lineEdit_exportname = QtWidgets.QLineEdit(self.widget_4) self.lineEdit_exportname.setStyleSheet( "QLineEdit{border:1px solid gray; width:200px;border-radius:5px; padding:2px 4px;}" ) self.lineEdit_exportname.setObjectName("lineEdit_exportname") self.gridLayout_2.addWidget(self.lineEdit_exportname, 0, 1, 1, 1) self.label_export_name = QtWidgets.QLabel(self.widget_4) self.label_export_name.setStyleSheet("font: 75 9pt \"Alef\";") self.label_export_name.setObjectName("label_export_name") self.gridLayout_2.addWidget(self.label_export_name, 0, 0, 1, 1) self.lineEdit_exportpath = QtWidgets.QLineEdit(self.widget_4) self.lineEdit_exportpath.setStyleSheet( "QLineEdit{border:1px solid gray; width:200px;border-radius:5px; padding:2px 4px;}" ) self.lineEdit_exportpath.setText("") self.lineEdit_exportpath.setObjectName("lineEdit_exportpath") self.gridLayout_2.addWidget(self.lineEdit_exportpath, 1, 1, 1, 3) self.label_exportpath = QtWidgets.QLabel(self.widget_4) self.label_exportpath.setWhatsThis("") self.label_exportpath.setStyleSheet("font: 75 9pt \"Alef\";") self.label_exportpath.setObjectName("label_exportpath") self.gridLayout_2.addWidget(self.label_exportpath, 1, 0, 1, 1) self.verticalLayout_4.addLayout(self.gridLayout_2) spacerItem2 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.verticalLayout_4.addItem(spacerItem2) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.label = QtWidgets.QLabel(self.widget_4) self.label.setStyleSheet("font: 75 9pt \"Alef\";") self.label.setObjectName("label") self.horizontalLayout.addWidget(self.label) self.checkBox_scene = QtWidgets.QCheckBox(self.widget_4) self.checkBox_scene.setObjectName("checkBox_scene") self.horizontalLayout.addWidget(self.checkBox_scene) self.checkBox_camera = QtWidgets.QCheckBox(self.widget_4) self.checkBox_camera.setObjectName("checkBox_camera") self.horizontalLayout.addWidget(self.checkBox_camera) self.checkBox_prop = QtWidgets.QCheckBox(self.widget_4) self.checkBox_prop.setObjectName("checkBox_prop") self.horizontalLayout.addWidget(self.checkBox_prop) self.checkBox_chracter = QtWidgets.QCheckBox(self.widget_4) self.checkBox_chracter.setObjectName("checkBox_chracter") self.horizontalLayout.addWidget(self.checkBox_chracter) spacerItem3 = QtWidgets.QSpacerItem(150, 20, QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem3) self.verticalLayout_4.addLayout(self.horizontalLayout) self.progressBar = QtWidgets.QProgressBar(self.widget_4) self.progressBar.setProperty("value", 100) self.progressBar.setObjectName("progressBar") self.verticalLayout_4.addWidget(self.progressBar) spacerItem4 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.verticalLayout_4.addItem(spacerItem4) self.widget_down3 = QtWidgets.QWidget(self.widget_4) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.widget_down3.sizePolicy().hasHeightForWidth()) self.widget_down3.setSizePolicy(sizePolicy) self.widget_down3.setMinimumSize(QtCore.QSize(0, 155)) self.widget_down3.setObjectName("widget_down3") self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.widget_down3) self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_7.setObjectName("horizontalLayout_7") self.webEngineView = QWebEngineView(self.widget_down3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.webEngineView.sizePolicy().hasHeightForWidth()) self.webEngineView.setSizePolicy(sizePolicy) self.webEngineView.setMinimumSize(QtCore.QSize(399, 152)) self.webEngineView.setMaximumSize(QtCore.QSize(999, 152)) self.webEngineView.setUrl(QtCore.QUrl("about:blank")) self.webEngineView.setObjectName("webEngineView") self.horizontalLayout_7.addWidget(self.webEngineView) self.verticalLayout_4.addWidget(self.widget_down3) spacerItem5 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.verticalLayout_4.addItem(spacerItem5) self.widget_down2 = QtWidgets.QWidget(self.widget_4) self.widget_down2.setObjectName("widget_down2") self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.widget_down2) self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_5.setObjectName("horizontalLayout_5") self.pushButton_action = QtWidgets.QPushButton(self.widget_down2) self.pushButton_action.setMinimumSize(QtCore.QSize(50, 0)) font = QtGui.QFont() font.setFamily("Corbel") self.pushButton_action.setFont(font) self.pushButton_action.setStyleSheet( "QPushButton{background:rgb(94, 94, 94);border-radius:5px;}QPushButton:hover{background:rgb(185, 15, 15);}\n" "") icon4 = QtGui.QIcon() icon4.addPixmap(QtGui.QPixmap(":/icons/hammer.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_action.setIcon(icon4) self.pushButton_action.setObjectName("pushButton_action") self.horizontalLayout_5.addWidget(self.pushButton_action) self.pushButton_ipAbcFromDisk = QtWidgets.QPushButton( self.widget_down2) font = QtGui.QFont() font.setFamily("Corbel") self.pushButton_ipAbcFromDisk.setFont(font) self.pushButton_ipAbcFromDisk.setStyleSheet( "QPushButton{background:rgb(94, 94, 94);border-radius:5px;}QPushButton:hover{background:gray;}" ) icon5 = QtGui.QIcon() icon5.addPixmap(QtGui.QPixmap(":/icons/import.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_ipAbcFromDisk.setIcon(icon5) self.pushButton_ipAbcFromDisk.setObjectName("pushButton_ipAbcFromDisk") self.horizontalLayout_5.addWidget(self.pushButton_ipAbcFromDisk) self.widget_up1 = QtWidgets.QWidget(self.widget_down2) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.widget_up1.sizePolicy().hasHeightForWidth()) self.widget_up1.setSizePolicy(sizePolicy) self.widget_up1.setMinimumSize(QtCore.QSize(0, 0)) self.widget_up1.setObjectName("widget_up1") self.gridLayout_3 = QtWidgets.QGridLayout(self.widget_up1) self.gridLayout_3.setContentsMargins(0, 0, 0, 0) self.gridLayout_3.setObjectName("gridLayout_3") self.pushButton_setting = QtWidgets.QPushButton(self.widget_up1) self.pushButton_setting.setStyleSheet( "QPushButton{background:rgb(94, 94, 94);border-radius:5px;}QPushButton:hover{background:gray;}" ) self.pushButton_setting.setText("") icon6 = QtGui.QIcon() icon6.addPixmap(QtGui.QPixmap(":/icons/settings-work-tool.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_setting.setIcon(icon6) self.pushButton_setting.setObjectName("pushButton_setting") self.gridLayout_3.addWidget(self.pushButton_setting, 0, 0, 1, 1) self.horizontalLayout_5.addWidget(self.widget_up1) self.pushButton_refresh = QtWidgets.QPushButton(self.widget_down2) self.pushButton_refresh.setMinimumSize(QtCore.QSize(50, 0)) font = QtGui.QFont() font.setFamily("Corbel") self.pushButton_refresh.setFont(font) self.pushButton_refresh.setStyleSheet( "QPushButton{background:rgb(94, 94, 94);border-radius:5px;}QPushButton:hover{background:green;}" ) icon7 = QtGui.QIcon() icon7.addPixmap(QtGui.QPixmap(":/icons/refresh.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.pushButton_refresh.setIcon(icon7) self.pushButton_refresh.setObjectName("pushButton_refresh") self.horizontalLayout_5.addWidget(self.pushButton_refresh) spacerItem6 = QtWidgets.QSpacerItem(90, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem6) self.verticalLayout_4.addWidget(self.widget_down2) spacerItem7 = QtWidgets.QSpacerItem(20, 15, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.verticalLayout_4.addItem(spacerItem7) self.verticalLayout_3.addWidget(self.widget_4) self.verticalLayout_2.addWidget(self.widget_2) self.tabWidget_main.addTab(self.tab_import, icon, "") self.tab_undefined01 = QtWidgets.QWidget() self.tab_undefined01.setObjectName("tab_undefined01") self.tabWidget_main.addTab(self.tab_undefined01, "") self.tab_undefined02 = QtWidgets.QWidget() self.tab_undefined02.setObjectName("tab_undefined02") self.tabWidget_main.addTab(self.tab_undefined02, "") self.horizontalLayout_2.addWidget(self.tabWidget_main) self.horizontalLayout_4.addWidget(self.widget) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 780, 21)) self.menubar.setStyleSheet("background-color:rgb(60, 60, 60)") self.menubar.setObjectName("menubar") self.menu_Setting = QtWidgets.QMenu(self.menubar) self.menu_Setting.setObjectName("menu_Setting") self.menu_About = QtWidgets.QMenu(self.menubar) self.menu_About.setObjectName("menu_About") self.menu_File = QtWidgets.QMenu(self.menubar) self.menu_File.setObjectName("menu_File") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.toolBar = QtWidgets.QToolBar(MainWindow) self.toolBar.setObjectName("toolBar") MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) self.dockWidget_om = QtWidgets.QDockWidget(MainWindow) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.dockWidget_om.sizePolicy().hasHeightForWidth()) self.dockWidget_om.setSizePolicy(sizePolicy) self.dockWidget_om.setMinimumSize(QtCore.QSize(142, 164)) self.dockWidget_om.setFocusPolicy(QtCore.Qt.TabFocus) self.dockWidget_om.setFloating(False) self.dockWidget_om.setObjectName("dockWidget_om") self.dockWidgetContents_2 = QtWidgets.QWidget() self.dockWidgetContents_2.setObjectName("dockWidgetContents_2") self.verticalLayout = QtWidgets.QVBoxLayout(self.dockWidgetContents_2) self.verticalLayout.setObjectName("verticalLayout") self.widget_leftside = QtWidgets.QWidget(self.dockWidgetContents_2) self.widget_leftside.setObjectName("widget_leftside") self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.widget_leftside) self.verticalLayout_5.setContentsMargins(7, 7, 7, 7) self.verticalLayout_5.setObjectName("verticalLayout_5") self.verticalLayout.addWidget(self.widget_leftside) self.dockWidget_om.setWidget(self.dockWidgetContents_2) MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.dockWidget_om) self.actionSetting = QtWidgets.QAction(MainWindow) self.actionSetting.setCheckable(False) self.actionSetting.setIcon(icon6) self.actionSetting.setStatusTip("") self.actionSetting.setVisible(True) self.actionSetting.setObjectName("actionSetting") self.actionAboutThis = QtWidgets.QAction(MainWindow) self.actionAboutThis.setObjectName("actionAboutThis") self.actionAbout = QtWidgets.QAction(MainWindow) self.actionAbout.setObjectName("actionAbout") self.actionDefault = QtWidgets.QAction(MainWindow) self.actionDefault.setObjectName("actionDefault") self.actionSave = QtWidgets.QAction(MainWindow) self.actionSave.setObjectName("actionSave") self.menu_Setting.addAction(self.actionDefault) self.menu_About.addAction(self.actionAboutThis) self.menu_File.addAction(self.actionSave) self.menu_File.addSeparator() self.menu_File.addSeparator() self.menubar.addAction(self.menu_File.menuAction()) self.menubar.addAction(self.menu_Setting.menuAction()) self.menubar.addAction(self.menu_About.menuAction()) self.toolBar.addAction(self.actionSetting) self.retranslateUi(MainWindow) self.tabWidget_main.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): MainWindow.setWindowTitle( QtWidgets.QApplication.translate("MainWindow", "Automation (Do your best)", None, -1)) self.pushButton_search.setStatusTip( QtWidgets.QApplication.translate("MainWindow", "Tips: Start Search", None, -1)) self.pushButton_search.setText( QtWidgets.QApplication.translate("MainWindow", "Search", None, -1)) self.label_file_path.setStatusTip( QtWidgets.QApplication.translate("MainWindow", "The folder to search", None, -1)) self.label_file_path.setText( QtWidgets.QApplication.translate("MainWindow", "File Path", None, -1)) self.pushButton_left.setStatusTip( QtWidgets.QApplication.translate("MainWindow", "Tips: Switch to Top Level", None, -1)) self.pushButton_right.setStatusTip( QtWidgets.QApplication.translate("MainWindow", "Tips: The next level", None, -1)) self.comboBox_filterlist.setStatusTip( QtWidgets.QApplication.translate("MainWindow", "Tips: Filltration", None, -1)) self.comboBox_filterlist.setItemText( 0, QtWidgets.QApplication.translate("MainWindow", "*", None, -1)) self.comboBox_filterlist.setItemText( 1, QtWidgets.QApplication.translate("MainWindow", ".mb/ma", None, -1)) self.comboBox_filterlist.setItemText( 2, QtWidgets.QApplication.translate("MainWindow", ".hip", None, -1)) self.listView.setStatusTip( QtWidgets.QApplication.translate( "MainWindow", "Tips:Select the file you will export", None, -1)) self.comboBox_export_mode.setStatusTip( QtWidgets.QApplication.translate("MainWindow", "Tips: Export mode", None, -1)) self.comboBox_export_mode.setItemText( 0, QtWidgets.QApplication.translate("MainWindow", "SelectCheck", None, -1)) self.comboBox_export_mode.setItemText( 1, QtWidgets.QApplication.translate("MainWindow", "ByName", None, -1)) self.comboBox_export_mode.setItemText( 2, QtWidgets.QApplication.translate("MainWindow", "All", None, -1)) self.label_namsepace.setStatusTip( QtWidgets.QApplication.translate("MainWindow", "Tips: namespace in maya", None, -1)) self.label_namsepace.setText( QtWidgets.QApplication.translate("MainWindow", "namesapce", None, -1)) self.label_export_name.setStatusTip( QtWidgets.QApplication.translate( "MainWindow", "Tips: The name to look for is in Maya", None, -1)) self.label_export_name.setText( QtWidgets.QApplication.translate("MainWindow", "Export Name", None, -1)) self.label_exportpath.setStatusTip( QtWidgets.QApplication.translate( "MainWindow", "Tips: default is current houdini project", None, -1)) self.label_exportpath.setText( QtWidgets.QApplication.translate("MainWindow", "Export Path", None, -1)) self.label.setStatusTip( QtWidgets.QApplication.translate("MainWindow", "Tips: Export Options", None, -1)) self.label.setText( QtWidgets.QApplication.translate("MainWindow", "Option", None, -1)) self.checkBox_scene.setText( QtWidgets.QApplication.translate("MainWindow", "Scene", None, -1)) self.checkBox_camera.setText( QtWidgets.QApplication.translate("MainWindow", "Camera", None, -1)) self.checkBox_prop.setText( QtWidgets.QApplication.translate("MainWindow", "Prop", None, -1)) self.checkBox_chracter.setText( QtWidgets.QApplication.translate("MainWindow", "Chracter", None, -1)) self.pushButton_action.setStatusTip( QtWidgets.QApplication.translate("MainWindow", "Tips: Export operation", None, -1)) self.pushButton_action.setText( QtWidgets.QApplication.translate("MainWindow", "Action", None, -1)) self.pushButton_ipAbcFromDisk.setText( QtWidgets.QApplication.translate("MainWindow", "ImportAlembic", None, -1)) self.pushButton_refresh.setText( QtWidgets.QApplication.translate("MainWindow", "Refresh", None, -1)) self.tabWidget_main.setTabText( self.tabWidget_main.indexOf(self.tab_import), QtWidgets.QApplication.translate("MainWindow", "Import", None, -1)) self.tabWidget_main.setTabText( self.tabWidget_main.indexOf(self.tab_undefined01), QtWidgets.QApplication.translate("MainWindow", "Undefined_1", None, -1)) self.tabWidget_main.setTabText( self.tabWidget_main.indexOf(self.tab_undefined02), QtWidgets.QApplication.translate("MainWindow", "Undefined_2", None, -1)) self.menu_Setting.setTitle( QtWidgets.QApplication.translate("MainWindow", "&Setting", None, -1)) self.menu_About.setTitle( QtWidgets.QApplication.translate("MainWindow", "&About", None, -1)) self.menu_File.setTitle( QtWidgets.QApplication.translate("MainWindow", "&File", None, -1)) self.toolBar.setWindowTitle( QtWidgets.QApplication.translate("MainWindow", "toolBar", None, -1)) self.dockWidget_om.setWindowTitle( QtWidgets.QApplication.translate("MainWindow", "Instant Fall", None, -1)) self.actionSetting.setText( QtWidgets.QApplication.translate("MainWindow", "Setting", None, -1)) self.actionAboutThis.setText( QtWidgets.QApplication.translate("MainWindow", "About Automation", None, -1)) self.actionAbout.setText( QtWidgets.QApplication.translate("MainWindow", "About", None, -1)) self.actionDefault.setText( QtWidgets.QApplication.translate("MainWindow", "Default", None, -1)) self.actionSave.setText( QtWidgets.QApplication.translate("MainWindow", "Save", None, -1))
class TreeViewer(QMainWindow): """Phylogeny viewer with toytree""" def __init__(self): QMainWindow.__init__(self) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.setWindowTitle("Toytree-viewer") self.setGeometry(QtCore.QRect(200, 200, 800, 600)) self.setMinimumHeight(150) self.main = QWidget(self) self.main.setFocus() self.setCentralWidget(self.main) self.add_widgets() self.create_menu(self) self.tree = None self.width = 400 self.height = 500 self.colors = {} self.default_style = { "layout": 'r', "edge_type": 'p', "edge_style": { "stroke": 'black', "stroke-width": 2, }, "tip_labels": True, "tip_labels_align": True, "tip_labels_colors": 'black', "tip_labels_style": { "font-size": "14px" }, "node_labels": False, "node_sizes": 10, "node_colors": toytree.colors[2], "node_markers": "c", "use_edge_lengths": True, } self.style = self.default_style.copy() #self.test_tree(10) return def test_tree(self, n=None): """Load a test tree""" if n == None: n, ok = QInputDialog().getInt(self, "Test tree", "Nodes:", 10) if not ok: return self.set_tree(self.random_tree(n=n)) self.height = 200 + self.tree.ntips * 10 self.update() return def random_tree(self, n=12): """Make a random tree""" tre = toytree.rtree.coaltree(n) ## assign random edge lengths and supports to each node for node in tre.treenode.traverse(): node.dist = np.random.exponential(1) node.support = int(np.random.uniform(50, 100)) return tre def save_data(self): """Save layers""" data = tools.get_attributes(self) data['tree'] = self.tree return data def load_data(self, data): """Load saved layers""" try: self.set_tree(data['tree']) tools.set_attributes(self, data) except: pass self.update() return def create_menu(self, parent): """Menu bar""" self.menubar = self.menuBar() self.file_menu = QMenu('File', parent) self.file_menu.addAction('Import Tree', self.load_tree) self.file_menu.addAction('Load Test Tree', self.test_tree) self.file_menu.addAction('Show Newick', self.show_newick) self.file_menu.addAction('Export Image', self.export_image) self.menubar.addMenu(self.file_menu) self.tree_menu = QMenu('Tree', parent) self.tree_menu.addAction('Show Unrooted', self.unroot_tree) self.tree_menu.addAction('Reset Format', self.reset_style) self.menubar.addMenu(self.tree_menu) return def add_widgets(self): """Add widgets""" vbox = QVBoxLayout(self.main) self.splitter = QSplitter() vbox.addWidget(self.splitter) self.splitter.setOrientation(QtCore.Qt.Vertical) self.splitter.setSizes([300, 100]) self.splitter.setStretchFactor(1, 0) #layout.addWidget(self.main) from PySide2.QtWebEngineWidgets import QWebEngineView self.browser = QWebEngineView() self.browser.setMinimumSize(200, 200) self.splitter.addWidget(self.browser) toolswidget = QWidget() self.splitter.addWidget(toolswidget) l = QVBoxLayout(toolswidget) self.zoomslider = w = QSlider(QtCore.Qt.Horizontal) w.setSingleStep(5) w.setMinimum(5) w.setMaximum(50) w.setValue(10) l.addWidget(w) w.valueChanged.connect(self.zoom) btn = QPushButton('Set Format') l.addWidget(btn) btn.clicked.connect(self.tree_style_options) t = self.tipitems = QTreeWidget() t.setHeaderItem(QTreeWidgetItem(["name", "visible"])) t.setColumnWidth(0, 200) t.setSelectionMode(QAbstractItemView.ExtendedSelection) t.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) t.customContextMenuRequested.connect(self.show_tree_menu) l.addWidget(t) return def show_tree_menu(self, pos): """Show right cick tree menu""" item = self.tipitems.itemAt(pos) menu = QMenu(self.tipitems) colorAction = menu.addAction("Set Color") nodecolorAction = menu.addAction("Set Node Color") rootAction = menu.addAction("Root On") dropAction = menu.addAction("Drop Tips") action = menu.exec_(self.tipitems.mapToGlobal(pos)) if action == rootAction: self.root_tree() elif action == colorAction: self.set_color() elif action == nodecolorAction: self.set_color('node') elif action == dropAction: self.drop_tips() def load_tree(self, filename): options = QFileDialog.Options() filter = "newick files (*.newick);;All files (*.*)" filename, _ = QFileDialog.getOpenFileName(self, "Open tree file", "", filter=filter, selectedFilter=filter, options=options) if not filename: return self.set_tree(toytree.tree(filename)) return def set_tree(self, tree): """Set a new tree""" self.tree = tree self.colors = {} self.style['tip_labels_colors'] = 'black' self.tipitems.clear() for t in self.tree.get_tip_labels(): item = QTreeWidgetItem(self.tipitems) item.setCheckState(1, QtCore.Qt.Checked) item.setText(0, t) return def update(self): """Update the plot""" if self.tree == None: return #set colors colorlist = [ self.colors[tip] if tip in self.colors else "black" for tip in self.tree.get_tip_labels() ] self.style['tip_labels_colors'] = colorlist canvas, axes, mark = self.tree.draw(width=self.width, height=self.height, scalebar=True, **self.style) toyplot.html.render(canvas, "temp.html") with open('temp.html', 'r') as f: html = f.read() self.browser.setHtml(html) self.canvas = canvas return def show_newick(self): txt = self.tree.newick ed = PlainTextEditor(self, txt) return def root_tree(self): item = self.tipitems.selectedItems()[0] row = self.tipitems.selectedIndexes()[0].row() name = item.text(0) self.tree = self.tree.root(name).ladderize() self.update() return def unroot_tree(self): self.tree = self.tree.unroot().ladderize() self.update() return def export_image(self): """Save tree as image""" options = QFileDialog.Options() filter = "png files (*.png);;pdf files (*.pdf);;All files (*.*)" filename, _ = QFileDialog.getSaveFileName(self, "Save Project", "", filter=filter, selectedFilter=filter, options=options) if not filename: return ext = os.path.splitext(filename) print(ext) from toyplot import png png.render(self.canvas, filename, width=(4, "inches")) return def zoom(self): zoom = self.zoomslider.value() / 10 self.browser.setZoomFactor(zoom) def tree_style_options(self): fonts = ['%spx' % i for i in range(6, 28)] markers = ['o', 's', 'd', '^', '>'] nlabels = ['', 'idx', 'support'] tip_labels_style = self.style['tip_labels_style'] opts = { 'layout': { 'type': 'combobox', 'default': self.style['layout'], 'items': ['r', 'd', 'c'] }, 'edge_type': { 'type': 'combobox', 'default': self.style['edge_type'], 'items': ['p', 'c'] }, 'tip_labels': { 'type': 'checkbox', 'default': self.style['tip_labels'] }, 'tip_labels_align': { 'type': 'checkbox', 'default': self.style['tip_labels_align'] }, 'node_labels': { 'type': 'combobox', 'default': self.style['node_labels'], 'items': nlabels }, 'node_sizes': { 'type': 'spinbox', 'default': self.style['node_sizes'], 'range': (2, 20), 'interval': 1 }, 'node_markers': { 'type': 'combobox', 'default': self.style['node_markers'], 'items': markers }, 'font_size': { 'type': 'combobox', 'default': tip_labels_style['font-size'], 'items': fonts }, 'width': { 'type': 'entry', 'default': self.width }, 'height': { 'type': 'entry', 'default': self.height, }, } dlg = MultipleInputDialog(self, opts, title='Tree Style', width=300) dlg.exec_() if not dlg.accepted: return False kwds = dlg.values self.set_style(kwds) self.update() return def set_style(self, kwds): omit = ['width', 'height', 'font_size'] for k in kwds: if k not in omit: self.style[k] = kwds[k] if kwds['node_labels'] == '': self.style['node_labels'] = False self.style['tip_labels_style']['font-size'] = kwds['font_size'] self.width = kwds['width'] self.height = kwds['height'] self.tree = self.tree.ladderize() return def reset_style(self): self.style = self.default_style self.colors = {} print(self.style) self.update() def set_color(self, kind='text'): items = self.tipitems.selectedItems() names = [i.text(0) for i in items] qcolor = QColorDialog.getColor() for item in items: item.setBackground(0, qcolor) for name in names: if kind == 'text': self.colors[name] = qcolor.name() elif kind == 'node': self.node_colors[name] = qcolor.name() self.update() return def drop_tips(self): items = self.tipitems.selectedItems() names = [i.text(0) for i in items] #for name in names: self.tree = self.tree.drop_tips(names=names).ladderize() self.update() return
class ArticleBox(QFrame): def __init__(self, parent=None): """ Constructor of ArticleBox which display all content of article Args: parent (QWidget): GUI parent of widget. Defaults to None. """ super(ArticleBox, self).__init__(parent=parent) self.setStyleSheet( "QFrame{border: 1px solid white; border-radius: 10px;} QLabel{border: 0px solid black;} QTextEdit{border: 0px solid black;} " ) self.__layout = QVBoxLayout(self) __label_font = QFont() __label_font.setPointSize(20) __text_font = QFont() __text_font.setPointSize(12) __site_font = QFont() __site_font.setPointSize(10) self.__layout.setSpacing(10) self.__layout.setAlignment(Qt.AlignTop) self.__site = QLabel(parent=self) self.__site.setWordWrap(True) self.__site.setFont(__site_font) self.__label = QLabel(parent=self) self.__label.setWordWrap(True) self.__label.setFont(__label_font) self.__content_box = QWebEngineView() self.__content_box.setVisible(False) self.__content_box.setMinimumSize(300, 300) self.__content_box.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding) self.__content_box.loadStarted.connect(self.load_started_callback) self.__content_box.loadFinished.connect(self.load_finished_callback) self.__link_btn = QPushButton() self.__link_btn.setFlat(True) self.__link_btn.clicked.connect(self.open_link) self.__link = "" self.__layout.addWidget(self.__label) self.__layout.addWidget(self.__site) self.__layout.addWidget(self.__content_box) self.__layout.addWidget(self.__link_btn, alignment=Qt.AlignCenter) self.setLayout(self.__layout) def load_started_callback(self): """ Method which was used to measure loading time it is executed at beginning of loading content """ pass def load_finished_callback(self): """ Method which was used to measure loading time it is executed at the end of loading content """ self.__content_box.setVisible(True) def set_data(self, site, link, title, article): """ Sets content data to data from args Args: site (string): site name link (string): url of the whole article title (string): title of the article article (string): content of article """ self.__content_box.setHtml(article, link) self.__link_btn.setText(f"Read more") self.__link = link self.__site.setText(site) self.__label.setText(title) def open_link(self): """ Opens article link in external browser """ webbrowser.open_new_tab(self.__link)