Hallo,
gibt es in wxpython LED's zu benutzen ?
Habe mir selber welche erstellt, aber das sind Bitmaps.
Also bei Veränderung der Bildschirmgröße bleiben diese gleich.
Gibt es da was ?
Hab jetzt schon ein bischen gesucht aber nur so Digital gefunden und bräuchte sie als Statusmeldung rot oder grün und blinkend.
Wenn es da was gibt wäre super.
Danke
LED benutzen
Erstmal Danke für die Antwort.
Die zwei Links habe ich auch gefunden.
Problem ist nur wenn ich die Bildschirmauflösung ändere, dann versetzt sich das ganze.
Dachte es gibt schon für python so eine LED. Wie bei einem PC wenn er hochfährt und die LED leuchtet.
Was anderes ?
Ich habe in wx.python eine Oberfläche erstellt, aber irgendwie kann ich die Buttons nicht mehr drücken. Ich habe keine Ahnung warum.
def buttonClick habe ich jetzt nicht aufgezeigt
Vielleicht weiß wer was das Problem ist.
Die Buttons werden anzeigt zeigen aber keine Funktion
Danke
Die zwei Links habe ich auch gefunden.
Problem ist nur wenn ich die Bildschirmauflösung ändere, dann versetzt sich das ganze.
Dachte es gibt schon für python so eine LED. Wie bei einem PC wenn er hochfährt und die LED leuchtet.
Was anderes ?
Ich habe in wx.python eine Oberfläche erstellt, aber irgendwie kann ich die Buttons nicht mehr drücken. Ich habe keine Ahnung warum.
Code: Alles auswählen
class MyFrame(wx.Frame):
#"""make a frame, inherits wx.Frame"""
def __init__(self,parent,id,title):
# create a frame, no parent, default to wxID_ANY
wx.Frame.__init__(self, parent, id, title, pos=(0, 0), size=wx.DisplaySize(),style=wx.DEFAULT_FRAME_STYLE & ~ (wx.RESIZE_BORDER | wx.RESIZE_BOX | wx.MAXIMIZE_BOX))
self.SetAutoLayout(True)
self.panelE = wx.Window(self, -1, style=wx.SIMPLE_BORDER)
self.panelE.SetBackgroundColour(wx.WHITE)
self.panelE.SetConstraints(
layoutf.Layoutf('t=t#1;r=r#1;b=b#1;l=l#1', (self,)))
self.button = wx.Button(self, 1000, "Start")
self.button.SetPosition((100, 50))
self.button.SetForegroundColour(wx.Color(255,0,0))
self.button.SetBackgroundColour(wx.BLUE)
self.button.SetSize(wx.Size(150,50))
self.button.Bind(wx.EVT_BUTTON, self.buttonClick)
self.button.SetToolTip(wx.ToolTip("Starte Programm"))
Vielleicht weiß wer was das Problem ist.
Die Buttons werden anzeigt zeigen aber keine Funktion
Danke
Du ordnest dein Event nicht richtig zu. Du musst das Event an etwas in der Hierarchie höher gelegenes "binden". In deinem Fall bindest du es an das Button selbst dass das Event auslösen soll. Du musst es an "self.panelE" binden.
Also:(Beachte das "self.button" am Ende!)
Allerdings erkläre doch bitte mal, warum du ein wx.Window in einem wx.Window erstellst? Normalerweise packt man ein wx.Panel in ein wx.Window.
Möglicherweise kommt daher auch der Fehler bei geänderter Auflösung bzw. Größe.
Also:
Code: Alles auswählen
...
self.panelE.Bind(wx.EVT_BUTTON, self.buttonClick, self.button)
....
Allerdings erkläre doch bitte mal, warum du ein wx.Window in einem wx.Window erstellst? Normalerweise packt man ein wx.Panel in ein wx.Window.
Möglicherweise kommt daher auch der Fehler bei geänderter Auflösung bzw. Größe.
Danke für deine Antwort.
Leider hat sich an meinen Problem nichts geändert.
Ich habe es jetzt an den panel gebunden.
UNd das wx.Window durch wx.panel ersetztz, aber der Fehler ist trotzdem noch.
Mir kommt es so vor al wäre der Button statisch. Beim klicken müsste er sich eigentlich bewegen, dass macht er aber nicht unabhängig vom bind.
Danke
Leider hat sich an meinen Problem nichts geändert.
Ich habe es jetzt an den panel gebunden.
UNd das wx.Window durch wx.panel ersetztz, aber der Fehler ist trotzdem noch.
Mir kommt es so vor al wäre der Button statisch. Beim klicken müsste er sich eigentlich bewegen, dass macht er aber nicht unabhängig vom bind.
Danke
Jetzt hab ich schon mal was herausgefunden:
Wenn ich den button panelE binde funktioniert es, aber wenn ich ihn an panelA binde geht der button nicht.
Warum ?
Achja damit das Thema mit der LED nicht verschiwindet, weiß also keiner was
Code: Alles auswählen
self.panelE = wx.Panel(self, 1)#, style=wx.SIMPLE_BORDER)
self.panelE.SetBackgroundColour(wx.WHITE)
self.panelE.SetConstraints(
layoutf.Layoutf('t=t#1;r=r#1;b=b#1;l=l#1', (self,)))
self.panelA = wx.Panel(self,2 )#, style=wx.SIMPLE_BORDER)
self.panelA.SetBackgroundColour(wx.BLACK)
self.panelA.SetConstraints(
layoutf.Layoutf('t=t#1;l=l#1;b=b#1;r%r10#1',(self,))
self.button = wx.Button(self.panelE, 1000, 'Start')
self.button.SetPosition((150, 200))
self.button.SetForegroundColour(wx.Color(255,0,0))
self.button.SetBackgroundColour(wx.BLUE)
self.button.SetSize(wx.Size(150,50))
#self.panelB.Bind(wx.EVT_BUTTON, self.buttonClick,self.button)
self.button.SetToolTip(wx.ToolTip("Starte Programm"))
)
Warum ?
Achja damit das Thema mit der LED nicht verschiwindet, weiß also keiner was
Wie gesagt, du musst die Hierarchie beachten. Du kannst dir das ungefähr so vorstellen: (Ausgehend von deinem letzten Beispiel)
Wenn du nun dein Button erstellst...
...dann sieht die Hierarchie folgendermaßen aus:
Wenn du nun dein Event an "panelA" bindest, kann es nichts damit anfangen, weil es kein Objekt mit der Id "1000" kennt. Das tut nur "panelE". Wenn du hingegen das Event an "MyFrame" bindest, ist es unwichtig welchem Panel das Button zugeordnet wurde, denn das Frame steht in der Hierarchie über beiden Panels. Bist du mitgekommen?
Und wenn ich dir den Tipp geben darf, versuch erst gar nicht (ohne wirklich wichtigen und gut überlegten Grund) die Ids der Objekte selbst zu handhaben. Wenn du ein Objekt erstellst welches eine Id erwartet, gib entweder -1 an, oder wenn du anderweitig die Id benötigst, erstell dir mit wx.NewId() eine.
Zu deinem LED Problem kann ich so ohne Code nichts sagen.
PS: Wenn du etwas mehr über die Hintergründe der Objekt-Hierarchie erfahren möchtest, dann kann ich dir nur das hier empfehlen: http://wiki.wxpython.org/Widget%20Inspection%20Tool
Code: Alles auswählen
MyFrame (wx.Frame)
|
|____panelE (wx.Panel)
|
|____panelA (wx.Panel)
Code: Alles auswählen
self.button = wx.Button(self.panelE, 1000, 'Start')
Code: Alles auswählen
MyFrame (wx.Frame)
|
|____panelE (wx.Panel)
| |
| |_____button (wx.Button)
|
|____panelA (wx.Panel)
Und wenn ich dir den Tipp geben darf, versuch erst gar nicht (ohne wirklich wichtigen und gut überlegten Grund) die Ids der Objekte selbst zu handhaben. Wenn du ein Objekt erstellst welches eine Id erwartet, gib entweder -1 an, oder wenn du anderweitig die Id benötigst, erstell dir mit wx.NewId() eine.
Zu deinem LED Problem kann ich so ohne Code nichts sagen.
PS: Wenn du etwas mehr über die Hintergründe der Objekt-Hierarchie erfahren möchtest, dann kann ich dir nur das hier empfehlen: http://wiki.wxpython.org/Widget%20Inspection%20Tool
Anstelle der -1 würde ich `wx.ID_ANY` nehmen. Dann weiss der Leser auch was das Argument bedeutet.
Vielen Dank. Habs jetzt hinbekommen.
Da es mit den LED nicht gibt werde ich Sie selbst zeichnen.
Dann tritt aber das nächste Problem auf!
Wenn ich bei einem großen Bildschirm alles einstelle und dann das ganze an einen kleineren anschliesse wandert mein Bild.
Gibt da irgendwelche Beispiele wie ich das Bild immer auf der gleichen Position halten kann.
Vielen Dank
Da es mit den LED nicht gibt werde ich Sie selbst zeichnen.
Dann tritt aber das nächste Problem auf!
Wenn ich bei einem großen Bildschirm alles einstelle und dann das ganze an einen kleineren anschliesse wandert mein Bild.
Gibt da irgendwelche Beispiele wie ich das Bild immer auf der gleichen Position halten kann.
Vielen Dank
Hallo,
ich habe jetzt die LED erstellt. Einzeln würde es gehen aber wenn ich es in meinen Code einbinde leider nicht mehr. Da sich die Grafik aufhängt.
LED Code
Dann habe ich meine Grafische Oberfläche(ein Auschnitt):
self.panelD = wx.Panel(self.panelE, -1)#, style=wx.SIMPLE_BORDER)
self.panelD.SetBackgroundColour(wx.Colour(146,178,193))
self.panelD.SetConstraints(
layoutf.Layoutf('t_t#3;r=r#1;b%b70#1;l>1#2', (self,self.panelC,self.panelF))
)
self.LED6(3)
def LED6(self, farbe):
l6 = LED(self.panelD)
lcd_work = l6
lcd_work.SetState(farbe)
posi22 = self.pos(150, 410)
l6.Position=posi22
self.Show()[/code]
Wenn ich jetzt mit einem Modul in die def LED6() der Grafischen Oberfläche gehe.
hängt sich das ganze auf.
modul Auschnitt:
def run (self):
while True:
time.sleep(2)
self.parent1.LED6(1)
[/code]
Oder wie könnte ich das ganze realisieren ?
Damit ich die LED ansteuern kann die auf der Grafische Oberfläche ist
VG
ich habe jetzt die LED erstellt. Einzeln würde es gehen aber wenn ich es in meinen Code einbinde leider nicht mehr. Da sich die Grafik aufhängt.
LED Code
Code: Alles auswählen
def change_intensity(color, fac):
rgb = [color.Red(), color.Green(), color.Blue()]
for i, intensity in enumerate(rgb):
rgb[i] = min(int(round(intensity*fac, 0)), 255)
return wx.Color(*rgb)
class LED(wx.Control):
def __init__(self, parent, id=-1, colors=[wx.Colour(220, 10, 10), wx.Colour(250, 200, 0), wx.Colour(10, 220, 10),wx.Colour(240,240,240)],
pos=(-1,-1), style=wx.NO_BORDER):
size = (500, 500)
wx.Control.__init__(self, parent, id, pos, size, style)
self.MinSize = size
self._colors = colors
self._state = -1
self.SetState(0)
self.Bind(wx.EVT_PAINT, self.OnPaint, self)
def SetState(self, i):
if i < 0:
raise ValueError, 'Cannot have a negative state value.'
elif i >= len(self._colors):
raise IndexError, 'There is no state with an index of %d.' % i
elif i == self._state:
return
self._state = i
base_color = self._colors[i]
light_color = change_intensity(base_color, 1.15)
shadow_color = change_intensity(base_color, 1.07)
highlight_color = change_intensity(base_color, 1.25)
ascii_led = '''
000000-----00000000
0000---------000000
000-----------00000
00-----XXX----=0000
0----XX**XXX-===000
0---X***XXXXX===000
----X**XXXXXX====00
---X**XXXXXXXX===00
---XXXXXXXXXXX===00
---XXXXXXXXXXX===00
----XXXXXXXXX====00
0---XXXXXXXXX===000
0---=XXXXXXX====000
00=====XXX=====0000
000===========00000
0000=========000000
000000=====00000000
0000000000000000000
'''.strip()
xpm = ['19 30 5 1', # width height ncolors chars_per_pixel
'0 c None',
'X c %s' % base_color.GetAsString(wx.C2S_HTML_SYNTAX).encode('ascii'),
'- c %s' % light_color.GetAsString(wx.C2S_HTML_SYNTAX).encode('ascii'),
'= c %s' % shadow_color.GetAsString(wx.C2S_HTML_SYNTAX).encode('ascii'),
'* c %s' % highlight_color.GetAsString(wx.C2S_HTML_SYNTAX).encode('ascii')]
xpm += [s.strip() for s in ascii_led.splitlines()]
self.bmp = wx.BitmapFromXPMData(xpm)
self.Refresh()
def GetState(self):
return self._state
State = property(GetState, SetState)
def OnPaint(self, e):
dc = wx.PaintDC(self)
dc.DrawBitmap(self.bmp, 0, 0, True)
Code: Alles auswählen
class MyFrame(wx.Frame):
#"""make a frame, inherits wx.Frame"""
def __init__(self,parent,id,title):
# create a frame, no parent, default to wxID_ANY
wx.Frame.__init__(self, parent, id, title, pos=(0, 0), size=wx.DisplaySize(),style=wx.DEFAULT_FRAME_STYLE & ~ (wx.RESIZE_BORDER | wx.RESIZE_BOX | wx.MAXIMIZE_BOX))
self.panelD.SetBackgroundColour(wx.Colour(146,178,193))
self.panelD.SetConstraints(
layoutf.Layoutf('t_t#3;r=r#1;b%b70#1;l>1#2', (self,self.panelC,self.panelF))
)
self.LED6(3)
def LED6(self, farbe):
l6 = LED(self.panelD)
lcd_work = l6
lcd_work.SetState(farbe)
posi22 = self.pos(150, 410)
l6.Position=posi22
self.Show()[/code]
Wenn ich jetzt mit einem Modul in die def LED6() der Grafischen Oberfläche gehe.
hängt sich das ganze auf.
modul Auschnitt:
Code: Alles auswählen
class ThreadDatei(threading.Thread):
##################Thread Variable Zuweisung#####################
######################################################################
def __init__(self,parent1):
self.parent1 = parent1
while True:
time.sleep(2)
self.parent1.LED6(1)
[/code]
Oder wie könnte ich das ganze realisieren ?
Damit ich die LED ansteuern kann die auf der Grafische Oberfläche ist
VG