【问题标题】:wxPython remove window borderwxPython 移除窗口边框
【发布时间】:2018-04-18 06:06:40
【问题描述】:

我使用了原始源代码 - How to resize and draw an image using wxpython?

问题是如何显示没有边框的窗口,参数是wx.NO_BORDER还是wx.BORDER_NONE?

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

当我使用它时,图像显示在左上角,有什么建议吗?

像这样:

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

【问题讨论】:

  • 你在框架上放了什么小部件?如果有一个或多个子小部件并且没有进行任何操作来管理它们的大小或位置,则您在图像中显示的内容很常见。为您的问题添加一个最小但可运行的应用程序将有很大帮助。
  • 请查看更新的代码!如果您删除 (style= wx.BORDER_NONE) 它会正确显示!

标签: python image wxpython border


【解决方案1】:

您将使用以下方法获得指定尺寸的图片:

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

然而,这不是定义面板和框架的规范方式。最常见的是,Frame 有 sizer,Panel 位于 sizer 的插槽中。 sizer 完成了定位和扩展面板内容的所有工作。

例如(使用 wxPython Phoenix 版本):

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

这里我给面板设置了红色,以表明它填充了 150x150 框架的所有空间,而缩放到 100x100 的图片位于面板上的默认位置(左上角)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多