wxPython GetBackgroundColour()函数在linux和windows平台上的工作方式不同

时间:2018-06-14 12:37:09

标签: windows image-processing wxpython ubuntu-16.04

我想在具有背景颜色的wx Python应用程序中创建一个图像。

[编辑]在Windows上,这非常有效:

enter image description here

[/编辑]

但在linux上,我的代码颜色较浅。我做错了什么?

[编辑:更多信息]

self.GetBackgroundColour()返回的颜色是(225,225,225);颜色较浅。实际背景颜色为(212,212,212)

[\ EDIT]

enter image description here

以下是使用不同主题拍摄的图像:

enter image description here

所以根据Rolf的回答,它看起来像是Mate的一个问题,而不是主题

import wx

class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Image')
        sizer = wx.BoxSizer()

        static_bitmap_A = wx.StaticBitmap(self, wx.ID_ANY)
        bitmap = wx.Bitmap('any.png')
        static_bitmap_A.SetBitmap(bitmap)
        sizer.Add(static_bitmap_A, flag=wx.ALL, border=10)

        image = wx.Image('any.png')
        colour = self.GetBackgroundColour()
        red, green, blue = colour[0], colour[1], colour[2]
        #red, green, blue = 0, 0, 0
        for row in range(image.GetSize()[0]):
            for column in range(image.GetSize()[1]):
                image.SetRGB(row, column, red, green, blue)
        bitmap = wx.Bitmap(image)
        static_bitmap_B = wx.StaticBitmap(self, wx.ID_ANY)
        static_bitmap_B.SetBitmap(bitmap)
        sizer.Add(static_bitmap_B, flag=wx.ALL, border=10)

        self.SetSizerAndFit(sizer)
        self.Show()

if __name__ == '__main__':
    screen_app = wx.App()
    main_frame = MainFrame()
    screen_app.MainLoop()

可以使用任何图像代替any.png

1 个答案:

答案 0 :(得分:0)

这只是为了备份我的原始评论。
我只能假定您的问题与您的主题或包装盒上的其他设置有关,尽管我当然保留非常错误的权利。
这段代码在Mint 19(Ubuntu 18.04)Python 3.6 Wx 4.0.3 gtk2

import wx

class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Image')
        sizer = wx.BoxSizer()

        sys_background = wx.SystemSettings.GetColour(wx.SYS_COLOUR_BACKGROUND)
        print("default colour ", sys_background)

        static_bitmap_A = wx.StaticBitmap(self, wx.ID_ANY)
        bitmap = wx.Bitmap('/home/rolf/any2.png')
        static_bitmap_A.SetBitmap(bitmap)
        sizer.Add(static_bitmap_A, flag=wx.ALL, border=10)

        image = wx.Image('/home/rolf/any2.png')
        #colour = self.GetBackgroundColour()
        colour = sys_background
        red, green, blue = colour[0], colour[1], colour[2]
        print(red, green, blue)
        for row in range(image.GetSize()[0]):# -1 ):
            for column in range(image.GetSize()[1]):
                image.SetRGB(row, column, red, green, blue)
        bitmap = wx.Bitmap(image)
        static_bitmap_B = wx.StaticBitmap(self, wx.ID_ANY,bitmap)
        sizer.Add(static_bitmap_B, flag=wx.ALL, border=10)

        self.SetSizerAndFit(sizer)
        self.Show()

if __name__ == '__main__':
    screen_app = wx.App()
    main_frame = MainFrame()
    screen_app.MainLoop()

输出(主题Mint-X):

default colour  (214, 214, 214, 255)
214 214 214

enter image description here

这在更改主题时仍然可以正常工作,只需为颜色值输出不同的数字即可。

主题Mint-Y

default colour  (240, 240, 240, 255)
240 240 240

enter image description here

无论使用colour = self.GetBackgroundColour()还是colour = sys_background