def main_ui(): # d = QQmlDebuggingEnabler() # d.startTcpDebugServer(3768) QIcon.setThemeName("digit") # Instantiate the Python object. knobs = Knobs() current_bpm = PolyValue("BPM", 120, 30, 250) # bit of a hack current_preset = PolyValue("Default Preset", 0, 0, 1) update_counter = PolyValue("update counter", 0, 0, 100000) delay_num_bars = PolyValue("Num bars", 1, 1, 16) # t_list = QStringList() # t_list.append("a") # t_list.append("b") # t_list.append("c") # model.setStringList(["aasdfasdf", "b", "c"]) # model2.setStringList(["fff", "ddd" "c"]) engine = QQmlApplicationEngine() # Expose the object to QML. context = engine.rootContext() context.setContextProperty("knobs", knobs) context.setContextProperty("param_vals", obj) context.setContextProperty("delay1_Left_Out_AvailablePorts", model) context.setContextProperty("delay1_Left_Out_UsedPorts", model2) context.setContextProperty("currentBPM", current_bpm) context.setContextProperty("currentPreset", current_preset) context.setContextProperty("polyValues", effect_parameter_data) context.setContextProperty("updateCounter", update_counter) context.setContextProperty("delayNumBars", delay_num_bars) context.setContextProperty("presetList", preset_list_model) # engine.load(QUrl("qrc:/qml/digit.qml")) engine.load(QUrl("qml/digit.qml")) timer = QTimer() timer.timeout.connect(tick) timer.start(2000) font = QFont("OpenSans", 10) app.setFont(font) app.exec_()
def addProjectsByPaths(self, paths: List[str]): """QUrl path (typically is sent from the QML GUI)""" if len(paths) == 0: module_logger.warning("No paths were given") return else: for path_str in paths: # convert to strings path_qurl = QUrl(path_str) if path_qurl.isEmpty(): module_logger.warning(f"Given path is empty: {path_str}") continue elif path_qurl.isLocalFile(): # file://... path: str = path_qurl.toLocalFile() elif path_qurl.isRelative( ): # this means that the path string is not starting with 'file://' prefix path: str = path_str # just use a source string else: module_logger.error(f"Incorrect path: {path_str}") continue self.addListItem(path, list_item_kwargs={'parent': self}) self.saveInSettings()
def get_kline_data(self): """ 获取当前品种当前合约下的K线数据 """ self.tips_animation_timer.start(400) self.tip_button.show() app = QApplication.instance() network_manager = getattr(app, "_network") contract = self.contract_combobox.currentText() if contract == "主力合约": self.kline_title = self.current_variety + "主力合约日K线图" url = SERVER + "trend/kline/{}/{}/main-contract/".format( self.current_exchange, self.current_variety) else: self.kline_title = self.contract_combobox.currentText() + "日K线图" url = SERVER + "trend/kline/{}/{}/".format(self.current_exchange, contract) self.web_container.setUpdatesEnabled(False) reply = network_manager.get(QNetworkRequest(QUrl(url))) reply.finished.connect(self.kline_data_reply)
def _open_item_tracker(self): # Importing this at root level seems to crash linux tests :( from PySide2.QtWebEngineWidgets import QWebEngineView tracker_window = QMainWindow() tracker_window.setWindowTitle("Item Tracker") tracker_window.resize(370, 380) web_view = QWebEngineView(tracker_window) tracker_window.setCentralWidget(web_view) self.web_view = web_view def update_window_icon(): tracker_window.setWindowIcon(web_view.icon()) web_view.iconChanged.connect(update_window_icon) web_view.load(QUrl("https://spaghettitoastbook.github.io/echoes/tracker/")) tracker_window.show() self._item_tracker_window = tracker_window
def test_MeasuredDataModel(): file_path = QUrl(TEST_FILE).toLocalFile() calculator = CryspyCalculator(file_path) interface = QtCalculatorInterface(calculator) m = Model() m.setCalculatorInterface(interface) assert isinstance(m._model, QStandardItemModel) assert isinstance(m._headers_model, QStandardItemModel) # assure _setModelFromProject got called assert m._model.rowCount() == 381 assert m._model.columnCount() == 9 assert m._headers_model.rowCount() == 1 assert m._headers_model.columnCount() == 9 # Test stuff from _setModelFromProject here assert m._model.item(0, 0).data(role=Qt.DisplayRole) == 4.0 assert m._model.item(0, 6).data(role=Qt.DisplayRole) == 128.97 assert m._model.item(380, 0).data(role=Qt.DisplayRole) == 80.0 assert m._model.item(380, 6).data(role=Qt.DisplayRole) == 27.81 assert m._headers_model.item(0, 0).data(role=Qt.DisplayRole) == 'x' assert m._headers_model.item(0, 1).data(role=Qt.DisplayRole) == 'y_obs' assert m._headers_model.item(0, 2).data(role=Qt.DisplayRole) == 'sy_obs' assert m._headers_model.item(0, 3).data(role=Qt.DisplayRole) == 'y_obs_diff' assert m._headers_model.item(0, 4).data(role=Qt.DisplayRole) == 'sy_obs_diff' assert m._headers_model.item(0, 5).data(role=Qt.DisplayRole) == 'y_obs_up' assert m._headers_model.item(0, 6).data(role=Qt.DisplayRole) == 'sy_obs_up' assert m._headers_model.item(0, 7).data(role=Qt.DisplayRole) == 'y_obs_down' assert m._headers_model.item(0, 8).data(role=Qt.DisplayRole) == 'sy_obs_down' # test asModel assert m._model == m.asModel() assert m._headers_model == m.asHeadersModel()
def test_FitablesModelModel(): file_path = QUrl(TEST_FILE).toLocalFile() calculator = CryspyCalculator(file_path) interface = QtCalculatorInterface(calculator) m = Model() m.setCalculatorInterface(interface) assert isinstance(m._model, QStandardItemModel) # assure _setModelFromProject got called assert m._model.rowCount() == 24 assert m._model.columnCount() == 1 assert len(m._model.roleNames()) == len(m._roles_dict) assert b'path' in m._roles_dict.values() assert b'refine' in m._roles_dict.values() # Test stuff from _setModelFromProject here # first and last row assert m._model.item(0, 0).data(role=Qt.UserRole+2) == 'phases Fe3O4 cell length_a' assert m._model.item(0, 0).data(role=Qt.UserRole+3) == 8.36212 assert m._model.item(0, 0).data(role=Qt.UserRole+4) == 0.0 assert m._model.item(0, 0).data(role=Qt.UserRole+5) == pytest.approx(6.68969) assert m._model.item(0, 0).data(role=Qt.UserRole+6) == 10.034544 assert m._model.item(0, 0).data(role=Qt.UserRole+7) is True assert m._model.item(0, 0).data(role=Qt.UserRole+8) == '\u212B' assert m._model.item(21, 0).data(role=Qt.UserRole+2) == 'experiments pd resolution y' assert m._model.item(21, 0).data(role=Qt.UserRole+3) == 0.0 assert m._model.item(21, 0).data(role=Qt.UserRole+4) == 0.0 assert m._model.item(21, 0).data(role=Qt.UserRole+5) == -1.0 assert m._model.item(21, 0).data(role=Qt.UserRole+6) == 1.0 assert m._model.item(21, 0).data(role=Qt.UserRole+7) is False assert m._model.item(21, 0).data(role=Qt.UserRole+8) == '' # test asModel assert m._model == m.asModel()
def addModel(self, fileName): reader = vtk.vtkSTLReader() url = QUrl(fileName) reader.SetFileName(url.path()) reader.Update() transform = vtk.vtkTransform() transform.Scale((.5, .5, .5)) transformFilter = vtk.vtkTransformPolyDataFilter() transformFilter.SetInputConnection(reader.GetOutputPort()) transformFilter.SetTransform(transform) transformFilter.Update() mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(transformFilter.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) self.renderer.AddActor(actor) print(f"Added...{url.path()}")
def modify_row_data(self): """ 修改数据表的单元格点击 """ btn = self.sender() row = getattr(btn, 'row_index') # 获取组织数据 item = { "id": int(self.modify_table.item(row, 0).text()), "date": self.modify_table.item(row, 1).text(), "variety_en": self.modify_table.item(row, 2).text(), "spot_price": float(self.modify_table.item(row, 3).text()), "price_increase": float(self.modify_table.item(row, 4).text()) } app = QApplication.instance() network_manager = getattr(app, "_network") url = SERVER + "spot/price/{}/".format(item["id"]) request = QNetworkRequest(QUrl(url)) request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json;charset=utf-8") reply = network_manager.put(request, json.dumps(item).encode("utf-8")) reply.finished.connect(self.modify_spot_price_reply)
def add_new_tab(self, qurl=None, label="Blank"): if qurl is None: qurl = QUrl("") browser = QWebEngineView() browser.setUrl(qurl) i = self.tabs.addTab(browser, label) self.tabs.setCurrentIndex(i) # end::addNewTab[] # tag::addNewTabSignals[] # More difficult! We only want to update the url when it's from the # correct tab browser.urlChanged.connect( lambda qurl, browser=browser: self.update_urlbar(qurl, browser)) browser.loadFinished.connect(lambda _, i=i, browser=browser: self.tabs. setTabText(i, browser.page().title()))
def __init__(self, row, col, img_url, parent=None): super(Tile, self).__init__(parent=parent) self.row = row self.col = col self.setGeometry(0, 0, 200, 200) self.setMargin(10) self.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) self.mousePressEvent = lambda event: self.handle_mouse_pressed(event) self.setStyleSheet("border: 1px dotted gray;") # load the image manager = QNetworkAccessManager(self) manager.finished[QNetworkReply].connect(self.disp_image) manager.get(QNetworkRequest(QUrl("https://images.dog.ceo/breeds/groenendael/n02105056_6127.jpg"))) # default pixmap self.default_pixmap = QPixmap(200, 200) self.default_pixmap.fill(Qt.gray) self.setPixmap(self.default_pixmap) # second pixmap self.dog_pixmap = QPixmap(200, 200) self.anim = QVariantAnimation() self.anim.setDuration(500) self.anim.setEasingCurve(QEasingCurve.Linear) self.anim.valueChanged.connect(self.anim_value_changed) self.anim.setStartValue(float(0)) self.anim.setEndValue(float(180)) self.anim1 = QVariantAnimation() self.anim1.setDuration(500) self.anim1.setEasingCurve(QEasingCurve.Linear) self.anim1.valueChanged.connect(self.anim1_value_changed) self.anim1.setStartValue(float(180)) self.anim1.setEndValue(float(0)) self.resize(200, 200) self.anim1.start()
def __init__(self, url, width, height, *args, **kwargs): self.display = Xvfb(int(width * 1.2), int(height * 1.2)) self.display.start() super().__init__(*args, **kwargs) self.engine = QWebEngineView() size = QSize(width, height) self.engine.setFixedSize(size) self.engine.setPage(QWebEnginePage()) settings = self.engine.page().settings() settings.setAttribute(QWebEngineSettings.ShowScrollBars, False) settings.setAttribute(QWebEngineSettings.JavascriptCanOpenWindows, False) settings.setAttribute(QWebEngineSettings.LocalStorageEnabled, False) settings.setAttribute(QWebEngineSettings.HyperlinkAuditingEnabled, False) settings.setAttribute(QWebEngineSettings.PluginsEnabled, False) settings.setAttribute(QWebEngineSettings.FullScreenSupportEnabled, False) settings.setAttribute(QWebEngineSettings.ScreenCaptureEnabled, False) self.engine.loadFinished.connect(self.load_finished) self.engine.load(QUrl(url)) self.engine.show()
def get_empty_volume_data(self): """ 获取持仓分析数据 """ if not self.can_query(): return current_contract = self.contract_combobox.currentText() if self.current_source == "daily": if current_contract == "主力合约": self.position_line_title = "行情统计{}主力合约持仓情况".format( self.current_variety) url = SERVER + "trend/daily-position/{}/{}/main-contract/".format( self.current_exchange, self.current_variety) else: self.position_line_title = "行情统计{}持仓情况".format( current_contract) url = SERVER + "trend/daily-position/{}/{}/".format( self.current_exchange, current_contract) elif self.current_source == "rank": rank_value = self.rank_spinbox.value() if current_contract == "主力合约": self.position_line_title = "{}前{}排名主力合约持仓情况".format( self.current_variety, rank_value) url = SERVER + "trend/rank-position/{}/{}/main-contract/?rank={}".format( self.current_exchange, self.current_variety, rank_value) else: self.position_line_title = "{}前{}排名持仓情况".format( current_contract, rank_value) url = SERVER + "trend/rank-position/{}/{}/?rank={}".format( self.current_exchange, current_contract, rank_value) else: return self.tips_animation_timer.start(400) self.web_container.setUpdatesEnabled(False) app = QApplication.instance() network_manager = getattr(app, "_network") reply = network_manager.get(QNetworkRequest(QUrl(url))) reply.finished.connect(self.position_data_reply)
def main(): """ 環境変数に Qt Quick Controls 2 のコンフィグファイル設定 を追加する 環境変数 QT_QUICK_CONTROLS_CONF に対して、本 Code と同じ ディレクトリにある qtquickcontrols2.conf ( Qt Quick Controls 2 の Configuration File ファイル) を設定 """ os.environ["QT_QUICK_CONTROLS_CONF"] = "../ui/qtquickcontrols2.conf" app = QApplication([]) engine = QQmlApplicationEngine() # QML経由でアクセスするカウントダウン処理 CountDownTimerクラス # のインスタンスを生成する ctimer = CountDownTimer() # QML経由でアクセスする音声再生処理 Soundクラスのインスタンスを生成する csound = Sound() # CountDownTimer クラスを QML の countDown としてバインディングする engine.rootContext().setContextProperty("countDown", ctimer) # Sound クラスを QML の sound としてバインディングする engine.rootContext().setContextProperty("sound", csound) url = QUrl("../ui/Main.qml") # QML ファイルのロード engine.load(url) # ルートオブジェクトのリストが見つからない場合は # 起動できないため、終了する if not engine.rootObjects(): sys.exit(-1) # 先頭の root オブジェクト (Main.qml 内の root オブジェクト ) を取得 root = engine.rootObjects()[0] # Main.qml 内の function updateCount(hour, minute, second) と接続 ctimer.value_changed.connect(root.updateCount) ret = app.exec_() ctimer.stop() csound.stop() sys.exit(ret)
def addRecentProjectFile(self, projectFile): if not isinstance(projectFile, (QUrl, pyCompatibility.basestring)): raise TypeError("Unexpected data type: {}".format( projectFile.__class__)) if isinstance(projectFile, QUrl): projectFileNorm = projectFile.toLocalFile() if not projectFileNorm: projectFileNorm = projectFile.toString() else: projectFileNorm = QUrl(projectFile).toLocalFile() if not projectFileNorm: projectFileNorm = QUrl.fromLocalFile(projectFile).toLocalFile() projects = self._recentProjectFiles() # remove duplicates while preserving order from collections import OrderedDict uniqueProjects = OrderedDict.fromkeys(projects) projects = list(uniqueProjects) # remove previous usage of the value if projectFileNorm in uniqueProjects: projects.remove(projectFileNorm) # add the new value in the first place projects.insert(0, projectFileNorm) # keep only the 10 first elements projects = projects[0:20] settings = QSettings() settings.beginGroup("RecentFiles") size = settings.beginWriteArray("Projects") for i, p in enumerate(projects): settings.setArrayIndex(i) settings.setValue("filepath", p) settings.endArray() settings.sync() self.recentProjectFilesChanged.emit()
def __init__(self, *args, **kwargs): super(EmptyVolume, self).__init__(*args, **kwargs) self.current_variety = None # 当前选择的品种 self.current_exchange = None # 当前品种所属交易所 self.current_source = "daily" # 当前选择的数据源(日行情统计OR持仓排名) self.tips_animation_timer = QTimer(self) # 显示文字提示的timer self.tips_animation_timer.timeout.connect(self.animation_tip_text) self.position_line_title = "持仓分析" # 分合约日线和主力合约 self.web_container.load(QUrl("file:///pages/position_line.html")) # 设置与页面信息交互的通道 channel_qt_obj = QWebChannel( self.web_container.page()) # 实例化qt信道对象,必须传入页面参数 self.contact_channel = PositionPageChannel() # 页面信息交互通道 self.web_container.page().setWebChannel(channel_qt_obj) channel_qt_obj.registerObject("pageContactChannel", self.contact_channel) self.variety_tree.selected_signal.connect(self.click_variety) # 选择品种 self.radio_button_group.buttonClicked.connect( self.change_daily_rank) # 改变目标数据源 self.confirm_button.clicked.connect( self.get_empty_volume_data) # 确定查询数据生成图形
def importDips(self, fileURLsStr): self.dipModel.reset() for filePath in fileURLsStr: file = QFile(QUrl(filePath).toLocalFile()) if (not file.open(QIODevice.ReadOnly)): print("impossible to open file \" " + filePath + " \", error is:" + file.errorString()) continue while not file.atEnd(): line = str(file.readLine(), encoding='utf-8') lineCells = line.split(',') try: float(lineCells[0]) except ValueError: continue dip = Dipole.initByComposent(xPos=float(lineCells[0]), yPos=float(lineCells[1]), zPos=float(lineCells[2]), quaternion=anglesSphToQuaternion( float(lineCells[3]), float(lineCells[4])), parent=self.dipModel) self.dipModel.append(dip)
def testSetAttributes(self): #Construct QUrl by set* methods url = QUrl() url.setScheme('ftp') self.assertEqual(url.toString(), 'ftp:') url.setHost('www.google.com') self.assertEqual(url.toString(), 'ftp://www.google.com') url.setPort(8080) self.assertEqual(url.toString(), 'ftp://www.google.com:8080') url.setPath('/mail/view') self.assertEqual(url.toString(), 'ftp://www.google.com:8080/mail/view') url.setUserName('john') self.assertEqual(url.toString(), 'ftp://[email protected]:8080/mail/view') url.setPassword('abc123') self.assertEqual(url.toString(), 'ftp://*****:*****@www.google.com:8080/mail/view')
def reinit_code(self): reqdata = {'client_id': self.__client_id, 'scope': 'gist'} req = request.Request('https://github.com/login/device/code', data=json.dumps(reqdata).encode('UTF-8'), headers=self.__headers) req.get_method = lambda: 'POST' code, ret = urlopen_nt(req) if code != 200: raise RuntimeError('code %d when trying to register device' % code) init_data = json.loads(ret.read().decode('UTF-8')) print(init_data) self.__device_code = init_data['device_code'] self.__interval = init_data.get('interval', 5) url = init_data['verification_uri'] self.__await_login_redirect = True self.__webprofile = QWebEngineProfile(parent=self.__webview) self.__webpage = QWebEnginePage( self.__webprofile, parent=self.__webview ) # just to be sure they are deleted in proper order self.__webview.setPage(self.__webpage) self.__webview.load(QUrl(url)) self.__devidlabel.setText('code: %s' % (init_data['user_code'], ))
def main(): """ .qml ファイルのロードする準備 QGuiApplication と QQuickView のインスタンスを生成する """ app = QApplication([]) view = QQuickView() """ Qt Quickの表示方法の設定 PySide2.QtQuick.QQuickView.ResizeMode の enum 定義 表示サイズはQMLのrootのQML rootアイテム(topの QMLオブジェクト)で サイズ変更されます。 QQuickView.SizeViewToRootObject : 表示はQMLの rootアイテム (topのQMLオブジェクト)でサイズ変更する QQuickView.SizeRootObjectToView : 表示は、rootアイテムサイズに QMLのオブジェクトが自動的に調整する """ view.setResizeMode(QQuickView.SizeRootObjectToView) """ 画面表示するQMLコンポーネントの読み出し URL形式で画面表示するQMLファイルを設定する。 """ url = QUrl("HelloWorld.qml") view.setSource(url) if view.status() == QQuickView.Error: sys.exit(-1) # QMLコンポーネントの表示 view.show() # QApplicationのイベントループ ret = app.exec_() """ アプリケーションの終了処理 注意: アプリケーション終了前にQQuickViewのオブジェクトを delしてから終了させる。 """ del view sys.exit(ret)
def __init__(self): super().__init__() self.setWindowTitle("pppGCS : Plural Python Parrot GCS") self.DeviceInfo = ppDeviceInfoWidget() self.DeviceList = ppDiscoverWidget() self.leftcol_layout = QVBoxLayout() self.leftcol_layout.addWidget(self.DeviceInfo) self.leftcol_layout.addWidget(self.DeviceList) self.VideoViewer = ppVideoWidget() self.tabs = QTabWidget() self.tabs.addTab(self.VideoViewer, "Video stream") self.mapview = QQuickView() self.mapcontainer = QWidget.createWindowContainer(self.mapview, self) url = QUrl("map.qml") self.mapview.setSource(url) self.mapview.show() self.tabs.addTab(self.mapcontainer, "map view") self.FlightInfo = ppFlightInfoWidget() self.ControlInfo = ppControlWidget() self.rightcol_layout = QVBoxLayout() self.rightcol_layout.addWidget(self.tabs) self.lowrightcol_layout = QHBoxLayout() self.lowrightcol_layout.addWidget(self.FlightInfo) self.lowrightcol_layout.addWidget(self.ControlInfo) self.rightcol_layout.addLayout(self.lowrightcol_layout) self.layout = QHBoxLayout() self.layout.addLayout(self.leftcol_layout) self.layout.addLayout(self.rightcol_layout) self.setLayout(self.layout) self.DeviceList.DeviceChanged.connect(self.on_device_changed)
def __init__(self, config): super().__init__() self.config = config self.config.appActivated.connect(self._appActivated) self.mdi = QMdiArea(self) self.mdi.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.mdi.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.setCentralWidget(self.mdi) self.menu = self.menuBar().addMenu("&Windows") self.aboutMenu = QMenuBar(self.menuBar()) self.menuBar().setCornerWidget(self.aboutMenu) m = self.aboutMenu.addMenu("&Help") self.helpNexxT = QAction("Help ...") self.aboutNexxT = QAction("About nexxT ...") self.aboutQt = QAction("About Qt ...") self.aboutPython = QAction("About Python ...") m.addActions([self.helpNexxT]) m.addSeparator() m.addActions([self.aboutNexxT, self.aboutQt, self.aboutPython]) self.helpNexxT.triggered.connect(lambda: QDesktopServices.openUrl( QUrl("https://nexxT.readthedocs.org"))) self.aboutNexxT.triggered.connect(lambda: QMessageBox.about( self, "About nexxT", """\ This program uses <b>nexxT</b> %(version)s, a generic hybrid python/c++ framework for developing computer vision algorithms.<br><br> nexxT is available under the <a href='https://github.com/ifm/nexxT/blob/master/LICENSE'>Apache 2.0 License</a> together with the <a href='https://github.com/ifm/nexxT/blob/master/NOTICE'>notice</a>. """ % dict(version=nexxT.__version__))) self.aboutQt.triggered.connect(lambda: QMessageBox.aboutQt(self)) self.aboutPython.triggered.connect(self._aboutPython) self.toolbar = None self.managedMdiWindows = [] self.managedSubplots = {} self.windows = {} self.activeApp = None self._ignoreCloseEvent = False
def read_info(path): from PySide2.QtCore import QUrl from mne.io import read_raw_cnt, read_raw_eeglab list_path = [QUrl(i).toLocalFile() for i in path] try: raw = { k: read_raw_cnt(k, montage=None, preload=True, stim_channel=False, verbose=None) if k.endswith("cnt") else read_raw_eeglab(k, montage=None, preload=True, stim_channel=False, verbose=None) for k in list_path } info = list() sfreq = list() for signal in raw: raw_info = raw[signal].info info.append(raw_info['subject_info']) sfreq.append(raw_info['sfreq']) del raw return info, sfreq except IOError: print('An error occurred trying to read the file.') except ImportError: print('No file found.') except: print('Cant read file') finally: print('Upload info correctly')
def __init__(self, parent=None): super().__init__(parent) self.threadpool = QThreadPool() worker = Worker( ) # Any other args, kwargs are passed to the run function self.threadpool.start(worker) self.browser = QWebEngineView() self.browser.setUrl(QUrl("http://127.0.0.1:8015/")) # self.setCentralWidget(self.browser) self.btn = QPushButton('Button', self) self.btn.resize(self.btn.sizeHint()) self.edit = QLineEdit("Write my name here") # self.button = QPushButton("Show Greetings") # # Create layout and add widgets # layout = QVBoxLayout() # layout.addWidget(self.browser) lay = QVBoxLayout(self) lay.addWidget(self.btn) lay.addWidget(self.browser) lay.addWidget(self.edit) #self.layout2.addWidget(self.browser) # # Set dialog layout # self.setLayout(layout) # # Add button signal to greetings slot self.btn.clicked.connect(self.greetings) def closeEvent(self, event): # do stuff if can_exit: worker.terminate() event.accept() # let the window close sys.exit() else: event.ignore()
def __init__(self, game_model: GameModel, dev: bool, parent) -> None: super().__init__(parent) self.game_model = game_model self.setMinimumSize(800, 600) self.page = LoggingWebPage(self) # Required to allow "cross-origin" access from file:// scoped canvas.html to the # localhost HTTP backend. self.page.settings().setAttribute( QWebEngineSettings.LocalContentCanAccessRemoteUrls, True) if dev: url = QUrl("http://localhost:3000") else: url = QUrl.fromLocalFile( str(Path("client/build/index.html").resolve())) server_settings = ServerSettings.get() host = server_settings.server_bind_address if host.startswith("::"): host = f"[{host}]" port = server_settings.server_port url.setQuery(f"server={host}:{port}") self.page.load(url) self.setPage(self.page)
def showContextMenu(self, pos: QPoint) -> None: mods = self.getSelectedMods() if not mods: return menu = QMenu(self) actionOpen = menu.addAction(QIcon(str(getRuntimePath('resources/icons/open-folder.ico'))), '&Open Directory') actionOpen.triggered.connect(lambda: [ util.openDirectory(self.modmodel.getModPath(mod)) # type: ignore for mod in mods ]) menu.addSeparator() actionEnable = menu.addAction('&Enable') actionEnable.triggered.connect(lambda: [ asyncio.create_task(self.enableSelectedMods(True)) ]) actionEnable.setEnabled(not all(mod.enabled for mod in mods)) actionDisable = menu.addAction('&Disable') actionDisable.triggered.connect(lambda: [ asyncio.create_task(self.enableSelectedMods(False)) ]) actionDisable.setEnabled(not all(not mod.enabled for mod in mods)) menu.addSeparator() actionUninstall = menu.addAction('&Uninstall') actionUninstall.triggered.connect(lambda: [ asyncio.create_task(self.deleteSelectedMods()) ]) menu.addSeparator() actionOpenNexus = menu.addAction( QIcon(str(getRuntimePath('resources/icons/browse.ico'))), 'Open &Nexus Mods page') actionOpenNexus.triggered.connect(lambda: [ QDesktopServices.openUrl(QUrl(f'https://www.nexusmods.com/witcher3/mods/{modid}')) for modid in {mod.modid for mod in mods if mod.modid > 0} ]) actionOpenNexus.setEnabled(not all(mod.modid <= 0 for mod in mods)) menu.popup(self.viewport().mapToGlobal(pos))
def __init__(self, parent=None): QObject.__init__(self, parent) self.parent = parent self.usuario = "" self.password = "" self.token = [] self.mmethod = "" self.mpid = "" self.mparams = [] self.mid = 0 self.boolConnect = False self.intCountConnect = 0 self.intReply = 0 self.intReplyMax = 2 self.urlServer = QUrl() self.versionct = "4" #trytond self.mhost = "" self.mdbase = "" self.mport = "" self.preferences = {} self.boolRun = False self.boolDirect = False self.boolRecursive = False self.mtypeCall = "order" self.mDir = QDir.currentPath() self.tempCallData = QJsonArray() self.tempCallFunctionArgs = QJsonArray() self.m_engine = QQmlApplicationEngine() # connect(managerAccess, SIGNAL(finished(QNetworkReply*)), # this, SLOT(replyFinishedOrder(QNetworkReply*))); self.managerAccess = QNetworkAccessManager(self) self.managerAccess.finished[QNetworkReply].connect( self.replyFinishedOrder)
def build_initial_request_list(self): # The initial request is a custom job. url = QUrl(self.camera_description.location) request = QNetworkRequest(url) request.setRawHeader(QByteArray(b"User-Agent"), QByteArray(b"Panasonic Android/1 DM-CP")) self.initial_requests.put(request) r = self.build_request({ "mode": "accctrl", "type": "req_acc", "value": "4D454930-0100-1000-8000-D453835D5F48", "value2": "LG-SP320" }) self.initial_requests.put(r) r = self.build_request({"mode": "getinfo", "type": "capability"}) self.initial_requests.put(r) r = self.build_request({"mode": "getinfo", "type": "allmenu"}) self.initial_requests.put(r) r = self.build_request({"mode": "getinfo", "type": "curmenu"}) self.initial_requests.put(r)
def __init__(self, parent=None): super(SlippyMap, self).__init__(parent) self._offset = QPoint() self._tilesRect = QRect() self._tilePixmaps = {} # Point(x, y) to QPixmap mapping self._manager = QNetworkAccessManager() self._url = QUrl() # public vars self.width = 400 self.height = 300 self.zoom = 15 self.latitude = 59.9138204 self.longitude = 10.7387413 self._emptyTile = QPixmap(TDIM, TDIM) self._emptyTile.fill(Qt.lightGray) self.request = QNetworkRequest() self.cache = QNetworkDiskCache() self.cache.setCacheDirectory( QStandardPaths.writableLocation(QStandardPaths.CacheLocation)) self._manager.setCache(self.cache) self._manager.finished.connect(self.handleNetworkData)
def main(): argv = sys.argv # Trick to set the style / not found how to do it in pythonic way argv.extend(["-style", "universal"]) app = QGuiApplication(argv) # why needed now? app.setOrganizationName("Some Company") app.setOrganizationDomain("somecompany.com") app.setApplicationName("Amazing Application") qmlRegisterType(FigureCanvasQTAggToolbar, "Backend", 1, 0, "FigureToolbar") imgProvider = MatplotlibIconProvider() # !! You must specified the QApplication as parent of QQmlApplicationEngine # otherwise a segmentation fault is raised when exiting the app engine = QQmlApplicationEngine(parent=app) engine.addImageProvider("mplIcons", imgProvider) context = engine.rootContext() data_model = DataSeriesModel() context.setContextProperty("dataModel", data_model) mainApp = Form(data=data_model) context.setContextProperty("draw_mpl", mainApp) engine.load(QUrl('main.qml')) win = engine.rootObjects()[0] mainApp.figure = win.findChild(QObject, "figure").getFigure() rc = app.exec_() # There is some trouble arising when deleting all the objects here # but I have not figure out how to solve the error message. # It looks like 'app' is destroyed before some QObject sys.exit(rc)
def __init__(self, debug=False, parent=None): QMainWindow.__init__(self, parent) QWebEngineSettings.defaultSettings().setAttribute( QWebEngineSettings.JavascriptCanAccessClipboard, True) QWebEngineSettings.defaultSettings().setAttribute( QWebEngineSettings.JavascriptCanPaste, True) self.view = QWebEngineView(self) self.setCentralWidget(self.view) self.chan = QWebChannel(self) self.comm = Comm(self) self.chan.registerObject('channelInterface', self.comm) self.view.page().setWebChannel(self.chan) self.view.setContextMenuPolicy(Qt.NoContextMenu) if debug: self.view.load('http://localhost:8080') self.devView = QWebEngineView() self.view.page().setDevToolsPage(self.devView.page()) self.devView.show() else: url = 'file:///' + QDir.fromNativeSeparators( os.path.abspath( os.path.join(os.path.dirname(__file__), './frontend/dist/index.html'))) self.view.load(QUrl(url))