Welchen Device-Context verwenden? / veränderbares Rechteck

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Ruler
User
Beiträge: 8
Registriert: Donnerstag 21. Oktober 2010, 15:25

Hallo zusammen

Ich bin relativ neu in die GUI-Erstellung mit wxPython eingetreten, zum Glück gibts viele Beispiele.
Nun sind bei mir zwei Fragen aufgetreten:

1. Möchte ich 2D-Objekte zeichnen können, die aber beim verschieben/vergrössern des Fensters NICHT verschwinden. Wenn ich meine Zeichenfläche mit dem Client-DeviceContext erstelle, ist das bis zu einem gewissen Grad möglich. Muss aber ein Teil des Panels, auf welchem gezeichnet wird, neu erstellt werden (z.B. weil es nicht mehr ganz auf dem Bildschirm zu sehen ist), verschwindet mein Objekt. Gibt es irgendeine Möglichkeit, dieses löschen der Objekte zu verhindern?

2. Die Weiterführung wäre dann, ein Rechteck zeichnen zu können, welches nach dem Zeichnen in der Länge veränderbar und zudem als Ganzes verschiebbar ist. Ich kann das Rechteck zeichnen, aber wie ich es anstellen soll, das Rechteck nachher zu editieren/zu bewegen, weiss ich nicht. Habt jemand Anhaltspunkte? Könnte ich hier mit true/false etwas erreichen?

Mein Code fürs Zeichnen des Dreicks:

Code: Alles auswählen

	def OnLeftDown(self, evt):
		x = evt.GetX()
		dc.Clear()
		self.x1 = x

	def OnLeftUp(self, evt):
		x = evt.GetX()
		self.x2 = x
		dc.DrawRectangle(self.x1, 5, self.x2-self.x1, 5)
	
	def OnPaint(self, evt):
		global dc
		dc = wx.ClientDC(evt.GetEventObject())
Danke für jeden Vorschlag!
BlackJack

@Ruler: Das was Du willst geht so mit einem DeviceContext nicht. Du musst beim entsprechenden Ereignis bzw. in der `OnPaint()`-Methode immer wieder das zeichnen was Du sehen willst. Die wird nämlich aufgerufen wenn Teile des Fensters verdeckt waren und deshalb neu gezeichnet werden müssen. Das ist der Sinn und zweck der Methode bzw. den Ereignisses.

Wenn Du Vektorgrafik auf einer etwas höheren Ebene haben möchtest, schau Dir mal `wx.lib.ogl` an.
Ruler
User
Beiträge: 8
Registriert: Donnerstag 21. Oktober 2010, 15:25

Ok, vielen Dank für die Antwort. Ich hab mir ogl mal angesehen, leider passen sich die gezeichneten Elemente nicht der Grösse des Fensters an... hm ich werde das wohl irgendwie anders lösen müssen... Oder gibt es irgend einen anderen Weg?
Trotzdem danke!
Antworten