Dateiauswahl und Co

Plattformunabhängige GUIs mit wxWidgets.
Benutzeravatar
azrael1111
User
Beiträge: 23
Registriert: Sonntag 12. November 2006, 21:05
Wohnort: Croatien

Dateiauswahl und Co

Beitragvon azrael1111 » Sonntag 12. November 2006, 21:24

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.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Sonntag 12. November 2006, 22:08

Hoi und willkommen im Forum!

vorweg: Sag' mal, klemmt Deine Shift-Taste?
fortgeschrittener python neuling
Und was ist das? :wink:

kann mir jemand erklaren wie ich die adresse dynamich behalten kann so dass es vom ImageBrowser zum neuen dialog fenster ruebergegen wird.
Eigentlich gar nicht. :wink: Wie Du sicher weißt arbeiten wir in Python nicht mit Adressen. Aber schau Dir mal den relevanten Beispielcode an:

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())

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.

und wie mann ihn wie eine eigene FileExt behandelt.

Ich hoffe ich konnte weiterhelfen, aber was das genau bedeuten soll, weiß ich nicht. Kannst Du genauer werden und erklären was Du meinst?

Gruß,
Christian

PS Dein Thread-Titel ist nicht sonderlich aussagekräftig ... :wink:
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Ich brauche ein bisschen hilfe

Beitragvon gerold » Sonntag 12. November 2006, 23:08

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.

Hi azrael!

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()

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
azrael1111
User
Beiträge: 23
Registriert: Sonntag 12. November 2006, 21:05
Wohnort: Croatien

Beitragvon azrael1111 » Sonntag 12. November 2006, 23:12

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 12. November 2006, 23:17

azrael1111 hat geschrieben:bei WX bin ich total neu

Hi azrael!

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.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Sonntag 12. November 2006, 23:20

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, 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: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.

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.
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.

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.

Tut mir leid, mit GUI-Hilfsprogrammen kenne ich mich nicht so aus. Gerold, Franz oder sonst wer: Eine Idee?

Gruß und gute Nacht für heute,
Christian
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 12. November 2006, 23:46

Das Beispiel um korrekte Skalierung erweitert:

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()

lg
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.
Benutzeravatar
azrael1111
User
Beiträge: 23
Registriert: Sonntag 12. November 2006, 21:05
Wohnort: Croatien

Beitragvon azrael1111 » Sonntag 12. November 2006, 23:47

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


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 !!!
Benutzeravatar
azrael1111
User
Beiträge: 23
Registriert: Sonntag 12. November 2006, 21:05
Wohnort: Croatien

Beitragvon azrael1111 » Montag 13. November 2006, 17:28

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Montag 13. November 2006, 18:32

azrael1111 hat geschrieben:dass sich die Groesse des frames verandert so dass sein Rahmen immer an das Bild angrenzt.

Hi azrael!

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()

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
azrael1111
User
Beiträge: 23
Registriert: Sonntag 12. November 2006, 21:05
Wohnort: Croatien

Beitragvon azrael1111 » Montag 13. November 2006, 20:43

danke leute. vielen vielen dank
Benutzeravatar
azrael1111
User
Beiträge: 23
Registriert: Sonntag 12. November 2006, 21:05
Wohnort: Croatien

Nur noch einz

Beitragvon azrael1111 » Montag 13. November 2006, 22:20

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, ...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Nur noch einz

Beitragvon gerold » Montag 13. November 2006, 22:46

azrael1111 hat geschrieben:man offnet ein dokument (bild) und das Bild wird im neuem Fenster geoefnet, aber dass fenster soll innerhalb des neuen MainFrame.

Hi azrael!

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Nur noch einz

Beitragvon gerold » Montag 13. November 2006, 23:06

gerold hat geschrieben:``wx.MDIParentFrame`` und ``wx.MDIChildFrame`` sind dafür zu verwenden.

Beispiel: :D

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()

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

Beitragvon mathi » Dienstag 4. November 2008, 13:15

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: 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()
[/code]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder