Zeichenprobleme

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Neutral
User
Beiträge: 6
Registriert: Donnerstag 9. Oktober 2008, 09:03

Guten Morgen, ich habe ein Problem mit der Zeichenfunktion in wxpython.
Ich habe es zwar geschafft eine eigenständige Klasse zuschreiben die mir ein Viereck zeichnet, aber ich schaffe es einfach nicht in meinem aktuellen Programm die Zeichenfunktion zu aktivieren.

Ich möchte gerne, dass ich auf meinem aktuellen Fenster auch DrawLine benutzen kann. Ich möchte gerne in der Methode def OnClick zeichnen, doch alle bisherigen Versuche schlugen fehl, da das Zeichnen unter Zuhilfenahme von Labels doch sehr unschön ist...
Also es wäre nett, wenn mir jemand sagen kann was genau ich in meinem Code abändern muss, damit ich DrawLine in der genannten Methode nutzen kann. Benutze wxpython zum ersten mal, von daher wäre es nett mir genau zu sagen wo ich was einfügen muss. ;)

Hier mein bisheriger Code

Code: Alles auswählen

import wx
import math
import random


class MyFrame(wx.Frame, wx.Window):
	
	def __init__(self):
		
	        wx.Frame.__init__(self, None, -1, "Halter", size = (800,600))
		self.panel = wx.Panel (self, -1)
		
		#Variablen die spaeter benoetigt werden
		i = 0
		blabla = 50
		dudududud= 9
		self.zaehler = int(i)
		self.arrayhoehe ={}
		self.arrayod = {}
		self.arrayud = {}
		self.arraysicherheitsabstand = {}
		daff = 590
		self.x = float(daff)
		self.y = 20
		self.zweiterzaehler = int(dudududud)
		self.zeichnen = {}
		self.dritterzaehler = int (i)
		self.size = {}
		
		#Textfelder
		#Mittlere Textfelder
		self.sicherheitsabstand = wx.StaticText (self.panel, -1, "Sicherheitsabstand:", (225,100))
		self.segmenteigenschaft = wx.StaticText (self.panel, -1, "Segmenteigenschaften", (219, 150))
		self.segmenteigenschaft.SetForegroundColour('blue')
		self.hoehe = wx.StaticText (self.panel, -1, "Hoehe", (287, 175))
		self.od = wx.StaticText (self.panel, -1, "Oberer Durchmesser", (220, 200))
		self.ud = wx.StaticText (self.panel, -1, "Unterer Durchmesser", (217, 225))
		
		#Linke Textfelder
		self.bibliothek = wx.StaticText (self.panel, -1, "Bibliothek:", (20, 500))
		self.aktuellebibliothek = wx.StaticText (self.panel, -1, "Hier muss die aktuell geoeffnete Bibliothek stehen", (20,520))
		
		#Eingabefelder
		#Mittlere Eingabefelder
		self.hoeheeingabe = wx.TextCtrl (self.panel, -1, "0.0", (325, 172), size=(55, -1))
		self.odeingabe = wx.TextCtrl (self.panel, -1, "0.0", (325, 197), size=(55, -1))
		self.udeingabe = wx.TextCtrl (self.panel, -1, "0.0", (325, 222), size=(55, -1))
		self.sicherheitsabstandeingabe = wx.TextCtrl (self.panel, -1, "0.0", (325, 97), size=(55, -1))
		
		#Checkbox
		#linke Checkbox
		self.kontrolle = wx.CheckBox(self.panel, -1, "Halterkollisionskontrolle verwenden", (20, 20))
		
		#mittlere Checkbox
		self.abstand = wx.CheckBox(self.panel, -1, "Halter-Sicherheitsabstand",(225, 70))
		
		
		
		#Buttons
		#Mittlererbutton
		self.neuessegment = wx.Button(self.panel, -1, "Neues Segment", (275, 285))
		self.neuessegment.Bind(wx.EVT_BUTTON,self.OnClick)
		self.neuessegment.SetDefault()
		
		#Linke Buttons
		self.oeffnen = wx.Button(self.panel, -1, "Bibl. oeffnen", (20, 430))
		self.neubib = wx.Button(self.panel, -1, "Neue Bibl.", (120, 430))
		self.speichern = wx.Button(self.panel, -1, "Bibl. speichern", (20, 465))
		self.neuha = wx.Button(self.panel, -1, "Neuer Halter", (120, 465))
		
		#Listbox linke Seite
		sampleList = ['halter1','halter2','halter3','halter4','halter5','halter6','halter7','halter8','halter9','halter10',
					  'halter11','halter12','halter13','halter14','halter15','halter16','halter17','halter18','halter19',
					  'halter20','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21','halter21']
					  					  
		listbox = wx.ListBox(self.panel, -1, (20,50), (185, 370), sampleList, wx.LB_SINGLE)
		listbox.SetSelection(3)
		
		#Rahmen fuers zeichnen
		self.obererrand=wx.StaticText(self.panel, -1, pos=(400, 20), size=(380,1))
		self.obererrand.SetBackgroundColour('black')						  
		self.linkerrand =wx.StaticText(self.panel, -1, pos=(400, 20), size=(1,520))
		self.linkerrand.SetBackgroundColour('black')
		self.rechterrand = wx.StaticText(self.panel, -1, pos=(780, 20), size=(1,520))
		self.rechterrand.SetBackgroundColour('black')
		self.untererrand = wx.StaticText(self.panel, -1, pos=(400, 540), size=(380,1))
		self.untererrand.SetBackgroundColour('black')
		
		
		
		
	
	#was passiert bei klick auf neues segment
	def OnClick(self, event):
		self.arrayhoehe[self.zaehler] = float(self.hoeheeingabe.GetValue())
		self.arrayod[self.zaehler] = float(self.odeingabe.GetValue())
		self.arrayud[self.zaehler] = float(self.udeingabe.GetValue())
		self.x = 590
		self.x = self.x - self.arrayod[self.zaehler]/2
		
		while self.zweiterzaehler>-1:
			self.zeichnen[self.dritterzaehler] = wx.StaticText (self.panel, -1, "", pos=(self.x, self.y), size=(((self.arrayod[self.zaehler]-self.arrayud[self.zaehler])/9)*self.zweiterzaehler+self.arrayud[self.zaehler], self.arrayhoehe[self.zaehler]/10))
			self.zeichnen[self.dritterzaehler].SetBackgroundColour('black')
			self.zweiterzaehler = self.zweiterzaehler - 1
			self.dritterzaehler = self.dritterzaehler + 1
			self.y = self.y +self.arrayhoehe[self.zaehler]/10
			if self.zweiterzaehler>-1:
				self.x = self.x+(self.arrayod[self.zaehler]-self.arrayud[self.zaehler])/18
			
			
		self.zweiterzaehler = 9	
		self.size[self.zaehler] = (self.arrayod[self.zaehler]-(self.zweiterzaehler*2*((self.arrayod[self.zaehler]-self.arrayud[self.zaehler])/18)))
		self.zaehler = self.zaehler + 1
		
		


		
		
		
	
	
			
		"""Datei=file("Name.txt","w")
		Datei.write("Hallo")
		Datei.write("\n")
		# \t
		Datei.close()"""
		
			
			
		

		
		
		
		
		
