Seite 1 von 1
PyQT4: alte Fenstergröße vor dem paintEvent festhalten
Verfasst: Montag 23. Februar 2009, 16:56
von schnupp
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
Verfasst: Montag 23. Februar 2009, 18:31
von vorlautboy
schau dir mal
QWidget.resizeEvent an. QResizeEvent.oldSize gibt die alte größe des widgets zurück.
Verfasst: Mittwoch 25. Februar 2009, 20:59
von schnupp
Danke!
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
Verfasst: Donnerstag 26. Februar 2009, 10:55
von vorlautboy
schnupp hat geschrieben:Aber wie könnte ich das an mein
def paintEvent(self, event):
übergeben?
evtl. über eine instanzvariable 'self.oldsize' oder theoretisch direkt im resizeEvent zeichnen, allerdings sagt die qt doku dazu
No drawing need be (or should be) done inside this handler.
wozu brauchst du die alte größe denn?
Verfasst: Donnerstag 26. Februar 2009, 13:29
von schnupp
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
Verfasst: Donnerstag 26. Februar 2009, 14:11
von vorlautboy
schnupp hat geschrieben:self.oldSize() kennt er leider nicht...
ne musst du auch selbst schreiben

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
du behältst die alte größe einfach in der klasse, anstatt eine globale variable zu verwenden und zeichnest nur wenn die variable auch einen Wert hat.
Aber falls möglich würde ich layouts verwenden, die passen die größen automatisch an.
Verfasst: Donnerstag 26. Februar 2009, 15:18
von schnupp
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...
