QProgressBar spinnt!!

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
AngelusNoctis
User
Beiträge: 92
Registriert: Sonntag 16. Dezember 2007, 20:03

Hi, ich hab ein kleines Problem und zwar fängt der QProgressBar an zu spinnen wenn ich grössere Werte angebe!

z.B.

Code: Alles auswählen

                progressBar = QtWidgets.QProgressBar()
                progressBar.setMinimum(0)
                progressBar.setMaximum(64055410688)
                print(progressBar.maximum(), progressBar.minimum())
Print-Ausgabe:

Code: Alles auswählen

-369098752 -369098752
Anstelle von 64055410688 und 0!

Sobald ich den Wert jedoch kleiner mache als die 64055410688, funktioniert der ProgressBar ganz normal.

Gibt es irgendwie eine Grenze? Oder lässt sich das irgendwie umgehen?
AngelusNoctis
User
Beiträge: 92
Registriert: Sonntag 16. Dezember 2007, 20:03

Update:

Hab es nun anders gelöst.
Verwende setRange(0, 100) und berechne die Prozent in Python (geschriebene bytes / total bytes * 100), dann funktioniert das ganze auch.

Muss wohl ein "Fehler/Limitierung"? In Python3 / PyQt5 sein?

Rein CPP oder Python funktioniert es jedoch.


C ya
Liffi
User
Beiträge: 153
Registriert: Montag 1. Januar 2007, 17:23

Wenn maximum ein int ist, könnte die maximale Größe 2.147.483.647 betragen. Vielleicht ist das der Grund. Minimum wird laut Doku beim Setzen vom Maximum angepasst.
BlackJack

@AngelusNoctis: -369098752 ist zufällig das vorzeichenbehaftete 32-Bit-Int wenn man von Deiner 36 Bit benötigten Zahl die 4 Bits die zu viel sind, einfach ignoriert:

Code: Alles auswählen

In [8]: ((64055410688 & 0xffffffff) ^ 0xffffffff) + 1
Out[8]: 369098752
AngelusNoctis
User
Beiträge: 92
Registriert: Sonntag 16. Dezember 2007, 20:03

Danke für die Antworten.

Seltsam, sollte der Wert nicht bei "9223372036854775807" liegen auch bei PyQt5 bzw ein "long int" verwendet werden?
Das System nutzt ja 64Bit Python3.5 (python3.x86_64) und PyQt5.7 (python3-qt5.x86_64).

Code: Alles auswählen

>>> import sys
>>> sys.maxsize
9223372036854775807
Naja, egal.
BlackJack

@AngelusNoctis: Warum sollte das ein ``long int`` verwenden? Die Qt-Dokumentation sagt ``int`` und das kann je nach System auch bei 64 Bit-System nur 32 Bit umfassen.
AngelusNoctis
User
Beiträge: 92
Registriert: Sonntag 16. Dezember 2007, 20:03

BlackJack hat geschrieben:@AngelusNoctis: Warum sollte das ein ``long int`` verwenden? Die Qt-Dokumentation sagt ``int`` und das kann je nach System auch bei 64 Bit-System nur 32 Bit umfassen.
Hi
Ja, die Doku sagt qint32

Aber m.M.n wäre ein qint64 angebrachter, da es sich um die 64 Bit Version handelt, wir sowieso mittlerweile fast überall 64 Bit haben, sogar Mobile und Fortschrittsanzeigen auch gerne genutzt werden, wenn Daten verschoben/kopiert/etc werden.


Aber eben, nur meine Meinung. :-P
BlackJack

@AngelusNoctis: Wir haben halt nicht wirklich überall 64-Bit, vielleicht unterschätzt Du das auch. Zum Beispiel macht es bei Intel-kompatiblen Rechnern auch bei wenig (also weniger als 3-4 GiB) Speicher Sinn auf ein 64-Bit-System zu setzen. Weil da dann viel mehr Register zur Verfügung stehen als im 32-Bit-Modus. Bei anderen Prozessoren mag das anders aussehen. Da hat man dann beispielsweise hauptsächlich nur den Nachteil, dass alle Pointer doppelt so viel Speicher belegen und das war's dann auch schon.
Antworten