if __name__ == '__main__':
	app=wx.PySimpleApp()
	MyFrame().Show()
	app.MainLoop()

Wie man sieht, versuche ich mich auch bereits an der Speicherfunktion, wenn mir die jemand genauer erklären könnte wäre dies auch sehr nett.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Servus hast du dir mal die wiki hierzu angeschaut
http://de.wikibooks.org/wiki/Python-Pro ... g:_Dateien
Neutral
User
Beiträge: 6
Registriert: Donnerstag 9. Oktober 2008, 09:03

Habe ich nicht :oops:
Zu meiner Verteidigung, mein Augenmerk lag auf dem Zeichnen und dem speichern habe ich nur kurz meine Aufmerksamkeit gewidmet, weil ich erstmal das zeichnen zum laufen bringen wollte ;)

Ich schaffe es zwar eine eigenständigen Code zu schreiben, der zum Beispiel nur ein Viereck zeichnet aber ich bin zu dämlich den Befehl DrawLine() im obigen Code zum laufen zu kriegen, so dass der auch auf dem Frame zeichnet, wo die anderen Sachen stehen :/

Aber vielen Dank für die Wiki, ich werd mich wohl erstmal ans speichern setzen nun, anstatt weiter beim zeichnen zu verzweifeln :D
Antworten