Hallo,
wie hält man geschickt die "alte" Größe eines Fensters fest?
Folgendes passiert: das Fenster wird z.B. per Maus vergrößert und über
def paintEvent(self, event) wird es neu gezeichnet.
Innerhalb des paintEvents bräuchte ich aber die alte Größe um Rechtecke (paint.drawRect), die gezeichnet werden sollen, wieder richtig auszurichten.
Gibt es ein Äquivalent z.B. zu self.width() für die alte Größe?
Oder würde man das ggf. ganz anders machen?
Danke!
Grüße
Frank
PyQT4: alte Fenstergröße vor dem paintEvent festhalten
-
- User
- Beiträge: 38
- Registriert: Sonntag 7. Dezember 2008, 18:43
schau dir mal QWidget.resizeEvent an. QResizeEvent.oldSize gibt die alte größe des widgets zurück.
Danke!
Ich brauche aber wohl doch noch einmal Hilfe als Anfänger.
Das Event sieht jetzt z.B. so aus:
Aber wie könnte ich das an mein
def paintEvent(self, event):
übergeben?
(PyQt4.QtCore.QSize(360, 180) wäre z.B. das Event)
Grüße
Frank
Ich brauche aber wohl doch noch einmal Hilfe als Anfänger.

Das Event sieht jetzt z.B. so aus:
Code: Alles auswählen
def resizeEvent(self, event):
a = event.oldSize()
print a
Aber wie könnte ich das an mein
def paintEvent(self, event):
übergeben?
(PyQt4.QtCore.QSize(360, 180) wäre z.B. das Event)
Grüße
Frank
-
- User
- Beiträge: 38
- Registriert: Sonntag 7. Dezember 2008, 18:43
evtl. über eine instanzvariable 'self.oldsize' oder theoretisch direkt im resizeEvent zeichnen, allerdings sagt die qt doku dazuschnupp hat geschrieben:Aber wie könnte ich das an mein
def paintEvent(self, event):
übergeben?
wozu brauchst du die alte größe denn?No drawing need be (or should be) done inside this handler.
Ich habe ein SVG-Hintergrundbild, auf das ich kleine Rechtecke legen möchte - quasi als Markierungspunkte, die zudem von Zeit zu Zeit an anderen Stellen sein werden. Wenn ich jetzt die Fenstergröße ändere, verzerrt sich das Hintergrundbild. Die Rechtecke bleiben aber statisch an den festgelegten Positionen und stimmen nicht mehr mit den gewünschten Punkten überein.
Das Problem könnte man jetzt lösen, indem man die Position der Punkte neu berechnet. Und dafür bräuchte ich die alte und neue Fenstergröße.
Ich habe schon überlegt, ob man die Daten nicht einfach jeweils in globale Variablen schreibt, aber sauber ist das auch nicht.
self.oldSize() kennt er leider nicht...
Grüße
Frank
Das Problem könnte man jetzt lösen, indem man die Position der Punkte neu berechnet. Und dafür bräuchte ich die alte und neue Fenstergröße.
Ich habe schon überlegt, ob man die Daten nicht einfach jeweils in globale Variablen schreibt, aber sauber ist das auch nicht.
self.oldSize() kennt er leider nicht...
Grüße
Frank
-
- User
- Beiträge: 38
- Registriert: Sonntag 7. Dezember 2008, 18:43
ne musst du auch selbst schreibenschnupp hat geschrieben:self.oldSize() kennt er leider nicht...

dein fenster könnte so aussehen:
Code: Alles auswählen
class Widget(QtGui.QWidget):
def __init__(self, ...):
QtGui.QWidget.__init__(self, ...)
self.oldsize = None
def resizeEvent(self, ev):
self.oldsize = ev.oldSize()
def paintEvent(self, ev):
if self.oldsize:
... # hier zeichnen
Aber falls möglich würde ich layouts verwenden, die passen die größen automatisch an.
Aua, warum kompliziert, wenn es self. gibt?!
Das mit den Layouts dürfte jedoch schwierig werden.
drawRect ist ja kein Widget, dass man in ein Layout zwängen könnte, da es von Koordinaten abhängig ist. Aber das kommt später...


Das mit den Layouts dürfte jedoch schwierig werden.
drawRect ist ja kein Widget, dass man in ein Layout zwängen könnte, da es von Koordinaten abhängig ist. Aber das kommt später...
