def testDump(self): objs = [QObject()] objs.append(QObject(parent=objs[0])) objs.append(QObject(parent=objs[0])) objs.append(QObject(parent=objs[1])) objs.append(QObject(parent=objs[2])) WidgetUtils.dumpQObjectTree(objs[0])
def test_manager(self): source = QObject() target = QObject() manager = BindingManager(submitPolicy=BindingManager.ManualSubmit) manager.bind((target, "target"), None).to((source, "source")) tbind = DynamicPropertyBinding(target, "target_copy") sbind = DynamicPropertyBinding(source, "source") schanged = [] sbind.changed[object].connect(schanged.append) manager.bind(tbind, None).to(sbind) source.setProperty("source", 1) self.assertEqual(len(schanged), 1) self.assertEqual(toPyObject(target.property("target")), None) manager.commit() self.assertEqual(toPyObject(target.property("target")), 1) self.assertEqual(toPyObject(target.property("target_copy")), 1) source.setProperty("source", 2) manager.setSubmitPolicy(BindingManager.AutoSubmit) self.assertEqual(toPyObject(target.property("target")), 2) self.assertEqual(toPyObject(target.property("target_copy")), 2)
def test_base(self): a = QObject() l = ListOfPageModel(parent=a) l._data = [{"titre": "aaa", "id": "111", "matiereBgColor": "#111111"}] assert l.parent() == a assert l.rowCount() == 1
def test_18(self): for _ in self.syncPoolAndThread: # Terminate using a context manager. with AsyncController(_) as ac1: pass with self.assertRaises(AssertionError): ac1.start(None, lambda: None) # Termiante by calling terminate. ac2 = AsyncController(_) ac2.terminate() with self.assertRaises(AssertionError): ac2.start(None, lambda: None) # Terminate via __del__, I hope. ac3 = AsyncController(_) del ac3 # Can't try start, since the object was deleted. # Terminate via the QT object tree. o = QObject() ac3 = AsyncController(_, o) sip.delete(o) with self.assertRaises(AssertionError): ac3.start(None, lambda: None)
def test_expr(self): obj1 = QObject() obj1.setProperty("value", 1) obj1.setProperty("other", 2) result = DynamicPropertyBinding(obj1, "result") result.bindTo( PropertyBindingExpr( "value + other", locals={"value": binding_for(obj1, "value"), "other": binding_for(obj1, "other")} ) ) expr = PropertyBindingExpr( "True if value < 3 else False", dict(value=DynamicPropertyBinding(obj1, "result")) ) result_values = [] result.changed[object].connect(result_values.append) expr_values = [] expr.changed[object].connect(expr_values.append) self.assertEqual(result.get(), 3) self.assertEqual(expr.get(), False) obj1.setProperty("value", 0) self.assertEqual(result_values[-1], 2) self.assertEqual(expr_values[-1], True) self.assertEqual(result.get(), 2) self.assertEqual(expr.get(), True)
def updateFontFamily(self, event): obj = QObject() sender = obj.sender() name = sender.objectName() self.body.setFontFamily(name) self.fontFamilyMenu.setText(name) self.fontBodyFamily = self.fontFamilyMenu.text()
def updateFontSize(self, event): obj = QObject() sender = obj.sender() name = sender.objectName() self.body.setFontPointSize(int(name)) self.fontSizeMenu.setText(name + 'pt') self.fontBodyPointSize = int(name)
def __init__(self, parent=None, title=None): QLocale.setDefault(QLocale(QLocale.English, QLocale.UnitedStates)) super(DAQ_Analysis, self).__init__() if parent is None: raise Exception('no valid parent container, expected dockarea') # parent=DockArea() # exit(0) self.dockarea = parent self.mainwindow = parent.parent() if title is None: title = 'DAQ_Analysis' self.title = title self.mainwindow.setWindowTitle(self.title) self.wait_time = 2000 self.h5file = None self.loaded_data = None self.loaded_data_scan_type = None self.x_axis = None self.y_axis = None self.data_buffer = [] # convenience list to store data to be displayed self.ui = QObject() # the user interface self.set_GUI()
def __init__(self, parent=None): QLocale.setDefault(QLocale(QLocale.English, QLocale.UnitedStates)) super(ViewerND, self).__init__() # if parent is None: # raise Exception('no valid parent container, expected dockarea') # parent=DockArea() # exit(0) if parent is None: parent = QtWidgets.QWidget() parent.show() self.parent = parent self.wait_time = 2000 self.viewer_type = 'DataND' # ☺by default but coul dbe used for 3D visualization self.x_axis = dict(data=None, label='', units='') self.y_axis = dict(data=None, label='', units='') self.data_buffer = [ ] # convenience list to store 0D data to be displayed self.datas = None self.datas_settings = None # set default data shape case self.axes_nav = None self.data_axes = None # self.set_nav_axes(3) self.ui = QObject() # the user interface self.set_GUI()
def test_get_all_objects(self, stubs, monkeypatch): # pylint: disable=unused-variable widgets = [self.Object('Widget 1'), self.Object('Widget 2')] app = stubs.FakeQApplication(all_widgets=widgets) monkeypatch.setattr(debug, 'QApplication', app) root = QObject() o1 = self.Object('Object 1', root) o2 = self.Object('Object 2', o1) o3 = self.Object('Object 3', root) expected = textwrap.dedent(""" Qt widgets - 2 objects: <Widget 1> <Widget 2> Qt objects - 3 objects: <Object 1> <Object 2> <Object 3> global object registry - 0 objects: """).rstrip('\n') assert debug.get_all_objects(start_obj=root) == expected
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Create a QObject and move it to mainloop thread self._invoker = QObject() self._invoker.moveToThread(QApplication.instance().thread()) self._invoker.customEvent = self._custom_event
def setupUi(self): self.ui = QObject() vlayout = QtWidgets.QVBoxLayout() hlayout = QtWidgets.QHBoxLayout() self.ui.Tree = CustomTree() vlayout.addWidget(self.ui.Tree) iconopen = QtGui.QIcon() iconopen.addPixmap(QtGui.QPixmap(":/icons/Icon_Library/tree.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.ui.Open_Tree = QtWidgets.QPushButton('Open Tree') self.ui.Open_Tree.setIcon(iconopen) iconopensel = QtGui.QIcon() iconopensel.addPixmap(QtGui.QPixmap(":/icons/Icon_Library/tree.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.ui.Open_Tree_Selected = QtWidgets.QPushButton('Open Selected') self.ui.Open_Tree_Selected.setIcon(iconopensel) iconclose = QtGui.QIcon() iconclose.addPixmap( QtGui.QPixmap(":/icons/Icon_Library/CollapseAll.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.ui.Close_Tree = QtWidgets.QPushButton('Close Tree') self.ui.Close_Tree.setIcon(iconclose) hlayout.addWidget(self.ui.Open_Tree) hlayout.addWidget(self.ui.Open_Tree_Selected) hlayout.addWidget(self.ui.Close_Tree) vlayout.addLayout(hlayout) self.parent.setLayout(vlayout)
def __init__(self, parent, h5file=None): QLocale.setDefault(QLocale(QLocale.English, QLocale.UnitedStates)) super(H5Browser, self).__init__() if not (isinstance(parent, QtWidgets.QWidget) or isinstance(parent, QtWidgets.QMainWindow)): raise Exception( 'no valid parent container, expected a QWidget or a QMainWindow' ) self.h5file = None if isinstance(parent, QtWidgets.QMainWindow): self.main_window = parent self.parent = QtWidgets.QWidget() self.main_window.setCentralWidget(self.parent) else: self.main_window = None self.parent = parent self.ui = QObject() # the user interface self.set_GUI() self.load_file(h5file) self.ui.h5file_tree.ui.Open_Tree.click()
def test_file_area(): def open_file(err_msg, files_to_open): assert not err_msg wl_file_area.Wl_Worker_Open_Files( main, dialog_progress=wl_dialogs_misc.Wl_Dialog_Progress(main, text=''), update_gui=update_gui, files_to_open=files_to_open).run() def update_gui(err_msg, new_files): assert not err_msg main.settings_custom['file_area']['files_open'].extend(new_files) # Reset custom settings main.settings_custom = copy.deepcopy(main.settings_default) # Clean cached files for file in glob.glob('imports/*.*'): os.remove(file) for file_path in glob.glob('wl_tests_files/wl_file_area/work_area/*.txt'): time_start = time.time() print(f'Loading file "{os.path.split(file_path)[1]}"... ', end='') table = QObject() table.files_to_open = [] wl_file_area.Wl_Worker_Add_Files( main, dialog_progress=wl_dialogs_misc.Wl_Dialog_Progress(main, text=''), update_gui=open_file, file_paths=[file_path], table=table).run() new_file = main.settings_custom['file_area']['files_open'][-1] assert new_file['selected'] assert new_file['name'] == new_file['name_old'] == os.path.splitext( os.path.split(file_path)[-1])[0] assert new_file['path'] == wl_misc.get_normalized_path( file_path).replace( os.path.join('wl_tests_files', 'wl_file_area', 'work_area'), 'imports') assert new_file['path_original'] == wl_misc.get_normalized_path( file_path) assert new_file['encoding'] == 'utf_8' assert new_file['lang'] == re.search(r'(?<=\[)[a-z_]+(?=\])', file_path).group() assert new_file['tokenized'] == 'No' assert new_file['tagged'] == 'No' print(f'done! (In {round(time.time() - time_start, 2)} seconds)') # Save Settings with open('wl_tests/wl_settings.pickle', 'wb') as f: pickle.dump(main.settings_custom, f)
def __init__(self, parent=QObject()): super(Camera, self).__init__(parent) # chooses the system default camera self.cam = QCamera() self.caminfo = QCameraInfo(self.cam) self.camvfind = QCameraViewfinder() self.camvfindset = QCameraViewfinderSettings() self.recorder = QMediaRecorder(self.cam)
def test_preview(self): obj = MagicQObject() obj.ui.outputFile = QObject() obj.ui.previewLabel = MagicQObject() customizer = MainWindowCustomizer(obj, obj) self.assertTrue( os.path.isfile(customizer.preview_controller.preview_path))
def sort_by_fields(): options = QObject().sender().sortOption files = status['selectedfiles'] model = status['table'].model() if files and len(files) > 1: model.sortByFields(options, status['selectedfiles'], status['selectedrows']) else: model.sortByFields(options)
def patch(self): objreg.register('app', QObject()) objreg.register('save-manager', mock.MagicMock()) args = argparse.Namespace(relaxed_config=False) objreg.register('args', args) old_standarddir_args = standarddir._args yield objreg.global_registry.clear() standarddir._args = old_standarddir_args
def __init__(self, parent = QObject()): super(Camera, self).__init__(parent) print("3") self.cam = QCamera(QCameraInfo.defaultCamera()) #"/dev/video0".encode() print("4") self.caminfo = QCameraInfo(self.cam) self.camvfind = QCameraViewfinder() self.camvfindset = QCameraViewfinderSettings() self.cammode = self.cam.CaptureMode(0) self.camimgcap = QCameraImageCapture(self.cam)
def patch(self, fake_args): objreg.register('app', QObject()) objreg.register('save-manager', mock.MagicMock()) fake_args.relaxed_config = False old_standarddir_args = standarddir._args yield objreg.delete('app') objreg.delete('save-manager') # registered by config.init() objreg.delete('config') objreg.delete('key-config') objreg.delete('state-config') standarddir._args = old_standarddir_args
def initUI(self): self.resize(200,100) self.setWindowTitle("密码输入框") self.lb = QLabel("请输入密码:",self) self.edit = QLineEdit(self) self.edit.installEventFilter(self) self.bt1 = QPushButton("确定",self) self.bt2 = QPushButton("取消",self) hbox = QHBoxLayout() hbox.addStretch(1) hbox.addWidget(self.bt1) hbox.addStretch(1) hbox.addWidget(self.bt2) hbox.addStretch(1) vbox = QVBoxLayout() vbox.addWidget(self.lb) vbox.addWidget(self.edit) vbox.addStretch(1) vbox.addLayout(hbox) self.setLayout(vbox) """ 这个三个语句是给密码输入框增加一些属性 """ self.edit.setContextMenuPolicy(Qt.NoContextMenu)#这个语句设置QLineEdit对象的上下文菜单的策略。复制,粘贴,。。。,是否可用 # self.edit.setPlaceholderText("密码不超15位,只能有数字和字母,必须以字母开头")#只要行编辑为空,设置此属性将使行编辑显示为灰色的占位符文本。默认情况下,此属性包含一个空字符串。这是非常好的使用方法,可以在用户输入密码前看到一些小提示信息,但是又不影响使用,非常棒这个方法。 self.edit.setEchoMode(QLineEdit.Password)#这条语句设置了如何限定输入框中显示其包含信息的方式,这里设置的是:密码方式,即输入的时候呈现出原点出来。 """ 这三段代码大体意思就是说,运用正则表达式限定密码输入框字符接收的条件: 长度不能超过15位; 字母开头; 后面跟着的字符只能是字母或者数字。 """ # regx = QRegExp("^[a-zA-Z][0-9A-Za-z]{14}$")#为给定的模式字符串构造一个正则表达式对象。 # validator = QRegExpValidator(regx, self.edit)#构造一个验证器,该父对象接受与正则表达式匹配的所有字符串。这里的父对象就是QLineEdit对象了。匹配是针对整个字符串; 例如:如果正则表达式是[A-Fa-f0-9]+将被视为^[A-Fa-f0-9]+$。 # self.edit.setValidator(validator)#将密码输入框设置为仅接受符合验证器条件的输入。 这允许您对可能输入的文本设置任何约束条件。因此我们这里设置的就是符合上面描述的三种约束条件。 self.bt1.clicked.connect(self.Ok) self.bt2.clicked.connect(self.Cancel) object = QObject() """
def test_dyn(self): obj = QObject() changed = [] binding = DynamicPropertyBinding(obj, "test") binding.changed[object].connect(changed.append) self.assertIs(binding.get(), None) obj.setProperty("test", 1) self.assertEqual(binding.get(), 1) self.assertEqual(len(changed), 1) self.assertEqual(changed[-1], 1) binding.set(2) self.assertEqual(binding.get(), 2) self.assertEqual(len(changed), 2) self.assertEqual(changed[-1], 2) target = QObject() binding1 = DynamicPropertyBinding(target, "prop") binding1.bindTo(binding) self.assertEqual(binding1.get(), binding.get()) self.assertEqual(target.property("prop"), 2) binding.set("a string") self.assertEqual(binding1.get(), "a string") self.assertEqual(binding1.get(), binding.get()) self.assertEqual(target.property("prop"), "a string") binding1.unbind() binding.set(1) self.assertEqual(binding1.get(), "a string") self.assertEqual(target.property("prop"), "a string") self.assertEqual(binding.get(), 1) self.assertEqual(obj.property("test"), 1)
def setupUI(self): vlayout = QtWidgets.QVBoxLayout() hsplitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal) self.parent.setLayout(vlayout) vlayout.addWidget(hsplitter) self.ui = QObject() self.image_widget = ImageWidget() hsplitter.addWidget(self.image_widget) self.scaled_yaxis = AxisItem_Scaled('right') self.scaled_xaxis = AxisItem_Scaled('top') self.image_widget.plotitem.layout.addItem(self.scaled_xaxis, *(1, 1)) self.image_widget.plotitem.layout.addItem(self.scaled_yaxis, *(2, 2)) self.image_widget.view.sig_double_clicked.connect(self.double_clicked) self.scaled_xaxis.linkToView(self.image_widget.view) self.scaled_yaxis.linkToView(self.image_widget.view) # histograms self.histo_widget = QtWidgets.QWidget() histo_layout = QtWidgets.QHBoxLayout() self.histo_widget.setLayout(histo_layout) self.histogram_red = pg.HistogramLUTWidget() self.histogram_green = pg.HistogramLUTWidget() self.histogram_blue = pg.HistogramLUTWidget() self.histogram_adaptive = pg.HistogramLUTWidget() Ntick = 3 colors_red = [(int(r), 0, 0) for r in pg.np.linspace(0, 255, Ntick)] colors_green = [(0, int(g), 0) for g in pg.np.linspace(0, 255, Ntick)] colors_blue = [(0, 0, int(b)) for b in pg.np.linspace(0, 255, Ntick)] colors_adaptive = [(int(b), int(b), int(b)) for b in pg.np.linspace(0, 255, Ntick)] cmap_red = pg.ColorMap(pos=pg.np.linspace(0.0, 1.0, Ntick), color=colors_red) cmap_green = pg.ColorMap(pos=pg.np.linspace(0.0, 1.0, Ntick), color=colors_green) cmap_blue = pg.ColorMap(pos=pg.np.linspace(0.0, 1.0, Ntick), color=colors_blue) cmap_adaptive = pg.ColorMap(pos=pg.np.linspace(0.0, 1.0, Ntick), color=colors_adaptive) self.histogram_red.gradient.setColorMap(cmap_red) self.histogram_green.gradient.setColorMap(cmap_green) self.histogram_blue.gradient.setColorMap(cmap_blue) self.histogram_adaptive.gradient.setColorMap(cmap_adaptive) histo_layout.addWidget(self.histogram_red) histo_layout.addWidget(self.histogram_green) histo_layout.addWidget(self.histogram_blue) histo_layout.addWidget(self.histogram_adaptive) hsplitter.addWidget(self.histo_widget)
def setup(self, tmpdir): self.conf_path = (tmpdir / 'config').ensure(dir=1) self.data_path = (tmpdir / 'data').ensure(dir=1) self.cache_path = (tmpdir / 'cache').ensure(dir=1) self.env = { 'XDG_CONFIG_HOME': str(self.conf_path), 'XDG_DATA_HOME': str(self.data_path), 'XDG_CACHE_HOME': str(self.cache_path), } objreg.register('app', QObject()) objreg.register('save-manager', mock.MagicMock()) args = argparse.Namespace(relaxed_config=False) objreg.register('args', args) yield objreg.global_registry.clear()
def __init__(self, parent=None): QLocale.setDefault(QLocale(QLocale.English, QLocale.UnitedStates)) super(ViewerND, self).__init__() # if parent is None: # raise Exception('no valid parent container, expected dockarea') # parent=DockArea() # exit(0) if parent is None: area = DockArea() area.show() self.area = area elif isinstance(parent, QtWidgets.QWidget): area = DockArea() self.area = area parent.setLayout(QtWidgets.QVBoxLayout()) parent.layout.addWidget(area) elif isinstance(parent, DockArea): self.area = parent self.area = area self.wait_time = 2000 self.viewer_type = 'DataND' # ☺by default but coul dbe used for 3D visualization self.distribution = 'uniform' self.nav_axes_viewers = [] self.nav_axes_dicts = [] self.x_axis = dict(data=None, label='', units='') self.y_axis = dict(data=None, label='', units='') self.data_buffer = [ ] # convenience list to store 0D data to be displayed self.datas = None self.datas_settings = None # set default data shape case self.data_axes = None # self.set_nav_axes(3) self.ui = QObject() # the user interface self.set_GUI() self.setup_spread_UI() self.title = "" self.data_to_export = OrderedDict(name=self.title, data0D=OrderedDict(), data1D=OrderedDict(), data2D=OrderedDict(), dataND=OrderedDict())
def __init__(self, obj=None): QObject().__init__() super().__init__() self.specs = SpecRecord() self.audioInfo = {} self.list_gpus = [] self.cpuInfo = {} self.networkInfo = {} self.hard_drive_list = [] self.locationInfo = {} self.memoryInfo = {} self.systemInfo = {} self.webcamList = [] self.speed_status = False self.progress_timeout = (4 * 1000) self.obj = obj
def font_event(self, event): obj = QObject() sender = obj.sender() name = sender.objectName() if name == "B": if self.body.fontWeight() == 50: self.body.setFontWeight(75) else: self.body.setFontWeight(50) elif name == "I": if self.body.fontItalic(): self.body.setFontItalic(False) else: self.body.setFontItalic(True) elif name == "U": if self.body.fontUnderline(): self.body.setFontUnderline(False) else: self.body.setFontUnderline(True)
class WidgetCommunicationChannels(QObject): video_loaded_signal = pyqtSignal(MovieFile) clear_video_signal = pyqtSignal() selected_area_signal = pyqtSignal(int) config_signal = pyqtSignal(ConfigOptions) monitored_area_options_signal = pyqtSignal(MonitoredAreaOptions) toggle_mask_signal = pyqtSignal(bool) mask_on_signal = pyqtSignal(bool) maskfile_signal = pyqtSignal(str, CrossingBeamType) monitored_area_rois_signal = pyqtSignal(MonitoredArea, CrossingBeamType) all_monitored_areas_rois_signal = pyqtSignal(list, CrossingBeamType) video_frame_signal = pyqtSignal(int, float, np.ndarray) video_frame_time_signal = pyqtSignal(float) video_image_resolution_signal = pyqtSignal(int, int) video_acq_time_signal = pyqtSignal(QDateTime) fly_coord_pos_signal = pyqtSignal(list) tracker_running_signal = pyqtSignal(bool) refresh_display_signal = pyqtSignal() status_updated_signal = pyqtSignal() lock = QObject()
def initUI(self): self.resize(350, 100) self.setWindowTitle("密码输入框") self.lb = QLabel("请输入密码:", self) self.edit = QLineEdit(self) self.edit.installEventFilter(self) self.bt1 = QPushButton("确定", self) self.bt2 = QPushButton("取消", self) hbox = QHBoxLayout() hbox.addStretch(1) hbox.addWidget(self.bt1) hbox.addStretch(1) hbox.addWidget(self.bt2) hbox.addStretch(1) vbox = QVBoxLayout() vbox.addWidget(self.lb) vbox.addWidget(self.edit) vbox.addStretch(1) vbox.addLayout(hbox) self.setLayout(vbox) self.edit.setContextMenuPolicy(Qt.NoContextMenu) self.edit.setPlaceholderText("密码不超15位,只能有数字和字母,必须以字母开头") self.edit.setEchoMode(QLineEdit.Password) regx = QRegExp("^[a-zA-Z][0-9A-Za-z]{14}$") print('111') validator = QRegExpValidator(regx, self.edit) print('222') self.edit.setValidator(validator) self.bt1.clicked.connect(self.Ok) self.bt2.clicked.connect(self.Cancel) object = QObject()
def test_properties(fk, bridge): ac = fk.f_activite() p = Page.new(titre="bla", activite=ac.id, lastPosition=5, parent=bridge) # titre p.titre = "Haha" assert p.titre == "Haha" assert ss(lambda: fk.db.Page[p.id].titre) == "Haha" # lastused assert p.lastPosition == 5 p.lastPosition = 2 assert p.lastPosition == 2 # matiere assert p.matiereId == str(ac.matiere.id) # classert a = QObject() p.setParent(a) assert p.classeur == a