Bild im wx.scrolledwindow scrollen

Plattformunabhängige GUIs mit wxWidgets.
Alexci
User
Beiträge: 44
Registriert: Dienstag 18. April 2006, 23:08
Kontaktdaten:

Bild im wx.scrolledwindow scrollen

Beitragvon Alexci » Freitag 5. Januar 2007, 15:17

Hallo,

Wie kann man ein Bild in wx.Scrolledwindow scrollen. Das Problem ist, wenn man ganz nach unten scrollt sieht man das Bild immer an der gleichen stelle... als ob se immer von der linken oberen Ecke des wx.ScrolledWindow neu geladen wird ohne ruecksinch darauf wo die scroller sind.


Frame1_r.py

Code: Alles auswählen

import wx
import wx.lib.buttons
import os
import sys
import pyfits
import win32com.client

def create(parent):
    return Frame1(parent)

[wxID_FRAME1SCROLLEDWINDOW1, wxID_FRAME1_r] = [wx.NewId() for _init_ctrls in range(2)]

class Frame1(wx.Frame):
    def _init_ctrls(self, prnt):
        wx.Frame.__init__(self, id=wxID_FRAME1_r, name='', parent=prnt, pos=wx.Point(2, 2), style=wx.DEFAULT_FRAME_STYLE, title='THAIA')
        self.SetClientSize(wx.Size(1272, 734))
        self.Maximize()

        self.scrolledWindow1 = wx.ScrolledWindow(id=wxID_FRAME1SCROLLEDWINDOW1, name='scrolledWindow', parent=self, pos=wx.Point(0, 24), size=wx.Size(1104, 580), style=wx.HSCROLL | wx.VSCROLL)
           
        self.scrolledWindow1.SetScrollbars(1,1, 2688, 1868)
        self.scrolledWindow1.SetScrollRate(40,40)

        self.scrolledWindow1.Bind(wx.EVT_PAINT, self.on_panel_paint)
       


    def __init__(self, parent):
        self._init_ctrls(parent)
       
    def on_panel_paint(self, event):
        p = win32com.client.dynamic.Dispatch('PinPoint.Plate')
        p.AttachFITS('E:/Aleksandar/Python/THAIA/4.fit')
        m = p.NewPlateDIB()
        r=p.RollAngle
        m.Create(1, 1, r, 1)
        m.Render(4350, 5200)
        dc = wx.PaintDC(self.scrolledWindow1)
        hdc = dc.GetHDC()
        m.PaintPicture(hdc)   





App1_r.py

Code: Alles auswählen

#!/usr/bin/env python
#Boa:App:BoaApp

import wx
import Frame1_r

modules ={'Frame1_r': [1, 'Main frame of Application', 'Frame1_r.py']}

class BoaApp(wx.App):
    def OnInit(self):
        wx.InitAllImageHandlers()
        self.main = Frame1_r.create(None)
        self.main.Show()
        self.SetTopWindow(self.main)
        return True

def main():
    application = BoaApp(0)
    application.MainLoop()

if __name__ == '__main__':
    main()





Danke!

Mit freundlichen Gruessen,
Aleksandar
Alexci
User
Beiträge: 44
Registriert: Dienstag 18. April 2006, 23:08
Kontaktdaten:

Beitragvon Alexci » Montag 8. Januar 2007, 19:35

Mit einem JPG geht es relativ einfach...


Code: Alles auswählen

import wx
 
class MyScrolledWindow(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(500, 400))
 
        sw = wx.ScrolledWindow(self)
        bmp = wx.Image('spanish.jpg',wx.BITMAP_TYPE_JPEG).ConvertToBitmap()
        wx.StaticBitmap(sw, -1, bmp)
        sw.SetScrollbars(20,20,55,40)

class MyApp(wx.App):
    def OnInit(self):
        frame = MyScrolledWindow(None, -1, 'Aliens')
        frame.Show(True)
        frame.Centre()
        return True
 
app = MyApp(0)
app.MainLoop()




Gruesse,
A.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Montag 8. Januar 2007, 22:24

Hi Alexci!

Welche wxPython-Version setzt du ein? Kannst du auch die neueste wxPython-Version verwenden, oder bist du auf eine ältere Version begrenzt?

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:

Beitragvon gerold » Montag 8. Januar 2007, 22:30

Hi Alexci!

Wie oft ändert sich das Bild? Muss es ständig neu aufgebaut werden, oder ist es kein Problem, wenn man das Bild für ein paar Sekunden oder Minuten in ein ``Bitmap``-Objekt zwischenspeichert und dieses Bild dann in einem ``StaticBitmap`` anzeigt? Man könnte das Bild z.B. über einen Timer alle x Sekunden neu einlesen, in ein Bitmap-Objekt kopieren und dieses Bitmap-Objekt anzeigen.

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:

Beitragvon gerold » Montag 8. Januar 2007, 22:49

Hi Alexci!

Das ``ScrolledPanel`` gibt es erst ab wxPython 2.8.0. Deshalb müsstest du ScrolledWindow einsetzen, wenn du auf eine ältere Version begrenzt bist. Der Code muss dann natürlich dementsprechend geändert werden.

http://paste.pocoo.org/show/603/

mfg
Gerold
:-)
Zuletzt geändert von gerold am Montag 8. Januar 2007, 23:22, insgesamt 3-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Alexci
User
Beiträge: 44
Registriert: Dienstag 18. April 2006, 23:08
Kontaktdaten:

Beitragvon Alexci » Montag 8. Januar 2007, 23:04

Hallo Gerold,

Ich benutze wxPython 2.6 weil sonst die App1_r.py wegen Boa nicht funktioniert. Ich weiss nicht ob man die App1_r.py umschreiben kann so, dass alles auch auf wxPython 2.8 funktioniert.

Danke!


Grusse,
Aleksandar
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Montag 8. Januar 2007, 23:21

Alexci hat geschrieben:Ich benutze wxPython 2.6

Hi Aleksandar!

Kein Problem! So funktioniert es mit dem ScrolledWindow statt dem ScrolledPanel.

http://paste.pocoo.org/show/602/

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

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Alexci
User
Beiträge: 44
Registriert: Dienstag 18. April 2006, 23:08
Kontaktdaten:

Beitragvon Alexci » Freitag 12. Januar 2007, 17:06

Danke! Funktioniert toll!


Gruesse,
Aleksandar

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]