Hallo leute
Ich bin ein fortgeschrittener python neuling und brauche mal etwas hilfe fuer ein program an dem ich fuer die uni stricke.
das gui wird im wx geschrieben und habe ehrlich gesagt mehr lust am algorythmus zu arbeiten als an dem GUI und deshalb bin ich nicht ganz gut im wx. Mein Problem:
Wenn der benutzer auf file>new project klickt, soll der image browser aus den wx demos erscheinen und der benutzer soll sich ein bild aussuchen. Danach soll sich ein neuer dialog offnen in dem das ausgewaelhte bild vorhanden sein soll. kann mir jemand erklaren wie ich die adresse dynamich behalten kann so dass es vom ImageBrowser zum neuen dialog fenster ruebergegen wird.
Ein weiteres problem:
dieses bild soll dann mit einer matrix in einen container gepackt werden den man dann speichern kann.
Kann mir jemand irgendwelche literatur geben in der beschieben wird wie man so einen neuen container enwickelt und wie mann ihn wie eine eigene FileExt behandelt.
Danke leute. Ist zwar mein erster post, aber ich verfolge euer forum seit einiger zeit und immer hab ich bei euch eine antwort gefunden beim googe-ln. Ihr seit toll.
Dateiauswahl und Co
- azrael1111
- User
- Beiträge: 23
- Registriert: Sonntag 12. November 2006, 21:05
- Wohnort: Croatien
Hoi und willkommen im Forum!
vorweg: Sag' mal, klemmt Deine Shift-Taste?
Wie Du sicher weißt arbeiten wir in Python nicht mit Adressen. Aber schau Dir mal den relevanten Beispielcode an:
D. h. Du kannst wie es Dir beliebt ein Verzeichnis geben, wo der Dialog für den Nutzer startet (initial_dir). Und mit GetFile() (also einer Methode des Dialogs) kannst Du den Pfad holen, in dem das Bild steht. Wenn Du ein konkretes Problem mit Deinem Code hast, zeig' den doch mal her, wir können Dir dabei sicher helfen.
Zum Zweiten Problem: Warum einen Container selber schreiben? Kennst Du PIL? In Verbund mit numpy und scipy hast Du schon Container mit verdammt vielen Manipulationsmöglichkeiten.
Gruß,
Christian
PS Dein Thread-Titel ist nicht sonderlich aussagekräftig ...
vorweg: Sag' mal, klemmt Deine Shift-Taste?
Und was ist das?fortgeschrittener python neuling

Eigentlich gar nicht.kann mir jemand erklaren wie ich die adresse dynamich behalten kann so dass es vom ImageBrowser zum neuen dialog fenster ruebergegen wird.

Code: Alles auswählen
dlg = ib.ImageDialog(self, initial_dir)
dlg.Centre()
if dlg.ShowModal() == wx.ID_OK:
# show the selected file
self.log.WriteText("You Selected File: " + dlg.GetFile())
Zum Zweiten Problem: Warum einen Container selber schreiben? Kennst Du PIL? In Verbund mit numpy und scipy hast Du schon Container mit verdammt vielen Manipulationsmöglichkeiten.
Ich hoffe ich konnte weiterhelfen, aber was das genau bedeuten soll, weiß ich nicht. Kannst Du genauer werden und erklären was Du meinst?und wie mann ihn wie eine eigene FileExt behandelt.
Gruß,
Christian
PS Dein Thread-Titel ist nicht sonderlich aussagekräftig ...

- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi azrael!azrael1111 hat geschrieben:dieses bild soll dann mit einer matrix in einen container gepackt werden den man dann speichern kann.
Kann mir jemand irgendwelche literatur geben in der beschieben wird wie man so einen neuen container enwickelt und wie mann ihn wie eine eigene FileExt behandelt.
Willkommen im Python-Forum!
Mit oben aufgezeigter Frage kann ich nichts anfangen, da ich ja nicht weiß wie du dir diese Matrix vorstellst und was du mit "FileExt" vorhast und was das überhaupt sein soll, aber wie man den ImageDialog aufruft und verwendet, das kann ich vorzeigen:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
import wx.lib.imagebrowser as ib
wx.SetDefaultPyEncoding("iso-8859-1")
class MyFrame(wx.Frame):
def __init__(self, parent = None, id = -1, title = "Bildanzeige"):
# Init
wx.Frame.__init__(
self, parent, id, title, style = wx.DEFAULT_FRAME_STYLE & ~ (
wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX
)
)
self.titlestring = title
# Panel
panel = wx.Panel(self)
# Rahmen um Alles
vbox = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox)
# Bildanzeige
image_view = wx.StaticBitmap(panel, size = (500, 400))
vbox.Add(image_view, 1, wx.ALL | wx.EXPAND, border = 10)
self.image_view = image_view
image_view.Bind(wx.EVT_LEFT_UP, self.show_image)
# Frame auf Mindestgröße resizen und zentrieren
panel.Fit()
self.Fit()
self.Center()
def show_image(self, event = None):
image_view = self.image_view
dlg = ib.ImageDialog(self)
if dlg.ShowModal() == wx.ID_OK:
filename = dlg.GetFile()
self.SetLabel(self.titlestring + " -- " + filename)
image = wx.Image(filename)
image.Rescale(*image_view.GetSizeTuple())
image_view.SetBitmap(wx.BitmapFromImage(image))
def main():
app = wx.PySimpleApp()
f = MyFrame()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- azrael1111
- User
- Beiträge: 23
- Registriert: Sonntag 12. November 2006, 21:05
- Wohnort: Croatien
wegen der Shift taste:
ich bin nicht aus Deutschland, hab mal in Berlin gelebt. Wegen der Grossbustaben, Sorry, ist ne Zeit her dass ich irgendetwas auf Deutsch geschrieben habe
Pil si mir bekannt, hab zwar die dokumentation nicht studiert. deshalb ist mir nicht bekannt dass er Kontainer besitzt.
Ich wollte einen eigenen Kontainer weil er verschiedene arten von daten beihalten soll. Von Bild, Matrix, bis Audio Sequenzen.
Mit Python habe ich etwas gearbeitet und etwas mit PIL und VPython, aber bei WX bin ich total neu. Wenn es denn Boa Constructor nicht gaebe haette ich gar nichts. Wenn ich an Python denke faellt mir zuerst die einfache Syntaxe ein, aber bei WX raufe ich mir die Haare aus. Ich weiss nicht was ich machen soll. Gibt es irgend ein tool das besser als der Boa constructor ist. Es waere nict in ordnung von mir zu fragen ob jemand das gui an meiner stelle machen will. Es sind nur einige dinge die ich nicht weiss wie zu machen.
Unter FileExt meinte ich einen neuen container der eine andere Extension hat
Noch ein mal, sorry fuer die schlechte Rechtschreibung
ich bin nicht aus Deutschland, hab mal in Berlin gelebt. Wegen der Grossbustaben, Sorry, ist ne Zeit her dass ich irgendetwas auf Deutsch geschrieben habe
Pil si mir bekannt, hab zwar die dokumentation nicht studiert. deshalb ist mir nicht bekannt dass er Kontainer besitzt.
Ich wollte einen eigenen Kontainer weil er verschiedene arten von daten beihalten soll. Von Bild, Matrix, bis Audio Sequenzen.
Mit Python habe ich etwas gearbeitet und etwas mit PIL und VPython, aber bei WX bin ich total neu. Wenn es denn Boa Constructor nicht gaebe haette ich gar nichts. Wenn ich an Python denke faellt mir zuerst die einfache Syntaxe ein, aber bei WX raufe ich mir die Haare aus. Ich weiss nicht was ich machen soll. Gibt es irgend ein tool das besser als der Boa constructor ist. Es waere nict in ordnung von mir zu fragen ob jemand das gui an meiner stelle machen will. Es sind nur einige dinge die ich nicht weiss wie zu machen.
Unter FileExt meinte ich einen neuen container der eine andere Extension hat
Noch ein mal, sorry fuer die schlechte Rechtschreibung
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi azrael!azrael1111 hat geschrieben:bei WX bin ich total neu
wxPython fühlt sich ziemlich einfach und logisch an, nachdem man das Buch "wxPython in Action" gelesen hat.
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Na, mach Dir dann mal keinen Kopf drum - es ist nur so, daß es sich im Deutschen einfacher liest, wenn es ab und zu Großbuchstaben gibt.azrael1111 hat geschrieben:wegen der Shift taste:
ich bin nicht aus Deutschland, hab mal in Berlin gelebt. Wegen der Grossbustaben, Sorry, ist ne Zeit her dass ich irgendetwas auf Deutsch geschrieben habe
Na ja, jetzt weiß ich nicht so recht was bei Dir Container heißt: mit PIL kannst Du leicht Bilder öffnen und manipulieren. Die Doku ist gut und recht schnell zu verstehen, wegen der vielen Beispiele. Also da nicht verzagen.azrael1111 hat geschrieben: Pil si mir bekannt, hab zwar die dokumentation nicht studiert. deshalb ist mir nicht bekannt dass er Kontainer besitzt.
Ich wollte einen eigenen Kontainer weil er verschiedene arten von daten beihalten soll. Von Bild, Matrix, bis Audio Sequenzen.
Aber EIN Container, der das Alles soll ... na ja, das ließe sich schon mit einer Klasse machen, aber willst Du das wirklich? Vielleicht magst Du mal drüber nachdenken, wie Du Dein Ziel am besten beschreiben kannst und einen neuen Thread hier irgendwo im Forum aufmachen? Wenn man solche Designfragen am Anfang eines Projektes klärt, lebt es sich hinterher einfacher.
Tut mir leid, mit GUI-Hilfsprogrammen kenne ich mich nicht so aus. Gerold, Franz oder sonst wer: Eine Idee?azrael1111 hat geschrieben: Mit Python habe ich etwas gearbeitet und etwas mit PIL und VPython, aber bei WX bin ich total neu. Wenn es denn Boa Constructor nicht gaebe haette ich gar nichts. Wenn ich an Python denke faellt mir zuerst die einfache Syntaxe ein, aber bei WX raufe ich mir die Haare aus. Ich weiss nicht was ich machen soll. Gibt es irgend ein tool das besser als der Boa constructor ist. Es waere nict in ordnung von mir zu fragen ob jemand das gui an meiner stelle machen will. Es sind nur einige dinge die ich nicht weiss wie zu machen.
Gruß und gute Nacht für heute,
Christian
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Das Beispiel um korrekte Skalierung erweitert:
lg
Gerold

Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
import wx.lib.imagebrowser as ib
wx.SetDefaultPyEncoding("iso-8859-1")
class MyFrame(wx.Frame):
def __init__(self, parent = None, id = -1, title = "Bildanzeige"):
# Init
wx.Frame.__init__(
self, parent, id, title, style = wx.DEFAULT_FRAME_STYLE & ~ (
wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX
)
)
self.titlestring = title
# Panel
panel = wx.Panel(self)
# Rahmen um Alles
vbox = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox)
# Bildanzeige
image_view = wx.StaticBitmap(panel, size = (500, 400))
vbox.Add(image_view, 1, wx.ALL | wx.EXPAND, border = 10)
self.image_view = image_view
image_view.Bind(wx.EVT_LEFT_UP, self.show_image)
# Frame auf Mindestgröße resizen und zentrieren
panel.Fit()
self.Fit()
self.Center()
def show_image(self, event = None):
image_view = self.image_view
# Dialog
dlg = ib.ImageDialog(self)
if dlg.ShowModal() == wx.ID_OK:
# Dateiname eruieren und in Titelleiste schreiben
filename = dlg.GetFile()
self.SetLabel(self.titlestring + " -- " + filename)
# Bild laden
image = wx.Image(filename)
# Maximale Größe des Bildes für die Anzeige und derzeitige
# Größe herausfinden
max_width, max_height = image_view.GetSizeTuple()
max_width = float(max_width)
max_height = float(max_height)
original_width, original_height = tuple(image.GetSize())
original_width = float(original_width)
original_height = float(original_height)
# Wenn die maximale Breite oder die maximale Höhe kleiner als die
# Original-Breite/-Höhe ist, dann muss verkleinert werden.
# Herausfinden um wieviel verkleinert werden muss.
shrink_perc = 100.0
if original_width > max_width:
shrink_perc = max_width / original_width * 100.0
if original_height > max_height:
temp_shrink_perc = max_height / original_height * 100.0
if temp_shrink_perc < shrink_perc:
shrink_perc = temp_shrink_perc
# Falls verkleinert werden muss --> verkleinern
if shrink_perc < 100.0:
new_width = int(original_width / 100.0 * shrink_perc)
new_height = int(original_height / 100.0 * shrink_perc)
image.Rescale(new_width, new_height)
# Bilaufbau sperren, Bild zuweisen und Bildaufbau wieder frei geben.
image_view.Freeze()
image_view.SetBitmap(wx.BitmapFromImage(image))
image_view.Refresh()
image_view.Thaw()
def main():
app = wx.PySimpleApp()
f = MyFrame()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
Gerold

