(Aktualisiert, um eine zusätzliche Methode zum Ändern der Beschriftungsfarbe hinzuzufügen und zusätzliches Timing für das ursprüngliche MWE hinzuzufügen. Neue Version hinzugefügt, die eine von @ekhumoro vorgeschlagene Szene verwendet).
Ich erstelle ein Beschriftungsraster, dessen Hintergrundfarben ich dann kontinuierlich ändern kann, wenn sich die Werte der Rasterposition ändern. Ich habe drei verschiedene Möglichkeiten, die Beschriftung an die bestimmte Rasterposition zu bringen und dann ihre Farbe zu ändern. ChangeBox1 und ChangeBox2 verwenden Stylesheets und ChangeBox3 ändert die Palette direkt.
Wenn ich diese Routinen in der Klasseninit-Funktion aufrufe, werden sie wesentlich schneller ausgeführt, als wenn ich sie nach dem Anzeigen des Fensters aufrufe.
Warum?
Man kann sehen, dass das direkte Ändern der Palette durch changeBox3 ziemlich konsistent ist, unabhängig davon, wann es aufgerufen wird. Könnte dies ein Unterschied darin sein, wie QT ein Stylesheet nach der Instanziierung des Widgets verarbeitet (oder pyside übersetzt)?
Ich verwende Python 3.10.15
Average execution time of changeBox1 in init over 500 runs: 1.0947501286864281e-06 seconds
Average execution time of changeBox2 in init over 500 runs: 4.599159583449364e-07 seconds
Average execution time of changeBox3 in init over 500 runs: 2.514749765396118e-06 seconds
Average execution time of changeBox1 after window.show over 500 runs: 1.4484249986708164e-05 seconds
Average execution time of changeBox2 after window.show over 500 runs: 1.4263415709137917e-05 seconds
Average execution time of changeBox3 after window.show over 500 runs: 2.624250017106533e-06 seconds
Average execution time of myLabel1 over 500 runs: 1.668350026011467e-05 seconds
Average execution time of myLabel2 over 500 runs: 1.4353999868035316e-05 seconds
(Aktualisiert, um eine zusätzliche Methode zum [url=viewtopic.php?t=12045]Ändern[/url] der Beschriftungsfarbe hinzuzufügen und zusätzliches Timing für das ursprüngliche MWE hinzuzufügen. Neue Version hinzugefügt, die eine von @ekhumoro vorgeschlagene Szene verwendet). Ich erstelle ein Beschriftungsraster, dessen Hintergrundfarben ich dann kontinuierlich [url=viewtopic.php?t=12045]ändern[/url] kann, wenn sich die Werte der Rasterposition ändern. Ich habe drei verschiedene Möglichkeiten, die Beschriftung an die bestimmte Rasterposition zu bringen und dann ihre Farbe zu ändern. ChangeBox1 und ChangeBox2 verwenden Stylesheets und ChangeBox3 ändert die Palette direkt. Wenn ich diese Routinen in der Klasseninit-Funktion aufrufe, werden sie wesentlich schneller ausgeführt, als wenn ich sie nach dem Anzeigen des Fensters aufrufe. Warum? Man kann sehen, dass das direkte [url=viewtopic.php?t=12045]Ändern[/url] der Palette durch changeBox3 ziemlich konsistent ist, unabhängig davon, wann es aufgerufen wird. Könnte dies ein Unterschied darin sein, wie QT ein Stylesheet nach der Instanziierung des Widgets verarbeitet (oder pyside übersetzt)? Ich verwende Python 3.10.15 [code]Average execution time of changeBox1 in init over 500 runs: 1.0947501286864281e-06 seconds Average execution time of changeBox2 in init over 500 runs: 4.599159583449364e-07 seconds Average execution time of changeBox3 in init over 500 runs: 2.514749765396118e-06 seconds Average execution time of changeBox1 after window.show over 500 runs: 1.4484249986708164e-05 seconds Average execution time of changeBox2 after window.show over 500 runs: 1.4263415709137917e-05 seconds Average execution time of changeBox3 after window.show over 500 runs: 2.624250017106533e-06 seconds Average execution time of myLabel1 over 500 runs: 1.668350026011467e-05 seconds Average execution time of myLabel2 over 500 runs: 1.4353999868035316e-05 seconds
[/code] Hier ist mein MWE: [code]import sys import timeit
from PySide6.QtCore import QSize, Qt from PySide6.QtGui import QColor, QFont, QPalette from PySide6.QtWidgets import ( QApplication, QGridLayout, QLabel, QMainWindow, QWidget, )
arrows = ["\u2191", "\u2193", "\u2192", "\u2190"]
class MainWindow(QMainWindow): def __init__(self): super().__init__()
print( f"Average execution time of changeBox1 in init over {runs} runs: {time1 / runs} seconds" ) print( f"Average execution time of changeBox2 in init over {runs} runs: {time2 / runs} seconds" ) print( f"Average execution time of changeBox3 in init over {runs} runs: {time3 / runs} seconds" )
# Find the fastest way to change the color of a specific widget
print( f"Average execution time of changeBox1 after window.show over {runs} runs: {time1 / runs} seconds" ) print( f"Average execution time of changeBox2 after window.show over {runs} runs: {time2 / runs} seconds" ) print( f"Average execution time of changeBox3 after window.show over {runs} runs: {time3 / runs} seconds" )
print( f"Average execution time of myLabel1 over {runs} runs: {time1 / runs} seconds" ) print( f"Average execution time of myLabel2 over {runs} runs: {time2 / runs} seconds" )
app = QApplication(sys.argv) window = MainWindow() window.show() window.changeBoxColor() window.myLabelTimer() app.exec() [/code] Der Vollständigkeit halber ist hier eine Version mit Szene und Ansicht gemäß @ekhumoro: [code]import sys import timeit
from PySide6.QtCore import QSize, QPoint, Qt from PySide6.QtGui import QColor, QFont, QPalette from PySide6.QtWidgets import ( QApplication, QLabel, QWidget, QGraphicsScene, QGraphicsView, QHBoxLayout, )
arrows = ["\u2191", "\u2193", "\u2192", "\u2190"]
class Window(QWidget):
xMax : int = 4 yMax : int = 5 boxSize : int = 75 labels = {}
Ich habe gelernt, wie man PySide6 und Qt Designer verwendet, aber irgendwie kann ich meine .ui-Datei nicht in eine .py-Datei konvertieren. Der einzige Befehl, den ich gefunden habe, ist
pyside6-uic...
Suche nach Tipps zur Optimierung meines RTSP-Stream-Capture-Projekts.
Das Ziel: Den Stream kontinuierlich in 30-Sekunden-Blöcken erfassen.
Das Problem : Die Gesamtzeit ist inkonsistent, wenn die Last...
Ich habe kürzlich Python von Grund auf mit Python bestritten. Ich versuche, ein Piktogramm-Balkendiagramm zu bauen, in dem in jeder Balken jede Reihe nacheinander erscheint. und dann erscheint jede...
Ich habe kürzlich Python von Grund auf mit Python bestritten. Ich versuche, ein Piktogramm-Balkendiagramm zu bauen, in dem in jeder Balken jede Reihe nacheinander erscheint. und dann erscheint jede...
Ich versuche nur, meinen Discord -Bot dem Kanal zu verbinden, in dem ich ConnectaSync anrufe, es funktioniert richtig und mein Bot schließt sich dem Kanal an, aber die Methode hängt weiter und...