pyloid 0.20.2__py3-none-any.whl → 0.20.2.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyloid/__init__.py +7 -7
- pyloid/api.py +104 -104
- pyloid/autostart.py +101 -101
- pyloid/browser_window.py +1956 -1915
- pyloid/builder/__init__.py +80 -80
- pyloid/builder/build_config.schema.json +72 -72
- pyloid/builder/spec.py +246 -246
- pyloid/custom/titlebar.py +116 -116
- pyloid/filewatcher.py +163 -163
- pyloid/js_api/event_api.py +24 -24
- pyloid/js_api/window_api.py +255 -255
- pyloid/monitor.py +921 -921
- pyloid/pyloid.py +1404 -1404
- pyloid/thread_pool.py +500 -500
- pyloid/timer.py +307 -307
- pyloid/tray.py +48 -48
- pyloid/utils.py +122 -122
- {pyloid-0.20.2.dist-info → pyloid-0.20.2.dev0.dist-info}/LICENSE +201 -201
- {pyloid-0.20.2.dist-info → pyloid-0.20.2.dev0.dist-info}/METADATA +1 -1
- pyloid-0.20.2.dev0.dist-info/RECORD +21 -0
- pyloid-0.20.2.dist-info/RECORD +0 -21
- {pyloid-0.20.2.dist-info → pyloid-0.20.2.dev0.dist-info}/WHEEL +0 -0
pyloid/monitor.py
CHANGED
@@ -1,921 +1,921 @@
|
|
1
|
-
from PySide6.QtGui import QScreen
|
2
|
-
from typing import Optional, Callable, Any
|
3
|
-
|
4
|
-
class Monitor():
|
5
|
-
def __init__(self, index: int, screen: QScreen):
|
6
|
-
"""
|
7
|
-
Constructor for the Monitor class.
|
8
|
-
|
9
|
-
Parameters
|
10
|
-
----------
|
11
|
-
index : int
|
12
|
-
Index of the monitor.
|
13
|
-
screen : QScreen
|
14
|
-
QScreen object of the monitor.
|
15
|
-
"""
|
16
|
-
super().__init__()
|
17
|
-
self.index = index
|
18
|
-
self.screen = screen
|
19
|
-
|
20
|
-
def capture(self, save_path: str, x: Optional[int] = None, y: Optional[int] = None, width: Optional[int] = None, height: Optional[int] = None):
|
21
|
-
"""
|
22
|
-
Captures the entire desktop screen.
|
23
|
-
|
24
|
-
Parameters
|
25
|
-
----------
|
26
|
-
save_path : str
|
27
|
-
Path to save the captured image. If not specified, it will be saved in the current directory.
|
28
|
-
x : int, optional
|
29
|
-
x-coordinate of the area to capture. Default is None.
|
30
|
-
y : int, optional
|
31
|
-
y-coordinate of the area to capture. Default is None.
|
32
|
-
width : int, optional
|
33
|
-
Width of the area to capture. Default is None.
|
34
|
-
height : int, optional
|
35
|
-
Height of the area to capture. Default is None.
|
36
|
-
|
37
|
-
Returns
|
38
|
-
-------
|
39
|
-
str or None
|
40
|
-
Returns the path of the saved image. Returns None if an error occurs.
|
41
|
-
|
42
|
-
Examples
|
43
|
-
--------
|
44
|
-
```python
|
45
|
-
app = Pyloid("Pyloid-App")
|
46
|
-
|
47
|
-
monitor = app.get_primary_monitor()
|
48
|
-
save_path = monitor.capture("screenshot.png")
|
49
|
-
print(f"Screenshot saved at: {save_path}")
|
50
|
-
```
|
51
|
-
"""
|
52
|
-
try:
|
53
|
-
screenshot = self.screen.grabWindow(0, x, y, width, height)
|
54
|
-
screenshot.save(save_path)
|
55
|
-
return save_path
|
56
|
-
|
57
|
-
except Exception as e:
|
58
|
-
print(f"Error occurred while capturing the desktop: {e}")
|
59
|
-
return None
|
60
|
-
|
61
|
-
def info(self) -> dict[str, Any]:
|
62
|
-
"""
|
63
|
-
Returns information about the monitor.
|
64
|
-
|
65
|
-
Returns
|
66
|
-
-------
|
67
|
-
dict[str, Any]
|
68
|
-
A dictionary containing monitor information.
|
69
|
-
|
70
|
-
Examples
|
71
|
-
--------
|
72
|
-
```python
|
73
|
-
app = Pyloid("Pyloid-App")
|
74
|
-
|
75
|
-
monitor = app.get_primary_monitor()
|
76
|
-
info = monitor.info()
|
77
|
-
print("Monitor Info:", info)
|
78
|
-
```
|
79
|
-
|
80
|
-
Output Example
|
81
|
-
--------------
|
82
|
-
```
|
83
|
-
{
|
84
|
-
"index": 0,
|
85
|
-
"name": "Primary Monitor",
|
86
|
-
"manufacturer": "Dell",
|
87
|
-
"model": "U2718Q",
|
88
|
-
"serial_number": "SN123456789",
|
89
|
-
"x": 0,
|
90
|
-
"y": 0,
|
91
|
-
"width": 2560,
|
92
|
-
"height": 1440,
|
93
|
-
"is_primary": True,
|
94
|
-
"geometry": {
|
95
|
-
"x": 0,
|
96
|
-
"y": 0,
|
97
|
-
"width": 2560,
|
98
|
-
"height": 1440,
|
99
|
-
},
|
100
|
-
"size": {
|
101
|
-
"width": 2560,
|
102
|
-
"height": 1440,
|
103
|
-
},
|
104
|
-
"available_geometry": {
|
105
|
-
"x": 0,
|
106
|
-
"y": 0,
|
107
|
-
"width": 2560,
|
108
|
-
"height": 1400,
|
109
|
-
},
|
110
|
-
"available_size": {
|
111
|
-
"width": 2560,
|
112
|
-
"height": 1400,
|
113
|
-
},
|
114
|
-
"virtual_geometry":{
|
115
|
-
"x": 0,
|
116
|
-
"y": 0,
|
117
|
-
"width": 5120,
|
118
|
-
"height": 1440,
|
119
|
-
},
|
120
|
-
"virtual_size": {
|
121
|
-
"width": 5120,
|
122
|
-
"height": 1440,
|
123
|
-
},
|
124
|
-
"available_virtual_geometry": {
|
125
|
-
"x": 0,
|
126
|
-
"y": 0,
|
127
|
-
"width": 5120,
|
128
|
-
"height": 1400,
|
129
|
-
},
|
130
|
-
"available_virtual_size": {
|
131
|
-
"width": 5120,
|
132
|
-
"height": 1400,
|
133
|
-
},
|
134
|
-
"physical_size": {
|
135
|
-
"width": 600,
|
136
|
-
"height": 340,
|
137
|
-
},
|
138
|
-
"depth": 24,
|
139
|
-
"device_pixel_ratio": 1.0,
|
140
|
-
"logical_dots_per_inch": 96.0,
|
141
|
-
"logical_dots_per_inch_x": 96.0,
|
142
|
-
"logical_dots_per_inch_y": 96.0,
|
143
|
-
"orientation": "Landscape",
|
144
|
-
"physical_dots_per_inch": 109.0,
|
145
|
-
"physical_dots_per_inch_x": 109.0,
|
146
|
-
"physical_dots_per_inch_y": 109.0,
|
147
|
-
"refresh_rate": 60.0,
|
148
|
-
}
|
149
|
-
```
|
150
|
-
"""
|
151
|
-
monitor = self.screen
|
152
|
-
|
153
|
-
monitor_data = {
|
154
|
-
"index": self.index,
|
155
|
-
"name": monitor.name(),
|
156
|
-
"manufacturer": monitor.manufacturer(),
|
157
|
-
"model": monitor.model(),
|
158
|
-
"serial_number": monitor.serialNumber(),
|
159
|
-
"x": monitor.geometry().x(),
|
160
|
-
"y": monitor.geometry().y(),
|
161
|
-
"width": monitor.size().width(),
|
162
|
-
"height": monitor.size().height(),
|
163
|
-
"is_primary": self.is_primary(),
|
164
|
-
"geometry": {
|
165
|
-
"x": monitor.geometry().x(),
|
166
|
-
"y": monitor.geometry().y(),
|
167
|
-
"width": monitor.geometry().width(),
|
168
|
-
"height": monitor.geometry().height(),
|
169
|
-
},
|
170
|
-
"size": {
|
171
|
-
"width": monitor.size().width(),
|
172
|
-
"height": monitor.size().height(),
|
173
|
-
},
|
174
|
-
"available_geometry": {
|
175
|
-
"x": monitor.availableGeometry().x(),
|
176
|
-
"y": monitor.availableGeometry().y(),
|
177
|
-
"width": monitor.availableGeometry().width(),
|
178
|
-
"height": monitor.availableGeometry().height(),
|
179
|
-
},
|
180
|
-
"available_size": {
|
181
|
-
"width": monitor.availableSize().width(),
|
182
|
-
"height": monitor.availableSize().height(),
|
183
|
-
},
|
184
|
-
"virtual_geometry":{
|
185
|
-
"x": monitor.virtualGeometry().x(),
|
186
|
-
"y": monitor.virtualGeometry().y(),
|
187
|
-
"width": monitor.virtualGeometry().width(),
|
188
|
-
"height": monitor.virtualGeometry().height(),
|
189
|
-
},
|
190
|
-
"virtual_size": {
|
191
|
-
"width": monitor.virtualSize().width(),
|
192
|
-
"height": monitor.virtualSize().height(),
|
193
|
-
},
|
194
|
-
"available_virtual_geometry": {
|
195
|
-
"x": monitor.availableVirtualGeometry().x(),
|
196
|
-
"y": monitor.availableVirtualGeometry().y(),
|
197
|
-
"width": monitor.availableVirtualGeometry().width(),
|
198
|
-
"height": monitor.availableVirtualGeometry().height(),
|
199
|
-
},
|
200
|
-
"available_virtual_size": {
|
201
|
-
"width": monitor.availableVirtualSize().width(),
|
202
|
-
"height": monitor.availableVirtualSize().height(),
|
203
|
-
},
|
204
|
-
"physical_size": {
|
205
|
-
"width": monitor.physicalSize().width(),
|
206
|
-
"height": monitor.physicalSize().height(),
|
207
|
-
},
|
208
|
-
"depth": monitor.depth(),
|
209
|
-
"device_pixel_ratio": monitor.devicePixelRatio(),
|
210
|
-
"logical_dots_per_inch": monitor.logicalDotsPerInch(),
|
211
|
-
"logical_dots_per_inch_x": monitor.logicalDotsPerInchX(),
|
212
|
-
"logical_dots_per_inch_y": monitor.logicalDotsPerInchY(),
|
213
|
-
"orientation": monitor.orientation().name,
|
214
|
-
"physical_dots_per_inch": monitor.physicalDotsPerInch(),
|
215
|
-
"physical_dots_per_inch_x": monitor.physicalDotsPerInchX(),
|
216
|
-
"physical_dots_per_inch_y": monitor.physicalDotsPerInchY(),
|
217
|
-
"refresh_rate": monitor.refreshRate(),
|
218
|
-
}
|
219
|
-
|
220
|
-
return monitor_data
|
221
|
-
|
222
|
-
def is_primary(self) -> bool:
|
223
|
-
"""
|
224
|
-
Checks if the monitor is the primary monitor.
|
225
|
-
|
226
|
-
Returns
|
227
|
-
-------
|
228
|
-
bool
|
229
|
-
Returns True if the monitor is the primary monitor, otherwise False.
|
230
|
-
|
231
|
-
Examples
|
232
|
-
--------
|
233
|
-
```python
|
234
|
-
app = Pyloid("Pyloid-App")
|
235
|
-
|
236
|
-
monitor = app.get_all_monitors()[1]
|
237
|
-
is_primary = monitor.is_primary()
|
238
|
-
print(f"Is primary monitor: {is_primary}") # False
|
239
|
-
```
|
240
|
-
"""
|
241
|
-
return self.index == 0
|
242
|
-
|
243
|
-
def size(self) -> dict[str, int]:
|
244
|
-
"""
|
245
|
-
Returns the size of the monitor.
|
246
|
-
|
247
|
-
Returns
|
248
|
-
-------
|
249
|
-
dict[str, int]
|
250
|
-
A dictionary containing the width and height of the monitor.
|
251
|
-
|
252
|
-
Examples
|
253
|
-
--------
|
254
|
-
```python
|
255
|
-
app = Pyloid("Pyloid-App")
|
256
|
-
|
257
|
-
monitor = app.get_primary_monitor()
|
258
|
-
size = monitor.size()
|
259
|
-
print("Monitor Size:", size)
|
260
|
-
```
|
261
|
-
"""
|
262
|
-
monitor = self.screen
|
263
|
-
return {
|
264
|
-
"width": monitor.size().width(),
|
265
|
-
"height": monitor.size().height(),
|
266
|
-
},
|
267
|
-
|
268
|
-
def geometry(self) -> dict[str, int]:
|
269
|
-
"""
|
270
|
-
Returns the geometry of the monitor.
|
271
|
-
|
272
|
-
Returns
|
273
|
-
-------
|
274
|
-
dict[str, int]
|
275
|
-
A dictionary containing the x and y coordinates, width, and height of the monitor.
|
276
|
-
|
277
|
-
Examples
|
278
|
-
--------
|
279
|
-
```python
|
280
|
-
app = Pyloid("Pyloid-App")
|
281
|
-
|
282
|
-
monitor = app.get_primary_monitor()
|
283
|
-
geometry = monitor.geometry()
|
284
|
-
print("Monitor Geometry:", geometry)
|
285
|
-
```
|
286
|
-
"""
|
287
|
-
monitor = self.screen
|
288
|
-
return {
|
289
|
-
"x": monitor.geometry().x(),
|
290
|
-
"y": monitor.geometry().y(),
|
291
|
-
"width": monitor.geometry().width(),
|
292
|
-
"height": monitor.geometry().height(),
|
293
|
-
}
|
294
|
-
|
295
|
-
def available_geometry(self) -> dict[str, int]:
|
296
|
-
"""
|
297
|
-
Returns the available geometry of the monitor.
|
298
|
-
|
299
|
-
The available geometry refers to the portion of the monitor's geometry that is not occupied by system UI elements such as taskbars or docks.
|
300
|
-
|
301
|
-
Returns
|
302
|
-
-------
|
303
|
-
dict[str, int]
|
304
|
-
A dictionary containing the x and y coordinates, width, and height of the available geometry.
|
305
|
-
|
306
|
-
Examples
|
307
|
-
--------
|
308
|
-
```python
|
309
|
-
app = Pyloid("Pyloid-App")
|
310
|
-
|
311
|
-
monitor = app.get_primary_monitor()
|
312
|
-
available_geometry = monitor.available_geometry()
|
313
|
-
print("Available Geometry:", available_geometry)
|
314
|
-
```
|
315
|
-
"""
|
316
|
-
monitor = self.screen
|
317
|
-
return {
|
318
|
-
"x": monitor.availableGeometry().x(),
|
319
|
-
"y": monitor.availableGeometry().y(),
|
320
|
-
"width": monitor.availableGeometry().width(),
|
321
|
-
"height": monitor.availableGeometry().height(),
|
322
|
-
}
|
323
|
-
|
324
|
-
def available_size(self) -> dict[str, int]:
|
325
|
-
"""
|
326
|
-
Returns the available size of the monitor.
|
327
|
-
|
328
|
-
The available size refers to the portion of the monitor's size that is not occupied by system UI elements such as taskbars or docks.
|
329
|
-
|
330
|
-
Returns
|
331
|
-
-------
|
332
|
-
dict[str, int]
|
333
|
-
A dictionary containing the width and height of the available size.
|
334
|
-
|
335
|
-
Examples
|
336
|
-
--------
|
337
|
-
```python
|
338
|
-
app = Pyloid("Pyloid-App")
|
339
|
-
|
340
|
-
monitor = app.get_primary_monitor()
|
341
|
-
available_size = monitor.available_size()
|
342
|
-
print("Available Size:", available_size)
|
343
|
-
```
|
344
|
-
"""
|
345
|
-
monitor = self.screen
|
346
|
-
return {
|
347
|
-
"width": monitor.availableSize().width(),
|
348
|
-
"height": monitor.availableSize().height(),
|
349
|
-
}
|
350
|
-
|
351
|
-
def virtual_geometry(self) -> dict[str, int]:
|
352
|
-
"""
|
353
|
-
Returns the virtual geometry of the monitor.
|
354
|
-
|
355
|
-
The virtual geometry refers to the combined geometry of all monitors in a multi-monitor setup.
|
356
|
-
|
357
|
-
Returns
|
358
|
-
-------
|
359
|
-
dict[str, int]
|
360
|
-
A dictionary containing the x and y coordinates, width, and height of the virtual geometry.
|
361
|
-
|
362
|
-
Examples
|
363
|
-
--------
|
364
|
-
```python
|
365
|
-
app = Pyloid("Pyloid-App")
|
366
|
-
|
367
|
-
monitor = app.get_primary_monitor()
|
368
|
-
virtual_geometry = monitor.virtual_geometry()
|
369
|
-
print("Virtual Geometry:", virtual_geometry)
|
370
|
-
```
|
371
|
-
"""
|
372
|
-
monitor = self.screen
|
373
|
-
return {
|
374
|
-
"x": monitor.virtualGeometry().x(),
|
375
|
-
"y": monitor.virtualGeometry().y(),
|
376
|
-
"width": monitor.virtualGeometry().width(),
|
377
|
-
"height": monitor.virtualGeometry().height(),
|
378
|
-
}
|
379
|
-
|
380
|
-
def virtual_size(self) -> dict[str, int]:
|
381
|
-
"""
|
382
|
-
Returns the virtual size of the monitor.
|
383
|
-
|
384
|
-
The virtual size refers to the combined size of all monitors in a multi-monitor setup.
|
385
|
-
|
386
|
-
Returns
|
387
|
-
-------
|
388
|
-
dict[str, int]
|
389
|
-
A dictionary containing the width and height of the virtual size.
|
390
|
-
|
391
|
-
Examples
|
392
|
-
--------
|
393
|
-
```python
|
394
|
-
app = Pyloid("Pyloid-App")
|
395
|
-
|
396
|
-
monitor = app.get_primary_monitor()
|
397
|
-
virtual_size = monitor.virtual_size()
|
398
|
-
print("Virtual Size:", virtual_size)
|
399
|
-
```
|
400
|
-
"""
|
401
|
-
monitor = self.screen
|
402
|
-
return {
|
403
|
-
"width": monitor.virtualSize().width(),
|
404
|
-
"height": monitor.virtualSize().height(),
|
405
|
-
}
|
406
|
-
|
407
|
-
def available_virtual_geometry(self) -> dict[str, int]:
|
408
|
-
"""
|
409
|
-
Returns the available virtual geometry of the monitor.
|
410
|
-
|
411
|
-
The available virtual geometry refers to the portion of the virtual geometry that is not occupied by system UI elements such as taskbars or docks.
|
412
|
-
|
413
|
-
Returns
|
414
|
-
-------
|
415
|
-
dict[str, int]
|
416
|
-
A dictionary containing the x and y coordinates, width, and height of the available virtual geometry.
|
417
|
-
|
418
|
-
Examples
|
419
|
-
--------
|
420
|
-
```python
|
421
|
-
app = Pyloid("Pyloid-App")
|
422
|
-
|
423
|
-
monitor = app.get_primary_monitor()
|
424
|
-
available_virtual_geometry = monitor.available_virtual_geometry()
|
425
|
-
print("Available Virtual Geometry:", available_virtual_geometry)
|
426
|
-
```
|
427
|
-
"""
|
428
|
-
monitor = self.screen
|
429
|
-
return {
|
430
|
-
"x": monitor.availableVirtualGeometry().x(),
|
431
|
-
"y": monitor.availableVirtualGeometry().y(),
|
432
|
-
"width": monitor.availableVirtualGeometry().width(),
|
433
|
-
"height": monitor.availableVirtualGeometry().height(),
|
434
|
-
}
|
435
|
-
|
436
|
-
def available_virtual_size(self) -> dict[str, int]:
|
437
|
-
"""
|
438
|
-
Returns the available virtual size of the monitor.
|
439
|
-
|
440
|
-
The available virtual size refers to the portion of the virtual size that is not occupied by system UI elements such as taskbars or docks.
|
441
|
-
|
442
|
-
Returns
|
443
|
-
-------
|
444
|
-
dict[str, int]
|
445
|
-
A dictionary containing the width and height of the available virtual size.
|
446
|
-
|
447
|
-
Examples
|
448
|
-
--------
|
449
|
-
```python
|
450
|
-
app = Pyloid("Pyloid-App")
|
451
|
-
|
452
|
-
monitor = app.get_primary_monitor()
|
453
|
-
available_virtual_size = monitor.available_virtual_size()
|
454
|
-
print("Available Virtual Size:", available_virtual_size)
|
455
|
-
```
|
456
|
-
"""
|
457
|
-
monitor = self.screen
|
458
|
-
return {
|
459
|
-
"width": monitor.availableVirtualSize().width(),
|
460
|
-
"height": monitor.availableVirtualSize().height(),
|
461
|
-
}
|
462
|
-
|
463
|
-
def physical_size(self) -> dict[str, float]:
|
464
|
-
"""
|
465
|
-
Returns the physical size of the monitor.
|
466
|
-
|
467
|
-
The physical size refers to the actual physical dimensions of the monitor.
|
468
|
-
|
469
|
-
Returns
|
470
|
-
-------
|
471
|
-
dict[str, float]
|
472
|
-
A dictionary containing the width and height of the physical size.
|
473
|
-
|
474
|
-
Examples
|
475
|
-
--------
|
476
|
-
```python
|
477
|
-
app = Pyloid("Pyloid-App")
|
478
|
-
|
479
|
-
monitor = app.get_primary_monitor()
|
480
|
-
physical_size = monitor.physical_size()
|
481
|
-
print("Physical Size:", physical_size)
|
482
|
-
```
|
483
|
-
"""
|
484
|
-
monitor = self.screen
|
485
|
-
return {
|
486
|
-
"width": monitor.physicalSize().width(),
|
487
|
-
"height": monitor.physicalSize().height(),
|
488
|
-
}
|
489
|
-
|
490
|
-
def depth(self) -> int:
|
491
|
-
"""
|
492
|
-
Returns the depth of the monitor.
|
493
|
-
|
494
|
-
The depth refers to the color depth of the monitor, which is the number of bits used to represent the color of a single pixel.
|
495
|
-
|
496
|
-
Returns
|
497
|
-
-------
|
498
|
-
int
|
499
|
-
The color depth of the monitor.
|
500
|
-
|
501
|
-
Examples
|
502
|
-
--------
|
503
|
-
```python
|
504
|
-
app = Pyloid("Pyloid-App")
|
505
|
-
|
506
|
-
monitor = app.get_primary_monitor()
|
507
|
-
depth = monitor.depth()
|
508
|
-
print("Color Depth:", depth)
|
509
|
-
```
|
510
|
-
"""
|
511
|
-
monitor = self.screen
|
512
|
-
return monitor.depth()
|
513
|
-
|
514
|
-
def device_pixel_ratio(self) -> float:
|
515
|
-
"""
|
516
|
-
Returns the device pixel ratio of the monitor.
|
517
|
-
|
518
|
-
The device pixel ratio is the ratio between physical pixels and device-independent pixels (DIPs).
|
519
|
-
|
520
|
-
Returns
|
521
|
-
-------
|
522
|
-
float
|
523
|
-
The device pixel ratio of the monitor.
|
524
|
-
|
525
|
-
Examples
|
526
|
-
--------
|
527
|
-
```python
|
528
|
-
app = Pyloid("Pyloid-App")
|
529
|
-
|
530
|
-
monitor = app.get_primary_monitor()
|
531
|
-
device_pixel_ratio = monitor.device_pixel_ratio()
|
532
|
-
print("Device Pixel Ratio:", device_pixel_ratio)
|
533
|
-
```
|
534
|
-
"""
|
535
|
-
monitor = self.screen
|
536
|
-
return monitor.devicePixelRatio()
|
537
|
-
|
538
|
-
def logical_dots_per_inch(self) -> float:
|
539
|
-
"""
|
540
|
-
Returns the logical dots per inch (DPI) of the monitor.
|
541
|
-
|
542
|
-
The logical DPI is the number of device-independent pixels (DIPs) per inch.
|
543
|
-
|
544
|
-
Returns
|
545
|
-
-------
|
546
|
-
float
|
547
|
-
The logical DPI of the monitor.
|
548
|
-
|
549
|
-
Examples
|
550
|
-
--------
|
551
|
-
```python
|
552
|
-
app = Pyloid("Pyloid-App")
|
553
|
-
|
554
|
-
monitor = app.get_primary_monitor()
|
555
|
-
logical_dpi = monitor.logical_dots_per_inch()
|
556
|
-
print("Logical DPI:", logical_dpi)
|
557
|
-
```
|
558
|
-
"""
|
559
|
-
monitor = self.screen
|
560
|
-
return monitor.logicalDotsPerInch()
|
561
|
-
|
562
|
-
def logical_dots_per_inch_x(self) -> float:
|
563
|
-
"""
|
564
|
-
Returns the logical dots per inch (DPI) along the X axis of the monitor.
|
565
|
-
|
566
|
-
The logical DPI along the X axis is the number of device-independent pixels (DIPs) per inch along the horizontal axis.
|
567
|
-
|
568
|
-
Returns
|
569
|
-
-------
|
570
|
-
float
|
571
|
-
The logical DPI along the X axis of the monitor.
|
572
|
-
|
573
|
-
Examples
|
574
|
-
--------
|
575
|
-
```python
|
576
|
-
app = Pyloid("Pyloid-App")
|
577
|
-
|
578
|
-
monitor = app.get_primary_monitor()
|
579
|
-
logical_dpi_x = monitor.logical_dots_per_inch_x()
|
580
|
-
print("Logical DPI X:", logical_dpi_x)
|
581
|
-
```
|
582
|
-
"""
|
583
|
-
monitor = self.screen
|
584
|
-
return monitor.logicalDotsPerInchX()
|
585
|
-
|
586
|
-
def logical_dots_per_inch_y(self) -> float:
|
587
|
-
"""
|
588
|
-
Returns the logical dots per inch (DPI) along the Y axis of the monitor.
|
589
|
-
|
590
|
-
The logical DPI along the Y axis is the number of device-independent pixels (DIPs) per inch along the vertical axis.
|
591
|
-
|
592
|
-
Returns
|
593
|
-
-------
|
594
|
-
float
|
595
|
-
The logical DPI along the Y axis of the monitor.
|
596
|
-
|
597
|
-
Examples
|
598
|
-
--------
|
599
|
-
```python
|
600
|
-
app = Pyloid("Pyloid-App")
|
601
|
-
|
602
|
-
monitor = app.get_primary_monitor()
|
603
|
-
logical_dpi_y = monitor.logical_dots_per_inch_y()
|
604
|
-
print("Logical DPI Y:", logical_dpi_y)
|
605
|
-
```
|
606
|
-
"""
|
607
|
-
monitor = self.screen
|
608
|
-
return monitor.logicalDotsPerInchY()
|
609
|
-
|
610
|
-
def orientation(self) -> str:
|
611
|
-
"""
|
612
|
-
Returns the orientation of the monitor.
|
613
|
-
|
614
|
-
The orientation refers to the current orientation of the monitor, such as landscape or portrait.
|
615
|
-
|
616
|
-
Returns
|
617
|
-
-------
|
618
|
-
str
|
619
|
-
The orientation of the monitor.
|
620
|
-
|
621
|
-
Examples
|
622
|
-
--------
|
623
|
-
```python
|
624
|
-
app = Pyloid("Pyloid-App")
|
625
|
-
|
626
|
-
monitor = app.get_primary_monitor()
|
627
|
-
orientation = monitor.orientation()
|
628
|
-
print("Orientation:", orientation)
|
629
|
-
```
|
630
|
-
"""
|
631
|
-
monitor = self.screen
|
632
|
-
return monitor.orientation().name
|
633
|
-
|
634
|
-
def physical_dots_per_inch(self) -> float:
|
635
|
-
"""
|
636
|
-
Returns the physical dots per inch (DPI) of the monitor.
|
637
|
-
|
638
|
-
The physical DPI is the number of physical pixels per inch.
|
639
|
-
|
640
|
-
Returns
|
641
|
-
-------
|
642
|
-
float
|
643
|
-
The physical DPI of the monitor.
|
644
|
-
|
645
|
-
Examples
|
646
|
-
--------
|
647
|
-
```python
|
648
|
-
app = Pyloid("Pyloid-App")
|
649
|
-
|
650
|
-
monitor = app.get_primary_monitor()
|
651
|
-
physical_dpi = monitor.physical_dots_per_inch()
|
652
|
-
print("Physical DPI:", physical_dpi)
|
653
|
-
```
|
654
|
-
"""
|
655
|
-
monitor = self.screen
|
656
|
-
return monitor.physicalDotsPerInch()
|
657
|
-
|
658
|
-
def physical_dots_per_inch_x(self) -> float:
|
659
|
-
"""
|
660
|
-
Returns the physical dots per inch (DPI) along the X axis of the monitor.
|
661
|
-
|
662
|
-
The physical DPI along the X axis is the number of physical pixels per inch along the horizontal axis.
|
663
|
-
|
664
|
-
Returns
|
665
|
-
-------
|
666
|
-
float
|
667
|
-
The physical DPI along the X axis of the monitor.
|
668
|
-
|
669
|
-
Examples
|
670
|
-
--------
|
671
|
-
```python
|
672
|
-
app = Pyloid("Pyloid-App")
|
673
|
-
|
674
|
-
monitor = app.get_primary_monitor()
|
675
|
-
physical_dpi_x = monitor.physical_dots_per_inch_x()
|
676
|
-
print("Physical DPI X:", physical_dpi_x)
|
677
|
-
```
|
678
|
-
"""
|
679
|
-
monitor = self.screen
|
680
|
-
return monitor.physicalDotsPerInchX()
|
681
|
-
|
682
|
-
def physical_dots_per_inch_y(self) -> float:
|
683
|
-
"""
|
684
|
-
Returns the physical dots per inch (DPI) along the Y axis of the monitor.
|
685
|
-
|
686
|
-
The physical DPI along the Y axis is the number of physical pixels per inch along the vertical axis.
|
687
|
-
|
688
|
-
Returns
|
689
|
-
-------
|
690
|
-
float
|
691
|
-
The physical DPI along the Y axis of the monitor.
|
692
|
-
|
693
|
-
Examples
|
694
|
-
--------
|
695
|
-
```python
|
696
|
-
app = Pyloid("Pyloid-App")
|
697
|
-
|
698
|
-
monitor = app.get_primary_monitor()
|
699
|
-
physical_dpi_y = monitor.physical_dots_per_inch_y()
|
700
|
-
print("Physical DPI Y:", physical_dpi_y)
|
701
|
-
```
|
702
|
-
"""
|
703
|
-
monitor = self.screen
|
704
|
-
return monitor.physicalDotsPerInchY()
|
705
|
-
|
706
|
-
def refresh_rate(self) -> float:
|
707
|
-
"""
|
708
|
-
Returns the refresh rate of the monitor.
|
709
|
-
|
710
|
-
The refresh rate is the number of times the monitor updates with new information per second, measured in Hertz (Hz).
|
711
|
-
|
712
|
-
Returns
|
713
|
-
-------
|
714
|
-
float
|
715
|
-
The refresh rate of the monitor.
|
716
|
-
|
717
|
-
Examples
|
718
|
-
--------
|
719
|
-
```python
|
720
|
-
app = Pyloid("Pyloid-App")
|
721
|
-
|
722
|
-
monitor = app.get_primary_monitor()
|
723
|
-
refresh_rate = monitor.refresh_rate()
|
724
|
-
print("Refresh Rate:", refresh_rate)
|
725
|
-
```
|
726
|
-
"""
|
727
|
-
monitor = self.screen
|
728
|
-
return monitor.refreshRate()
|
729
|
-
|
730
|
-
def manufacturer(self) -> str:
|
731
|
-
"""
|
732
|
-
Returns the manufacturer of the monitor.
|
733
|
-
|
734
|
-
The manufacturer refers to the company that produced the monitor.
|
735
|
-
|
736
|
-
Returns
|
737
|
-
-------
|
738
|
-
str
|
739
|
-
The manufacturer of the monitor.
|
740
|
-
|
741
|
-
Examples
|
742
|
-
--------
|
743
|
-
```python
|
744
|
-
app = Pyloid("Pyloid-App")
|
745
|
-
|
746
|
-
monitor = app.get_primary_monitor()
|
747
|
-
manufacturer = monitor.manufacturer()
|
748
|
-
print("Manufacturer:", manufacturer)
|
749
|
-
```
|
750
|
-
"""
|
751
|
-
monitor = self.screen
|
752
|
-
return monitor.manufacturer()
|
753
|
-
|
754
|
-
def model(self) -> str:
|
755
|
-
"""
|
756
|
-
Returns the model of the monitor.
|
757
|
-
|
758
|
-
The model refers to the specific model name or number assigned by the manufacturer.
|
759
|
-
|
760
|
-
Returns
|
761
|
-
-------
|
762
|
-
str
|
763
|
-
The model of the monitor.
|
764
|
-
|
765
|
-
Examples
|
766
|
-
--------
|
767
|
-
```python
|
768
|
-
app = Pyloid("Pyloid-App")
|
769
|
-
|
770
|
-
monitor = app.get_primary_monitor()
|
771
|
-
model = monitor.model()
|
772
|
-
print("Model:", model)
|
773
|
-
```
|
774
|
-
"""
|
775
|
-
monitor = self.screen
|
776
|
-
return monitor.model()
|
777
|
-
|
778
|
-
def name(self) -> str:
|
779
|
-
"""
|
780
|
-
Returns the name of the monitor.
|
781
|
-
|
782
|
-
The name refers to the user-friendly name assigned to the monitor.
|
783
|
-
|
784
|
-
Returns
|
785
|
-
-------
|
786
|
-
str
|
787
|
-
The name of the monitor.
|
788
|
-
|
789
|
-
Examples
|
790
|
-
--------
|
791
|
-
```python
|
792
|
-
app = Pyloid("Pyloid-App")
|
793
|
-
|
794
|
-
monitor = app.get_primary_monitor()
|
795
|
-
name = monitor.name()
|
796
|
-
print("Name:", name)
|
797
|
-
```
|
798
|
-
"""
|
799
|
-
monitor = self.screen
|
800
|
-
return monitor.name()
|
801
|
-
|
802
|
-
def serial_number(self) -> str:
|
803
|
-
"""
|
804
|
-
Returns the serial number of the monitor.
|
805
|
-
|
806
|
-
The serial number is a unique identifier assigned to the monitor by the manufacturer.
|
807
|
-
|
808
|
-
Returns
|
809
|
-
-------
|
810
|
-
str
|
811
|
-
The serial number of the monitor.
|
812
|
-
|
813
|
-
Examples
|
814
|
-
--------
|
815
|
-
```python
|
816
|
-
app = Pyloid("Pyloid-App")
|
817
|
-
|
818
|
-
monitor = app.get_primary_monitor()
|
819
|
-
serial_number = monitor.serial_number()
|
820
|
-
print("Serial Number:", serial_number)
|
821
|
-
```
|
822
|
-
"""
|
823
|
-
monitor = self.screen
|
824
|
-
return monitor.serialNumber()
|
825
|
-
|
826
|
-
def geometry_changed(self, callback: Callable):
|
827
|
-
"""
|
828
|
-
Registers a callback for the event that occurs when the geometry of the monitor changes.
|
829
|
-
|
830
|
-
Parameters
|
831
|
-
----------
|
832
|
-
callback : Callable
|
833
|
-
The function to be called when the geometry changes.
|
834
|
-
|
835
|
-
Examples
|
836
|
-
--------
|
837
|
-
```python
|
838
|
-
app = Pyloid("Pyloid-App")
|
839
|
-
|
840
|
-
def on_geometry_changed():
|
841
|
-
print("Geometry changed!")
|
842
|
-
|
843
|
-
monitor = app.get_primary_monitor()
|
844
|
-
monitor.geometry_changed(on_geometry_changed)
|
845
|
-
```
|
846
|
-
"""
|
847
|
-
monitor = self.screen
|
848
|
-
monitor.geometryChanged.connect(callback)
|
849
|
-
|
850
|
-
def orientation_changed(self, callback: Callable):
|
851
|
-
"""
|
852
|
-
Registers a callback for the event that occurs when the orientation of the monitor changes.
|
853
|
-
|
854
|
-
Parameters
|
855
|
-
----------
|
856
|
-
callback : Callable
|
857
|
-
The function to be called when the orientation changes.
|
858
|
-
|
859
|
-
Examples
|
860
|
-
--------
|
861
|
-
```python
|
862
|
-
app = Pyloid("Pyloid-App")
|
863
|
-
|
864
|
-
def on_orientation_changed():
|
865
|
-
print("Orientation changed!")
|
866
|
-
|
867
|
-
monitor = app.get_primary_monitor()
|
868
|
-
monitor.orientation_changed(on_orientation_changed)
|
869
|
-
```
|
870
|
-
"""
|
871
|
-
monitor = self.screen
|
872
|
-
monitor.orientationChanged.connect(callback)
|
873
|
-
|
874
|
-
def refresh_rate_changed(self, callback: Callable):
|
875
|
-
"""
|
876
|
-
Registers a callback for the event that occurs when the refresh rate of the monitor changes.
|
877
|
-
|
878
|
-
Parameters
|
879
|
-
----------
|
880
|
-
callback : Callable
|
881
|
-
The function to be called when the refresh rate changes.
|
882
|
-
|
883
|
-
Examples
|
884
|
-
--------
|
885
|
-
```python
|
886
|
-
app = Pyloid("Pyloid-App")
|
887
|
-
|
888
|
-
def on_refresh_rate_changed():
|
889
|
-
print("Refresh rate changed!")
|
890
|
-
|
891
|
-
monitor = app.get_primary_monitor()
|
892
|
-
monitor.refresh_rate_changed(on_refresh_rate_changed)
|
893
|
-
```
|
894
|
-
"""
|
895
|
-
monitor = self.screen
|
896
|
-
monitor.refreshRateChanged.connect(callback)
|
897
|
-
|
898
|
-
def virtual_geometry_changed(self, callback: Callable):
|
899
|
-
"""
|
900
|
-
Registers a callback for the event that occurs when the virtual geometry of the monitor changes.
|
901
|
-
|
902
|
-
Parameters
|
903
|
-
----------
|
904
|
-
callback : Callable
|
905
|
-
The function to be called when the virtual geometry changes.
|
906
|
-
|
907
|
-
Examples
|
908
|
-
--------
|
909
|
-
```python
|
910
|
-
app = Pyloid("Pyloid-App")
|
911
|
-
|
912
|
-
def on_virtual_geometry_changed():
|
913
|
-
print("Virtual geometry changed!")
|
914
|
-
|
915
|
-
monitor = app.get_primary_monitor()
|
916
|
-
monitor.virtual_geometry_changed(on_virtual_geometry_changed)
|
917
|
-
```
|
918
|
-
"""
|
919
|
-
monitor = self.screen
|
920
|
-
monitor.virtualGeometryChanged.connect(callback)
|
921
|
-
|
1
|
+
from PySide6.QtGui import QScreen
|
2
|
+
from typing import Optional, Callable, Any
|
3
|
+
|
4
|
+
class Monitor():
|
5
|
+
def __init__(self, index: int, screen: QScreen):
|
6
|
+
"""
|
7
|
+
Constructor for the Monitor class.
|
8
|
+
|
9
|
+
Parameters
|
10
|
+
----------
|
11
|
+
index : int
|
12
|
+
Index of the monitor.
|
13
|
+
screen : QScreen
|
14
|
+
QScreen object of the monitor.
|
15
|
+
"""
|
16
|
+
super().__init__()
|
17
|
+
self.index = index
|
18
|
+
self.screen = screen
|
19
|
+
|
20
|
+
def capture(self, save_path: str, x: Optional[int] = None, y: Optional[int] = None, width: Optional[int] = None, height: Optional[int] = None):
|
21
|
+
"""
|
22
|
+
Captures the entire desktop screen.
|
23
|
+
|
24
|
+
Parameters
|
25
|
+
----------
|
26
|
+
save_path : str
|
27
|
+
Path to save the captured image. If not specified, it will be saved in the current directory.
|
28
|
+
x : int, optional
|
29
|
+
x-coordinate of the area to capture. Default is None.
|
30
|
+
y : int, optional
|
31
|
+
y-coordinate of the area to capture. Default is None.
|
32
|
+
width : int, optional
|
33
|
+
Width of the area to capture. Default is None.
|
34
|
+
height : int, optional
|
35
|
+
Height of the area to capture. Default is None.
|
36
|
+
|
37
|
+
Returns
|
38
|
+
-------
|
39
|
+
str or None
|
40
|
+
Returns the path of the saved image. Returns None if an error occurs.
|
41
|
+
|
42
|
+
Examples
|
43
|
+
--------
|
44
|
+
```python
|
45
|
+
app = Pyloid("Pyloid-App")
|
46
|
+
|
47
|
+
monitor = app.get_primary_monitor()
|
48
|
+
save_path = monitor.capture("screenshot.png")
|
49
|
+
print(f"Screenshot saved at: {save_path}")
|
50
|
+
```
|
51
|
+
"""
|
52
|
+
try:
|
53
|
+
screenshot = self.screen.grabWindow(0, x, y, width, height)
|
54
|
+
screenshot.save(save_path)
|
55
|
+
return save_path
|
56
|
+
|
57
|
+
except Exception as e:
|
58
|
+
print(f"Error occurred while capturing the desktop: {e}")
|
59
|
+
return None
|
60
|
+
|
61
|
+
def info(self) -> dict[str, Any]:
|
62
|
+
"""
|
63
|
+
Returns information about the monitor.
|
64
|
+
|
65
|
+
Returns
|
66
|
+
-------
|
67
|
+
dict[str, Any]
|
68
|
+
A dictionary containing monitor information.
|
69
|
+
|
70
|
+
Examples
|
71
|
+
--------
|
72
|
+
```python
|
73
|
+
app = Pyloid("Pyloid-App")
|
74
|
+
|
75
|
+
monitor = app.get_primary_monitor()
|
76
|
+
info = monitor.info()
|
77
|
+
print("Monitor Info:", info)
|
78
|
+
```
|
79
|
+
|
80
|
+
Output Example
|
81
|
+
--------------
|
82
|
+
```
|
83
|
+
{
|
84
|
+
"index": 0,
|
85
|
+
"name": "Primary Monitor",
|
86
|
+
"manufacturer": "Dell",
|
87
|
+
"model": "U2718Q",
|
88
|
+
"serial_number": "SN123456789",
|
89
|
+
"x": 0,
|
90
|
+
"y": 0,
|
91
|
+
"width": 2560,
|
92
|
+
"height": 1440,
|
93
|
+
"is_primary": True,
|
94
|
+
"geometry": {
|
95
|
+
"x": 0,
|
96
|
+
"y": 0,
|
97
|
+
"width": 2560,
|
98
|
+
"height": 1440,
|
99
|
+
},
|
100
|
+
"size": {
|
101
|
+
"width": 2560,
|
102
|
+
"height": 1440,
|
103
|
+
},
|
104
|
+
"available_geometry": {
|
105
|
+
"x": 0,
|
106
|
+
"y": 0,
|
107
|
+
"width": 2560,
|
108
|
+
"height": 1400,
|
109
|
+
},
|
110
|
+
"available_size": {
|
111
|
+
"width": 2560,
|
112
|
+
"height": 1400,
|
113
|
+
},
|
114
|
+
"virtual_geometry":{
|
115
|
+
"x": 0,
|
116
|
+
"y": 0,
|
117
|
+
"width": 5120,
|
118
|
+
"height": 1440,
|
119
|
+
},
|
120
|
+
"virtual_size": {
|
121
|
+
"width": 5120,
|
122
|
+
"height": 1440,
|
123
|
+
},
|
124
|
+
"available_virtual_geometry": {
|
125
|
+
"x": 0,
|
126
|
+
"y": 0,
|
127
|
+
"width": 5120,
|
128
|
+
"height": 1400,
|
129
|
+
},
|
130
|
+
"available_virtual_size": {
|
131
|
+
"width": 5120,
|
132
|
+
"height": 1400,
|
133
|
+
},
|
134
|
+
"physical_size": {
|
135
|
+
"width": 600,
|
136
|
+
"height": 340,
|
137
|
+
},
|
138
|
+
"depth": 24,
|
139
|
+
"device_pixel_ratio": 1.0,
|
140
|
+
"logical_dots_per_inch": 96.0,
|
141
|
+
"logical_dots_per_inch_x": 96.0,
|
142
|
+
"logical_dots_per_inch_y": 96.0,
|
143
|
+
"orientation": "Landscape",
|
144
|
+
"physical_dots_per_inch": 109.0,
|
145
|
+
"physical_dots_per_inch_x": 109.0,
|
146
|
+
"physical_dots_per_inch_y": 109.0,
|
147
|
+
"refresh_rate": 60.0,
|
148
|
+
}
|
149
|
+
```
|
150
|
+
"""
|
151
|
+
monitor = self.screen
|
152
|
+
|
153
|
+
monitor_data = {
|
154
|
+
"index": self.index,
|
155
|
+
"name": monitor.name(),
|
156
|
+
"manufacturer": monitor.manufacturer(),
|
157
|
+
"model": monitor.model(),
|
158
|
+
"serial_number": monitor.serialNumber(),
|
159
|
+
"x": monitor.geometry().x(),
|
160
|
+
"y": monitor.geometry().y(),
|
161
|
+
"width": monitor.size().width(),
|
162
|
+
"height": monitor.size().height(),
|
163
|
+
"is_primary": self.is_primary(),
|
164
|
+
"geometry": {
|
165
|
+
"x": monitor.geometry().x(),
|
166
|
+
"y": monitor.geometry().y(),
|
167
|
+
"width": monitor.geometry().width(),
|
168
|
+
"height": monitor.geometry().height(),
|
169
|
+
},
|
170
|
+
"size": {
|
171
|
+
"width": monitor.size().width(),
|
172
|
+
"height": monitor.size().height(),
|
173
|
+
},
|
174
|
+
"available_geometry": {
|
175
|
+
"x": monitor.availableGeometry().x(),
|
176
|
+
"y": monitor.availableGeometry().y(),
|
177
|
+
"width": monitor.availableGeometry().width(),
|
178
|
+
"height": monitor.availableGeometry().height(),
|
179
|
+
},
|
180
|
+
"available_size": {
|
181
|
+
"width": monitor.availableSize().width(),
|
182
|
+
"height": monitor.availableSize().height(),
|
183
|
+
},
|
184
|
+
"virtual_geometry":{
|
185
|
+
"x": monitor.virtualGeometry().x(),
|
186
|
+
"y": monitor.virtualGeometry().y(),
|
187
|
+
"width": monitor.virtualGeometry().width(),
|
188
|
+
"height": monitor.virtualGeometry().height(),
|
189
|
+
},
|
190
|
+
"virtual_size": {
|
191
|
+
"width": monitor.virtualSize().width(),
|
192
|
+
"height": monitor.virtualSize().height(),
|
193
|
+
},
|
194
|
+
"available_virtual_geometry": {
|
195
|
+
"x": monitor.availableVirtualGeometry().x(),
|
196
|
+
"y": monitor.availableVirtualGeometry().y(),
|
197
|
+
"width": monitor.availableVirtualGeometry().width(),
|
198
|
+
"height": monitor.availableVirtualGeometry().height(),
|
199
|
+
},
|
200
|
+
"available_virtual_size": {
|
201
|
+
"width": monitor.availableVirtualSize().width(),
|
202
|
+
"height": monitor.availableVirtualSize().height(),
|
203
|
+
},
|
204
|
+
"physical_size": {
|
205
|
+
"width": monitor.physicalSize().width(),
|
206
|
+
"height": monitor.physicalSize().height(),
|
207
|
+
},
|
208
|
+
"depth": monitor.depth(),
|
209
|
+
"device_pixel_ratio": monitor.devicePixelRatio(),
|
210
|
+
"logical_dots_per_inch": monitor.logicalDotsPerInch(),
|
211
|
+
"logical_dots_per_inch_x": monitor.logicalDotsPerInchX(),
|
212
|
+
"logical_dots_per_inch_y": monitor.logicalDotsPerInchY(),
|
213
|
+
"orientation": monitor.orientation().name,
|
214
|
+
"physical_dots_per_inch": monitor.physicalDotsPerInch(),
|
215
|
+
"physical_dots_per_inch_x": monitor.physicalDotsPerInchX(),
|
216
|
+
"physical_dots_per_inch_y": monitor.physicalDotsPerInchY(),
|
217
|
+
"refresh_rate": monitor.refreshRate(),
|
218
|
+
}
|
219
|
+
|
220
|
+
return monitor_data
|
221
|
+
|
222
|
+
def is_primary(self) -> bool:
|
223
|
+
"""
|
224
|
+
Checks if the monitor is the primary monitor.
|
225
|
+
|
226
|
+
Returns
|
227
|
+
-------
|
228
|
+
bool
|
229
|
+
Returns True if the monitor is the primary monitor, otherwise False.
|
230
|
+
|
231
|
+
Examples
|
232
|
+
--------
|
233
|
+
```python
|
234
|
+
app = Pyloid("Pyloid-App")
|
235
|
+
|
236
|
+
monitor = app.get_all_monitors()[1]
|
237
|
+
is_primary = monitor.is_primary()
|
238
|
+
print(f"Is primary monitor: {is_primary}") # False
|
239
|
+
```
|
240
|
+
"""
|
241
|
+
return self.index == 0
|
242
|
+
|
243
|
+
def size(self) -> dict[str, int]:
|
244
|
+
"""
|
245
|
+
Returns the size of the monitor.
|
246
|
+
|
247
|
+
Returns
|
248
|
+
-------
|
249
|
+
dict[str, int]
|
250
|
+
A dictionary containing the width and height of the monitor.
|
251
|
+
|
252
|
+
Examples
|
253
|
+
--------
|
254
|
+
```python
|
255
|
+
app = Pyloid("Pyloid-App")
|
256
|
+
|
257
|
+
monitor = app.get_primary_monitor()
|
258
|
+
size = monitor.size()
|
259
|
+
print("Monitor Size:", size)
|
260
|
+
```
|
261
|
+
"""
|
262
|
+
monitor = self.screen
|
263
|
+
return {
|
264
|
+
"width": monitor.size().width(),
|
265
|
+
"height": monitor.size().height(),
|
266
|
+
},
|
267
|
+
|
268
|
+
def geometry(self) -> dict[str, int]:
|
269
|
+
"""
|
270
|
+
Returns the geometry of the monitor.
|
271
|
+
|
272
|
+
Returns
|
273
|
+
-------
|
274
|
+
dict[str, int]
|
275
|
+
A dictionary containing the x and y coordinates, width, and height of the monitor.
|
276
|
+
|
277
|
+
Examples
|
278
|
+
--------
|
279
|
+
```python
|
280
|
+
app = Pyloid("Pyloid-App")
|
281
|
+
|
282
|
+
monitor = app.get_primary_monitor()
|
283
|
+
geometry = monitor.geometry()
|
284
|
+
print("Monitor Geometry:", geometry)
|
285
|
+
```
|
286
|
+
"""
|
287
|
+
monitor = self.screen
|
288
|
+
return {
|
289
|
+
"x": monitor.geometry().x(),
|
290
|
+
"y": monitor.geometry().y(),
|
291
|
+
"width": monitor.geometry().width(),
|
292
|
+
"height": monitor.geometry().height(),
|
293
|
+
}
|
294
|
+
|
295
|
+
def available_geometry(self) -> dict[str, int]:
|
296
|
+
"""
|
297
|
+
Returns the available geometry of the monitor.
|
298
|
+
|
299
|
+
The available geometry refers to the portion of the monitor's geometry that is not occupied by system UI elements such as taskbars or docks.
|
300
|
+
|
301
|
+
Returns
|
302
|
+
-------
|
303
|
+
dict[str, int]
|
304
|
+
A dictionary containing the x and y coordinates, width, and height of the available geometry.
|
305
|
+
|
306
|
+
Examples
|
307
|
+
--------
|
308
|
+
```python
|
309
|
+
app = Pyloid("Pyloid-App")
|
310
|
+
|
311
|
+
monitor = app.get_primary_monitor()
|
312
|
+
available_geometry = monitor.available_geometry()
|
313
|
+
print("Available Geometry:", available_geometry)
|
314
|
+
```
|
315
|
+
"""
|
316
|
+
monitor = self.screen
|
317
|
+
return {
|
318
|
+
"x": monitor.availableGeometry().x(),
|
319
|
+
"y": monitor.availableGeometry().y(),
|
320
|
+
"width": monitor.availableGeometry().width(),
|
321
|
+
"height": monitor.availableGeometry().height(),
|
322
|
+
}
|
323
|
+
|
324
|
+
def available_size(self) -> dict[str, int]:
|
325
|
+
"""
|
326
|
+
Returns the available size of the monitor.
|
327
|
+
|
328
|
+
The available size refers to the portion of the monitor's size that is not occupied by system UI elements such as taskbars or docks.
|
329
|
+
|
330
|
+
Returns
|
331
|
+
-------
|
332
|
+
dict[str, int]
|
333
|
+
A dictionary containing the width and height of the available size.
|
334
|
+
|
335
|
+
Examples
|
336
|
+
--------
|
337
|
+
```python
|
338
|
+
app = Pyloid("Pyloid-App")
|
339
|
+
|
340
|
+
monitor = app.get_primary_monitor()
|
341
|
+
available_size = monitor.available_size()
|
342
|
+
print("Available Size:", available_size)
|
343
|
+
```
|
344
|
+
"""
|
345
|
+
monitor = self.screen
|
346
|
+
return {
|
347
|
+
"width": monitor.availableSize().width(),
|
348
|
+
"height": monitor.availableSize().height(),
|
349
|
+
}
|
350
|
+
|
351
|
+
def virtual_geometry(self) -> dict[str, int]:
|
352
|
+
"""
|
353
|
+
Returns the virtual geometry of the monitor.
|
354
|
+
|
355
|
+
The virtual geometry refers to the combined geometry of all monitors in a multi-monitor setup.
|
356
|
+
|
357
|
+
Returns
|
358
|
+
-------
|
359
|
+
dict[str, int]
|
360
|
+
A dictionary containing the x and y coordinates, width, and height of the virtual geometry.
|
361
|
+
|
362
|
+
Examples
|
363
|
+
--------
|
364
|
+
```python
|
365
|
+
app = Pyloid("Pyloid-App")
|
366
|
+
|
367
|
+
monitor = app.get_primary_monitor()
|
368
|
+
virtual_geometry = monitor.virtual_geometry()
|
369
|
+
print("Virtual Geometry:", virtual_geometry)
|
370
|
+
```
|
371
|
+
"""
|
372
|
+
monitor = self.screen
|
373
|
+
return {
|
374
|
+
"x": monitor.virtualGeometry().x(),
|
375
|
+
"y": monitor.virtualGeometry().y(),
|
376
|
+
"width": monitor.virtualGeometry().width(),
|
377
|
+
"height": monitor.virtualGeometry().height(),
|
378
|
+
}
|
379
|
+
|
380
|
+
def virtual_size(self) -> dict[str, int]:
|
381
|
+
"""
|
382
|
+
Returns the virtual size of the monitor.
|
383
|
+
|
384
|
+
The virtual size refers to the combined size of all monitors in a multi-monitor setup.
|
385
|
+
|
386
|
+
Returns
|
387
|
+
-------
|
388
|
+
dict[str, int]
|
389
|
+
A dictionary containing the width and height of the virtual size.
|
390
|
+
|
391
|
+
Examples
|
392
|
+
--------
|
393
|
+
```python
|
394
|
+
app = Pyloid("Pyloid-App")
|
395
|
+
|
396
|
+
monitor = app.get_primary_monitor()
|
397
|
+
virtual_size = monitor.virtual_size()
|
398
|
+
print("Virtual Size:", virtual_size)
|
399
|
+
```
|
400
|
+
"""
|
401
|
+
monitor = self.screen
|
402
|
+
return {
|
403
|
+
"width": monitor.virtualSize().width(),
|
404
|
+
"height": monitor.virtualSize().height(),
|
405
|
+
}
|
406
|
+
|
407
|
+
def available_virtual_geometry(self) -> dict[str, int]:
|
408
|
+
"""
|
409
|
+
Returns the available virtual geometry of the monitor.
|
410
|
+
|
411
|
+
The available virtual geometry refers to the portion of the virtual geometry that is not occupied by system UI elements such as taskbars or docks.
|
412
|
+
|
413
|
+
Returns
|
414
|
+
-------
|
415
|
+
dict[str, int]
|
416
|
+
A dictionary containing the x and y coordinates, width, and height of the available virtual geometry.
|
417
|
+
|
418
|
+
Examples
|
419
|
+
--------
|
420
|
+
```python
|
421
|
+
app = Pyloid("Pyloid-App")
|
422
|
+
|
423
|
+
monitor = app.get_primary_monitor()
|
424
|
+
available_virtual_geometry = monitor.available_virtual_geometry()
|
425
|
+
print("Available Virtual Geometry:", available_virtual_geometry)
|
426
|
+
```
|
427
|
+
"""
|
428
|
+
monitor = self.screen
|
429
|
+
return {
|
430
|
+
"x": monitor.availableVirtualGeometry().x(),
|
431
|
+
"y": monitor.availableVirtualGeometry().y(),
|
432
|
+
"width": monitor.availableVirtualGeometry().width(),
|
433
|
+
"height": monitor.availableVirtualGeometry().height(),
|
434
|
+
}
|
435
|
+
|
436
|
+
def available_virtual_size(self) -> dict[str, int]:
|
437
|
+
"""
|
438
|
+
Returns the available virtual size of the monitor.
|
439
|
+
|
440
|
+
The available virtual size refers to the portion of the virtual size that is not occupied by system UI elements such as taskbars or docks.
|
441
|
+
|
442
|
+
Returns
|
443
|
+
-------
|
444
|
+
dict[str, int]
|
445
|
+
A dictionary containing the width and height of the available virtual size.
|
446
|
+
|
447
|
+
Examples
|
448
|
+
--------
|
449
|
+
```python
|
450
|
+
app = Pyloid("Pyloid-App")
|
451
|
+
|
452
|
+
monitor = app.get_primary_monitor()
|
453
|
+
available_virtual_size = monitor.available_virtual_size()
|
454
|
+
print("Available Virtual Size:", available_virtual_size)
|
455
|
+
```
|
456
|
+
"""
|
457
|
+
monitor = self.screen
|
458
|
+
return {
|
459
|
+
"width": monitor.availableVirtualSize().width(),
|
460
|
+
"height": monitor.availableVirtualSize().height(),
|
461
|
+
}
|
462
|
+
|
463
|
+
def physical_size(self) -> dict[str, float]:
|
464
|
+
"""
|
465
|
+
Returns the physical size of the monitor.
|
466
|
+
|
467
|
+
The physical size refers to the actual physical dimensions of the monitor.
|
468
|
+
|
469
|
+
Returns
|
470
|
+
-------
|
471
|
+
dict[str, float]
|
472
|
+
A dictionary containing the width and height of the physical size.
|
473
|
+
|
474
|
+
Examples
|
475
|
+
--------
|
476
|
+
```python
|
477
|
+
app = Pyloid("Pyloid-App")
|
478
|
+
|
479
|
+
monitor = app.get_primary_monitor()
|
480
|
+
physical_size = monitor.physical_size()
|
481
|
+
print("Physical Size:", physical_size)
|
482
|
+
```
|
483
|
+
"""
|
484
|
+
monitor = self.screen
|
485
|
+
return {
|
486
|
+
"width": monitor.physicalSize().width(),
|
487
|
+
"height": monitor.physicalSize().height(),
|
488
|
+
}
|
489
|
+
|
490
|
+
def depth(self) -> int:
|
491
|
+
"""
|
492
|
+
Returns the depth of the monitor.
|
493
|
+
|
494
|
+
The depth refers to the color depth of the monitor, which is the number of bits used to represent the color of a single pixel.
|
495
|
+
|
496
|
+
Returns
|
497
|
+
-------
|
498
|
+
int
|
499
|
+
The color depth of the monitor.
|
500
|
+
|
501
|
+
Examples
|
502
|
+
--------
|
503
|
+
```python
|
504
|
+
app = Pyloid("Pyloid-App")
|
505
|
+
|
506
|
+
monitor = app.get_primary_monitor()
|
507
|
+
depth = monitor.depth()
|
508
|
+
print("Color Depth:", depth)
|
509
|
+
```
|
510
|
+
"""
|
511
|
+
monitor = self.screen
|
512
|
+
return monitor.depth()
|
513
|
+
|
514
|
+
def device_pixel_ratio(self) -> float:
|
515
|
+
"""
|
516
|
+
Returns the device pixel ratio of the monitor.
|
517
|
+
|
518
|
+
The device pixel ratio is the ratio between physical pixels and device-independent pixels (DIPs).
|
519
|
+
|
520
|
+
Returns
|
521
|
+
-------
|
522
|
+
float
|
523
|
+
The device pixel ratio of the monitor.
|
524
|
+
|
525
|
+
Examples
|
526
|
+
--------
|
527
|
+
```python
|
528
|
+
app = Pyloid("Pyloid-App")
|
529
|
+
|
530
|
+
monitor = app.get_primary_monitor()
|
531
|
+
device_pixel_ratio = monitor.device_pixel_ratio()
|
532
|
+
print("Device Pixel Ratio:", device_pixel_ratio)
|
533
|
+
```
|
534
|
+
"""
|
535
|
+
monitor = self.screen
|
536
|
+
return monitor.devicePixelRatio()
|
537
|
+
|
538
|
+
def logical_dots_per_inch(self) -> float:
|
539
|
+
"""
|
540
|
+
Returns the logical dots per inch (DPI) of the monitor.
|
541
|
+
|
542
|
+
The logical DPI is the number of device-independent pixels (DIPs) per inch.
|
543
|
+
|
544
|
+
Returns
|
545
|
+
-------
|
546
|
+
float
|
547
|
+
The logical DPI of the monitor.
|
548
|
+
|
549
|
+
Examples
|
550
|
+
--------
|
551
|
+
```python
|
552
|
+
app = Pyloid("Pyloid-App")
|
553
|
+
|
554
|
+
monitor = app.get_primary_monitor()
|
555
|
+
logical_dpi = monitor.logical_dots_per_inch()
|
556
|
+
print("Logical DPI:", logical_dpi)
|
557
|
+
```
|
558
|
+
"""
|
559
|
+
monitor = self.screen
|
560
|
+
return monitor.logicalDotsPerInch()
|
561
|
+
|
562
|
+
def logical_dots_per_inch_x(self) -> float:
|
563
|
+
"""
|
564
|
+
Returns the logical dots per inch (DPI) along the X axis of the monitor.
|
565
|
+
|
566
|
+
The logical DPI along the X axis is the number of device-independent pixels (DIPs) per inch along the horizontal axis.
|
567
|
+
|
568
|
+
Returns
|
569
|
+
-------
|
570
|
+
float
|
571
|
+
The logical DPI along the X axis of the monitor.
|
572
|
+
|
573
|
+
Examples
|
574
|
+
--------
|
575
|
+
```python
|
576
|
+
app = Pyloid("Pyloid-App")
|
577
|
+
|
578
|
+
monitor = app.get_primary_monitor()
|
579
|
+
logical_dpi_x = monitor.logical_dots_per_inch_x()
|
580
|
+
print("Logical DPI X:", logical_dpi_x)
|
581
|
+
```
|
582
|
+
"""
|
583
|
+
monitor = self.screen
|
584
|
+
return monitor.logicalDotsPerInchX()
|
585
|
+
|
586
|
+
def logical_dots_per_inch_y(self) -> float:
|
587
|
+
"""
|
588
|
+
Returns the logical dots per inch (DPI) along the Y axis of the monitor.
|
589
|
+
|
590
|
+
The logical DPI along the Y axis is the number of device-independent pixels (DIPs) per inch along the vertical axis.
|
591
|
+
|
592
|
+
Returns
|
593
|
+
-------
|
594
|
+
float
|
595
|
+
The logical DPI along the Y axis of the monitor.
|
596
|
+
|
597
|
+
Examples
|
598
|
+
--------
|
599
|
+
```python
|
600
|
+
app = Pyloid("Pyloid-App")
|
601
|
+
|
602
|
+
monitor = app.get_primary_monitor()
|
603
|
+
logical_dpi_y = monitor.logical_dots_per_inch_y()
|
604
|
+
print("Logical DPI Y:", logical_dpi_y)
|
605
|
+
```
|
606
|
+
"""
|
607
|
+
monitor = self.screen
|
608
|
+
return monitor.logicalDotsPerInchY()
|
609
|
+
|
610
|
+
def orientation(self) -> str:
|
611
|
+
"""
|
612
|
+
Returns the orientation of the monitor.
|
613
|
+
|
614
|
+
The orientation refers to the current orientation of the monitor, such as landscape or portrait.
|
615
|
+
|
616
|
+
Returns
|
617
|
+
-------
|
618
|
+
str
|
619
|
+
The orientation of the monitor.
|
620
|
+
|
621
|
+
Examples
|
622
|
+
--------
|
623
|
+
```python
|
624
|
+
app = Pyloid("Pyloid-App")
|
625
|
+
|
626
|
+
monitor = app.get_primary_monitor()
|
627
|
+
orientation = monitor.orientation()
|
628
|
+
print("Orientation:", orientation)
|
629
|
+
```
|
630
|
+
"""
|
631
|
+
monitor = self.screen
|
632
|
+
return monitor.orientation().name
|
633
|
+
|
634
|
+
def physical_dots_per_inch(self) -> float:
|
635
|
+
"""
|
636
|
+
Returns the physical dots per inch (DPI) of the monitor.
|
637
|
+
|
638
|
+
The physical DPI is the number of physical pixels per inch.
|
639
|
+
|
640
|
+
Returns
|
641
|
+
-------
|
642
|
+
float
|
643
|
+
The physical DPI of the monitor.
|
644
|
+
|
645
|
+
Examples
|
646
|
+
--------
|
647
|
+
```python
|
648
|
+
app = Pyloid("Pyloid-App")
|
649
|
+
|
650
|
+
monitor = app.get_primary_monitor()
|
651
|
+
physical_dpi = monitor.physical_dots_per_inch()
|
652
|
+
print("Physical DPI:", physical_dpi)
|
653
|
+
```
|
654
|
+
"""
|
655
|
+
monitor = self.screen
|
656
|
+
return monitor.physicalDotsPerInch()
|
657
|
+
|
658
|
+
def physical_dots_per_inch_x(self) -> float:
|
659
|
+
"""
|
660
|
+
Returns the physical dots per inch (DPI) along the X axis of the monitor.
|
661
|
+
|
662
|
+
The physical DPI along the X axis is the number of physical pixels per inch along the horizontal axis.
|
663
|
+
|
664
|
+
Returns
|
665
|
+
-------
|
666
|
+
float
|
667
|
+
The physical DPI along the X axis of the monitor.
|
668
|
+
|
669
|
+
Examples
|
670
|
+
--------
|
671
|
+
```python
|
672
|
+
app = Pyloid("Pyloid-App")
|
673
|
+
|
674
|
+
monitor = app.get_primary_monitor()
|
675
|
+
physical_dpi_x = monitor.physical_dots_per_inch_x()
|
676
|
+
print("Physical DPI X:", physical_dpi_x)
|
677
|
+
```
|
678
|
+
"""
|
679
|
+
monitor = self.screen
|
680
|
+
return monitor.physicalDotsPerInchX()
|
681
|
+
|
682
|
+
def physical_dots_per_inch_y(self) -> float:
|
683
|
+
"""
|
684
|
+
Returns the physical dots per inch (DPI) along the Y axis of the monitor.
|
685
|
+
|
686
|
+
The physical DPI along the Y axis is the number of physical pixels per inch along the vertical axis.
|
687
|
+
|
688
|
+
Returns
|
689
|
+
-------
|
690
|
+
float
|
691
|
+
The physical DPI along the Y axis of the monitor.
|
692
|
+
|
693
|
+
Examples
|
694
|
+
--------
|
695
|
+
```python
|
696
|
+
app = Pyloid("Pyloid-App")
|
697
|
+
|
698
|
+
monitor = app.get_primary_monitor()
|
699
|
+
physical_dpi_y = monitor.physical_dots_per_inch_y()
|
700
|
+
print("Physical DPI Y:", physical_dpi_y)
|
701
|
+
```
|
702
|
+
"""
|
703
|
+
monitor = self.screen
|
704
|
+
return monitor.physicalDotsPerInchY()
|
705
|
+
|
706
|
+
def refresh_rate(self) -> float:
|
707
|
+
"""
|
708
|
+
Returns the refresh rate of the monitor.
|
709
|
+
|
710
|
+
The refresh rate is the number of times the monitor updates with new information per second, measured in Hertz (Hz).
|
711
|
+
|
712
|
+
Returns
|
713
|
+
-------
|
714
|
+
float
|
715
|
+
The refresh rate of the monitor.
|
716
|
+
|
717
|
+
Examples
|
718
|
+
--------
|
719
|
+
```python
|
720
|
+
app = Pyloid("Pyloid-App")
|
721
|
+
|
722
|
+
monitor = app.get_primary_monitor()
|
723
|
+
refresh_rate = monitor.refresh_rate()
|
724
|
+
print("Refresh Rate:", refresh_rate)
|
725
|
+
```
|
726
|
+
"""
|
727
|
+
monitor = self.screen
|
728
|
+
return monitor.refreshRate()
|
729
|
+
|
730
|
+
def manufacturer(self) -> str:
|
731
|
+
"""
|
732
|
+
Returns the manufacturer of the monitor.
|
733
|
+
|
734
|
+
The manufacturer refers to the company that produced the monitor.
|
735
|
+
|
736
|
+
Returns
|
737
|
+
-------
|
738
|
+
str
|
739
|
+
The manufacturer of the monitor.
|
740
|
+
|
741
|
+
Examples
|
742
|
+
--------
|
743
|
+
```python
|
744
|
+
app = Pyloid("Pyloid-App")
|
745
|
+
|
746
|
+
monitor = app.get_primary_monitor()
|
747
|
+
manufacturer = monitor.manufacturer()
|
748
|
+
print("Manufacturer:", manufacturer)
|
749
|
+
```
|
750
|
+
"""
|
751
|
+
monitor = self.screen
|
752
|
+
return monitor.manufacturer()
|
753
|
+
|
754
|
+
def model(self) -> str:
|
755
|
+
"""
|
756
|
+
Returns the model of the monitor.
|
757
|
+
|
758
|
+
The model refers to the specific model name or number assigned by the manufacturer.
|
759
|
+
|
760
|
+
Returns
|
761
|
+
-------
|
762
|
+
str
|
763
|
+
The model of the monitor.
|
764
|
+
|
765
|
+
Examples
|
766
|
+
--------
|
767
|
+
```python
|
768
|
+
app = Pyloid("Pyloid-App")
|
769
|
+
|
770
|
+
monitor = app.get_primary_monitor()
|
771
|
+
model = monitor.model()
|
772
|
+
print("Model:", model)
|
773
|
+
```
|
774
|
+
"""
|
775
|
+
monitor = self.screen
|
776
|
+
return monitor.model()
|
777
|
+
|
778
|
+
def name(self) -> str:
|
779
|
+
"""
|
780
|
+
Returns the name of the monitor.
|
781
|
+
|
782
|
+
The name refers to the user-friendly name assigned to the monitor.
|
783
|
+
|
784
|
+
Returns
|
785
|
+
-------
|
786
|
+
str
|
787
|
+
The name of the monitor.
|
788
|
+
|
789
|
+
Examples
|
790
|
+
--------
|
791
|
+
```python
|
792
|
+
app = Pyloid("Pyloid-App")
|
793
|
+
|
794
|
+
monitor = app.get_primary_monitor()
|
795
|
+
name = monitor.name()
|
796
|
+
print("Name:", name)
|
797
|
+
```
|
798
|
+
"""
|
799
|
+
monitor = self.screen
|
800
|
+
return monitor.name()
|
801
|
+
|
802
|
+
def serial_number(self) -> str:
|
803
|
+
"""
|
804
|
+
Returns the serial number of the monitor.
|
805
|
+
|
806
|
+
The serial number is a unique identifier assigned to the monitor by the manufacturer.
|
807
|
+
|
808
|
+
Returns
|
809
|
+
-------
|
810
|
+
str
|
811
|
+
The serial number of the monitor.
|
812
|
+
|
813
|
+
Examples
|
814
|
+
--------
|
815
|
+
```python
|
816
|
+
app = Pyloid("Pyloid-App")
|
817
|
+
|
818
|
+
monitor = app.get_primary_monitor()
|
819
|
+
serial_number = monitor.serial_number()
|
820
|
+
print("Serial Number:", serial_number)
|
821
|
+
```
|
822
|
+
"""
|
823
|
+
monitor = self.screen
|
824
|
+
return monitor.serialNumber()
|
825
|
+
|
826
|
+
def geometry_changed(self, callback: Callable):
|
827
|
+
"""
|
828
|
+
Registers a callback for the event that occurs when the geometry of the monitor changes.
|
829
|
+
|
830
|
+
Parameters
|
831
|
+
----------
|
832
|
+
callback : Callable
|
833
|
+
The function to be called when the geometry changes.
|
834
|
+
|
835
|
+
Examples
|
836
|
+
--------
|
837
|
+
```python
|
838
|
+
app = Pyloid("Pyloid-App")
|
839
|
+
|
840
|
+
def on_geometry_changed():
|
841
|
+
print("Geometry changed!")
|
842
|
+
|
843
|
+
monitor = app.get_primary_monitor()
|
844
|
+
monitor.geometry_changed(on_geometry_changed)
|
845
|
+
```
|
846
|
+
"""
|
847
|
+
monitor = self.screen
|
848
|
+
monitor.geometryChanged.connect(callback)
|
849
|
+
|
850
|
+
def orientation_changed(self, callback: Callable):
|
851
|
+
"""
|
852
|
+
Registers a callback for the event that occurs when the orientation of the monitor changes.
|
853
|
+
|
854
|
+
Parameters
|
855
|
+
----------
|
856
|
+
callback : Callable
|
857
|
+
The function to be called when the orientation changes.
|
858
|
+
|
859
|
+
Examples
|
860
|
+
--------
|
861
|
+
```python
|
862
|
+
app = Pyloid("Pyloid-App")
|
863
|
+
|
864
|
+
def on_orientation_changed():
|
865
|
+
print("Orientation changed!")
|
866
|
+
|
867
|
+
monitor = app.get_primary_monitor()
|
868
|
+
monitor.orientation_changed(on_orientation_changed)
|
869
|
+
```
|
870
|
+
"""
|
871
|
+
monitor = self.screen
|
872
|
+
monitor.orientationChanged.connect(callback)
|
873
|
+
|
874
|
+
def refresh_rate_changed(self, callback: Callable):
|
875
|
+
"""
|
876
|
+
Registers a callback for the event that occurs when the refresh rate of the monitor changes.
|
877
|
+
|
878
|
+
Parameters
|
879
|
+
----------
|
880
|
+
callback : Callable
|
881
|
+
The function to be called when the refresh rate changes.
|
882
|
+
|
883
|
+
Examples
|
884
|
+
--------
|
885
|
+
```python
|
886
|
+
app = Pyloid("Pyloid-App")
|
887
|
+
|
888
|
+
def on_refresh_rate_changed():
|
889
|
+
print("Refresh rate changed!")
|
890
|
+
|
891
|
+
monitor = app.get_primary_monitor()
|
892
|
+
monitor.refresh_rate_changed(on_refresh_rate_changed)
|
893
|
+
```
|
894
|
+
"""
|
895
|
+
monitor = self.screen
|
896
|
+
monitor.refreshRateChanged.connect(callback)
|
897
|
+
|
898
|
+
def virtual_geometry_changed(self, callback: Callable):
|
899
|
+
"""
|
900
|
+
Registers a callback for the event that occurs when the virtual geometry of the monitor changes.
|
901
|
+
|
902
|
+
Parameters
|
903
|
+
----------
|
904
|
+
callback : Callable
|
905
|
+
The function to be called when the virtual geometry changes.
|
906
|
+
|
907
|
+
Examples
|
908
|
+
--------
|
909
|
+
```python
|
910
|
+
app = Pyloid("Pyloid-App")
|
911
|
+
|
912
|
+
def on_virtual_geometry_changed():
|
913
|
+
print("Virtual geometry changed!")
|
914
|
+
|
915
|
+
monitor = app.get_primary_monitor()
|
916
|
+
monitor.virtual_geometry_changed(on_virtual_geometry_changed)
|
917
|
+
```
|
918
|
+
"""
|
919
|
+
monitor = self.screen
|
920
|
+
monitor.virtualGeometryChanged.connect(callback)
|
921
|
+
|