wx python: установить цвет приложения (свойства по умолчанию) - PullRequest
1 голос
/ 24 февраля 2020

Я хочу изменить цвет для всего моего приложения pythonwx. Я обнаружил, что используемые в настоящее время цвета записаны в wx.Frame.DefaultAttributes.colBg соответственно .colFg. Я проверил краской, что это действительно используемые цвета. Теперь есть метод wx.Frame.GetDefaultAttributes (), но не метод wx.Frame.SetDefaultAttributes (). Но мне все еще нужно изменить цвет, и я не думаю, что установка каждого элемента управления вручную является желаемым решением. Я попытался:

frame.DefaultProperties = customProperties

и

frame.DefaultProperties.colBg = customColor

, но оба выдают AttributeError ("не могу установить атрибут"). Любая помощь приветствуется.

1 Ответ

0 голосов
/ 24 февраля 2020

Свойства по умолчанию, вероятно, определены в рамках любой темы, установленной для рабочего стола. Я не верю, что есть способ переопределить их изнутри wx python.

Самый простой способ установить цветовую схему по умолчанию - установить цвета для каждого дочернего объекта в объекте, например на панели.

В следующем коде продолжайте нажимать кнопку Encrypt, чтобы увидеть результаты.

import wx
from random import randrange

class CipherTexter(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title,  size=(1000, 600))
        self.panel = wx.Panel(self)
        cipherText = wx.StaticText(self.panel, label="Cipher Texter ", pos=(20, 30))
        encryptorText = wx.StaticText(self.panel, label="Encryptor ", pos=(20, 70))
        decryptorText = wx.StaticText(self.panel, label="Decryptor ", pos=(20, 100))
        self.cipher = wx.TextCtrl(self.panel, -1, style=wx.TE_MULTILINE, size=(400,400), pos=(400, 30))
        self.encryptor = wx.TextCtrl(self.panel, -1, size=(100,30), pos=(200, 70))
        self.decryptor = wx.TextCtrl(self.panel, -1, size=(100,30), pos=(200, 100))
        self.encrypt = wx.Button(self.panel, -1, "Encrypt", pos=(20, 140))
        self.decrypt = wx.Button(self.panel, -1, "Decrypt", pos=(20, 180))
        self.panel.SetBackgroundColour('white')
        self.encrypt.Bind(wx.EVT_BUTTON, self.encryptNow)
        self.decrypt.Bind(wx.EVT_BUTTON, self.decryptNow)
        self.Show()

    def AColour(self):
        red = randrange(0,255)
        green = randrange(0,255)
        blue = randrange(0,255)
        x = wx.Colour(red,green,blue)
        return x

    def encryptNow(self, event):
        cfg_colour = self.AColour()
        txt_colour = self.AColour()
        children = self.panel.GetChildren()
        for child in children:
            child.SetBackgroundColour(cfg_colour)
            child.SetForegroundColour(txt_colour)
        print(cfg_colour)

    def decryptNow(self, event):
        pass

app = wx.App(False)
frame = CipherTexter(None, "The SS Cipher")
app.MainLoop()

enter image description here enter image description here

...