Zuletzt geändert von gerold am Sonntag 12. November 2006, 23:50, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- azrael1111
- User
- Beiträge: 23
- Registriert: Sonntag 12. November 2006, 21:05
- Wohnort: Croatien
Es ist ein Projekt aus dem gebiet der Biometrik. Der mathematische Algorithmus ist kein problem. Das GUI nervt. Danke fuer den Code. Das Design ist kein problem. Ich weiss nicht wie man die Daten zwichen den dialogen und hin und her gibt.
Ich hab mir das buch besorgt. mach mich auf die arbeit
Dass ist das ImageBrowser beispiel aus dem wx-Demos
Wie kann ich jetzt das vorherige beispiel damit verbinden. Also wenn man aus dem ImgeBrowser sich ein bild auswaehlt soll es im einem neuem dialog geoeffnet werden(vorherige Code von Gerold)
Edit (Leonidas): Code in Python-Tags gesetzt.
Edit (Leonidas): Thread-Titel geändert.
Danke leute, ich habs geloest. Sehr vielen dank. Ihr seit ein super comunity !!!
Ich hab mir das buch besorgt. mach mich auf die arbeit
Code: Alles auswählen
def OnMenuFileNewMenu(self, event):
# get current working directory
dir = os.getcwd()
# set the initial directory for the demo bitmaps
initial_dir = os.path.join(dir, 'bitmaps')
# open the image browser dialog
dlg = ib.ImageDialog(self, initial_dir)
dlg.Centre()
if dlg.ShowModal() == wx.ID_OK:
# show the selected file
self.log.WriteText("You Selected File: " + dlg.GetFile())
else:
self.log.WriteText("You pressed Cancel\n")
dlg.Destroy()
Dass ist das ImageBrowser beispiel aus dem wx-Demos
Wie kann ich jetzt das vorherige beispiel damit verbinden. Also wenn man aus dem ImgeBrowser sich ein bild auswaehlt soll es im einem neuem dialog geoeffnet werden(vorherige Code von Gerold)
Edit (Leonidas): Code in Python-Tags gesetzt.
Edit (Leonidas): Thread-Titel geändert.
Danke leute, ich habs geloest. Sehr vielen dank. Ihr seit ein super comunity !!!
- azrael1111
- User
- Beiträge: 23
- Registriert: Sonntag 12. November 2006, 21:05
- Wohnort: Croatien
habt mir sehr geholfen
ich wollte nur noch Gerold bitten mir zu zeigenwie man es anstellt wenn das Bild im frame geladen wird, dass sich die Groesse des frames verandert so dass sein Rahmen immer an das Bild angrenzt. So als waere das Bild im Frame maximiziert nur dass das Bild seine originale groesse hat
ich wollte nur noch Gerold bitten mir zu zeigenwie man es anstellt wenn das Bild im frame geladen wird, dass sich die Groesse des frames verandert so dass sein Rahmen immer an das Bild angrenzt. So als waere das Bild im Frame maximiziert nur dass das Bild seine originale groesse hat
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi azrael!azrael1111 hat geschrieben:dass sich die Groesse des frames verandert so dass sein Rahmen immer an das Bild angrenzt.
Hier das Beispiel -- leicht abgeändert:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
import wx.lib.imagebrowser as ib
wx.SetDefaultPyEncoding("iso-8859-1")
class MyFrame(wx.Frame):
def __init__(self, parent = None, id = -1, title = "Bildanzeige"):
# Init
wx.Frame.__init__(
self, parent, id, title, style = wx.DEFAULT_FRAME_STYLE & ~ (
wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX
)
)
self.titlestring = title
# Panel
panel = wx.Panel(self)
self.panel = panel
# Sizer
vbox = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox)
# Bildanzeige
image_view = wx.StaticBitmap(panel, size = (500, 400))
vbox.Add(image_view, 1, wx.EXPAND)
self.image_view = image_view
image_view.Bind(wx.EVT_LEFT_UP, self.show_image)
# Frame auf Mindestgröße resizen und zentrieren
panel.Fit()
self.Fit()
self.Center()
def show_image(self, event = None):
image_view = self.image_view
panel = self.panel
# Dialog
dlg = ib.ImageDialog(self)
if dlg.ShowModal() == wx.ID_OK:
# Dateiname eruieren und in Titelleiste schreiben
filename = dlg.GetFile()
self.SetLabel(self.titlestring + " -- " + filename)
# Bild laden
image = wx.Image(filename)
# Bilaufbau des Frames sperren
self.Freeze()
# Mindestgröße des Bildes festlegen und Panel und Frame an
# Mindestgröße anpassen.
image_view.SetSizeHintsSz(image.GetSize())
panel.Fit()
self.Fit()
# Bild zuweisen
image_view.SetBitmap(wx.BitmapFromImage(image))
image_view.Refresh()
# Bildaufbau wieder frei geben.
self.Thaw()
def main():
app = wx.PySimpleApp()
f = MyFrame()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- azrael1111
- User
- Beiträge: 23
- Registriert: Sonntag 12. November 2006, 21:05
- Wohnort: Croatien
danke leute. vielen vielen dank
- azrael1111
- User
- Beiträge: 23
- Registriert: Sonntag 12. November 2006, 21:05
- Wohnort: Croatien
Kann mi jemand sagen ob folgendes moeglich ist:
man offnet ein dokument (bild) und das Bild wird im neuem Fenster geoefnet, aber dass fenster soll innerhalb des neuen MainFrame. Bin mir nicht sicher ob ihr wisst was ich meine. So aehnlich wie im PhotoShop. Wenn man ein neues bild erstellt kann man es innerhald Photshops Mainframe kontrolieren so dass man das bestimmte bild auch speichern kann.
Das kan mann sicher machen, aber wie. Wie heist dass ist dass ein Frame, Mini frame, ...
man offnet ein dokument (bild) und das Bild wird im neuem Fenster geoefnet, aber dass fenster soll innerhalb des neuen MainFrame. Bin mir nicht sicher ob ihr wisst was ich meine. So aehnlich wie im PhotoShop. Wenn man ein neues bild erstellt kann man es innerhald Photshops Mainframe kontrolieren so dass man das bestimmte bild auch speichern kann.
Das kan mann sicher machen, aber wie. Wie heist dass ist dass ein Frame, Mini frame, ...
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi azrael!azrael1111 hat geschrieben:man offnet ein dokument (bild) und das Bild wird im neuem Fenster geoefnet, aber dass fenster soll innerhalb des neuen MainFrame.
Nur unter Windows und da heißt es "MDI-Fenster". Suche in der wxPython-Demo nach "MDIWindows".
``wx.MDIParentFrame`` und ``wx.MDIChildFrame`` sind dafür zu verwenden.
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Beispiel:gerold hat geschrieben:``wx.MDIParentFrame`` und ``wx.MDIChildFrame`` sind dafür zu verwenden.

Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-1")
class MyMDIChildFrame(wx.MDIChildFrame):
def __init__(self, parent = None, id = -1, title = "Child Window"):
wx.MDIChildFrame.__init__(self, parent, id, title)
panel = wx.Panel(self)
label = wx.StaticText(panel, -1, title)
class MyMDIParentFrame(wx.MDIParentFrame):
def __init__(self, parent = None, id = -1, title = "My Parent MDI-Frame"):
wx.MDIParentFrame.__init__(self, parent, id, title)
self.children = []
menubar = wx.MenuBar()
mnu_file = wx.Menu()
menuitem = mnu_file.Append(-1, "New Window", "Fuegt neues Fenster hinzu")
self.Bind(wx.EVT_MENU, self.new_childframe, menuitem)
menubar.Append(mnu_file, "&File")
self.SetMenuBar(menubar)
self.CreateStatusBar()
self.SetSizeHints(400, 300)
self.Fit()
self.Maximize(True)
self.Refresh()
def new_childframe(self, event = None):
children = self.children
title = "Child Frame %i" % (len(self.children) + 1)
children.append(MyMDIChildFrame(self, title = title))
new_child = children[-1]
new_child.Show()
def main():
app = wx.PySimpleApp()
f = MyMDIParentFrame()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hallo, ich bin auf der Suche nach einer Möglichkeit ein Bild skaliert in ein Panel einzufügen und habe den o.g. Code mal modifiziert. Funktioniert, aber erst, wenn ich mit der Maus in das Bild klicke. Ich hätte gerne sofort das Bild angezeigt??
Ist es umständlich diesen Weg zu gehen?
[/code]
Ist es umständlich diesen Weg zu gehen?
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
import wx.lib.imagebrowser as ib
wx.SetDefaultPyEncoding("iso-8859-1")
class MyFrame(wx.Frame):
def __init__(self, parent = None, id = -1, title = "Bildanzeige"):
# Init
wx.Frame.__init__(
self, parent, id, title, style = wx.DEFAULT_FRAME_STYLE & ~ (
wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX
)
)
self.titlestring = title
# Panel
panel = wx.Panel(self)
# Rahmen um Alles
vbox = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox)
# Bildanzeige
image_view = wx.StaticBitmap(panel, size = (500, 400))
vbox.Add(image_view, 1, wx.ALL | wx.EXPAND, border = 10)
self.image_view = image_view
image_view.Bind(wx.EVT_LEFT_UP, self.show_image)
# Frame auf Mindestgröße resizen und zentrieren
panel.Fit()
self.Fit()
self.Center()
def show_image(self, event = None):
image_view = self.image_view
# Dialog
# Dateiname eruieren und in Titelleiste schreiben
#filename = dlg.GetFile()
#self.SetLabel(self.titlestring + " -- " + filename)
# Bild laden
image = wx.Image('Bild.jpg')
# Maximale Größe des Bildes für die Anzeige und derzeitige
# Größe herausfinden
max_width, max_height = image_view.GetSizeTuple()
max_width = float(max_width)
max_height = float(max_height)
original_width, original_height = tuple(image.GetSize())
original_width = float(original_width)
original_height = float(original_height)
# Wenn die maximale Breite oder die maximale Höhe kleiner als die
# Original-Breite/-Höhe ist, dann muss verkleinert werden.
# Herausfinden um wieviel verkleinert werden muss.
shrink_perc = 100.0
if original_width > max_width:
shrink_perc = max_width / original_width * 100.0
if original_height > max_height:
temp_shrink_perc = max_height / original_height * 100.0
if temp_shrink_perc < shrink_perc:
shrink_perc = temp_shrink_perc
# Falls verkleinert werden muss --> verkleinern
if shrink_perc < 100.0:
new_width = int(original_width / 100.0 * shrink_perc)
new_height = int(original_height / 100.0 * shrink_perc)
image.Rescale(new_width, new_height)
# Bilaufbau sperren, Bild zuweisen und Bildaufbau wieder frei geben.
image_view.Freeze()
image_view.SetBitmap(wx.BitmapFromImage(image))
image_view.Refresh()
image_view.Thaw()
def main():
app = wx.PySimpleApp()
f = MyFrame()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()