2017-11-06 3 views
0

verwendete ich den Code von der ursprünglichen Quelle - How to resize and draw an image using wxpython?WxPython entfernen Fensterrand

Die Frage ist, wie ohne Rand-Fenster anzuzeigen, mit param-wx.NO_BORDER oder wx.BORDER_NONE?

frame = wx.Frame(None, -1, 'Scaled Image', style= wx.BORDER_NONE) 

Wenn ich es benutze das Bild zeigt Schnitt in der linken oberen Ecke, irgendwelche Vorschläge?

So:

result

def scale_bitmap(bitmap, width, height): 
    image = wx.ImageFromBitmap(bitmap) 
    image = image.Scale(width, height, wx.IMAGE_QUALITY_HIGH) 
    result = wx.BitmapFromImage(image) 
    return result 

class Panel(wx.Panel): 
    def __init__(self, parent, path): 
     super(Panel, self).__init__(parent, -1) 
     bitmap = wx.Bitmap(path) 
     bitmap = scale_bitmap(bitmap, 100, 100) 
     control = wx.StaticBitmap(self, -1, bitmap) 
     # control.SetPosition((10, 10)) 

if __name__ == '__main__': 
    app = wx.PySimpleApp() 
    frame = wx.Frame(None, -1, 'Scaled Image', style= wx.BORDER_NONE) 
    panel = Panel(frame, 'onewayr.jpg') 
    frame.SetPosition((100, 100)) 
    frame.Show() 
    app.MainLoop() 
+0

Welche Widgets setzen Sie auf den Rahmen? Was Sie im Bild anzeigen, ist üblich, wenn es ein oder mehrere untergeordnete Widgets gibt und nichts unternommen wird, um deren Größe oder Position zu verwalten. Das Hinzufügen einer minimalen, aber ausführbaren Anwendung zu Ihrer Frage wird sehr hilfreich sein. – RobinDunn

+0

Bitte, sehen Sie sich den aktualisierten Code an! Wenn du löschst (style = wx.BORDER_NONE) wird es korrekt angezeigt! – TheRutubeify

Antwort

0

Sie das Bild an der angegebenen Größe erhalten werden:

control = wx.StaticBitmap(parent, -1, bitmap) 

Dies ist jedoch nicht der übliche Weg, Panels zu definieren und Rahmen. Am häufigsten hat der Frame Sizer und der Panel befindet sich in einem Schlitz des Sizer. Der Sizer erledigt die Aufgabe, den Inhalt des Panels zu positionieren und zu erweitern.

Zum Beispiel (mit wxPython Phoenix-Version):

import wx 

def scale_bitmap(impath, width, height): 
    image = wx.Image(impath, wx.BITMAP_TYPE_JPEG) 
    image = image.Scale(width, height, wx.IMAGE_QUALITY_HIGH) 
    result = wx.Bitmap(image) 
    return result 

class Panel(wx.Panel): 
    def __init__(self, parent, impath=None): 
     super(Panel, self).__init__(parent, -1) 
     bitmap = scale_bitmap(impath, 100, 100) 
     self.control = wx.StaticBitmap(self, -1, bitmap) 


class MyFrame(wx.Frame): 
    def __init__(self, parent, imgpath=None): 
     wx.Frame.__init__(self, parent, -1, style=wx.BORDER_NONE) 
     self.panel = Panel(self, imgpath) 
     self.panel.SetBackgroundColour('red') 

     self.SetSize(150,150) 
     self.SetPosition((100,100)) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(self.panel, 1, wx.EXPAND) 
     self.SetSizer(sizer) 
     self.Layout() 


if __name__ == '__main__': 
    app = wx.App() 
    frame = MyFrame(None, imgpath=r'C:/Users/joaquin/Desktop/llave.jpg') 
    frame.Show() 
    app.MainLoop() 

Hier habe ich eine rote Farbe auf dem Panel zu zeigen, dass es den ganzen Raum des 150x150-Feld füllt, während das Bild, das auf 100x100 skaliert wurde , ist an einer Standardposition auf dem Panel (oben links) positioniert.

enter image description here