2016-02-23 3 views
0

Вот как мы можем отображать изображение в кадре wxPython.Вертикальное смещение при отображении изображения с помощью wxPython

enter image description here

import wx 

class Viewer(wx.App): 
    def __init__(self, redirect=False, filename=None): 
     wx.App.__init__(self, redirect, filename) 
     self.frame = wx.Frame(None, title='Viewer') 
     self.panel = wx.Panel(self.frame) 
     self.imageCtrl = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.BitmapFromImage(wx.EmptyImage(800,600))) 
     self.mainSizer = wx.BoxSizer(wx.VERTICAL) 
     self.mainSizer.Add(self.imageCtrl, 0, wx.ALL, 5) 
     self.onView('0.png') 
     self.panel.Layout()   
     self.frame.Show() 

    def onView(self, filename): 
     img = wx.Image(filename, wx.BITMAP_TYPE_ANY) 
     self.imageCtrl.SetBitmap(wx.BitmapFromImage(img)) 
     self.panel.Refresh() 
     self.mainSizer.Fit(self.frame) 

Viewer().MainLoop() 

Если тестовое изображение имеет большие размеры, например, 912 x 3616 (здесь используется 0.png), Я хотел бы установить вертикальное смещение, то есть , верхний угол кадра не должен быть (0,0) изображения, но (0,500) т.е. 500 пикселей вертикальное смещение.

Как установить вертикальное смещение изображения с помощью wxPython?

ответ

0

Если вы действительно хотите усечь изображение, самое простое - просто сделать это, т. Е. Создать новое изображение, используя wxImage::GetSubImage() с областью, начинающейся с (0, 500).

Как правило, вы должны использовать прокручиваемое окно, а затем вы можете прокручивать его на 500 по вертикали, но все же разрешить пользователю прокручивать назад до начала координат.

Также можно использовать окно прокрутки без полос прокрутки, но это кажется довольно бессмысленным.

+0

Я попытался обрезать его (это связано с клавишами клавиатуры, такими как DOWN, UP и т. Д.), Но затем на каждой перерисовке 'self.imageCtrl.SetBitmap (wx.BitmapFromImage (img))' есть мерцание. У вас есть идея, как избежать этого мерцания? – Basj

+0

Если вы хотите прокрутить его с помощью клавиш, используйте прокручиваемое окно. В любом случае, определенно не используйте 'wxStaticBitmap' с большими изображениями, особенно если вам нужно их изменить, а скорее нарисуйте сами. Как упоминалось в документации, 'wxStaticBitmap' предназначен для небольших значков в диалоговом окне, а не для отображения общего назначения. –

+0

Спасибо @VZ. У вас есть пример кода, чтобы показать, как я это делаю? – Basj

Смежные вопросы