Seite 1 von 1

Bild im wx.scrolledwindow scrollen

Verfasst: Freitag 5. Januar 2007, 15:17
von Alexci
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

Verfasst: Montag 8. Januar 2007, 19:35
von Alexci
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.

Verfasst: Montag 8. Januar 2007, 22:24
von gerold
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
:-)

Verfasst: Montag 8. Januar 2007, 22:30
von gerold
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
:-)

Verfasst: Montag 8. Januar 2007, 22:49
von gerold
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
:-)

Verfasst: Montag 8. Januar 2007, 23:04
von Alexci
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

Verfasst: Montag 8. Januar 2007, 23:21
von gerold
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
:-)

Verfasst: Freitag 12. Januar 2007, 17:06
von Alexci
Danke! Funktioniert toll!


Gruesse,
Aleksandar