Заполнение текста внутри wx.StaticText - PullRequest
0 голосов
/ 17 апреля 2019

У меня в приложении wxpython phoenix есть элемент управления wx.StaticText. Я хочу, чтобы текст появлялся на определенном цвете фона и имел некоторый «воздух» или отступы вокруг текста. Выполнение SetBackgroudnColour(RED) действительно устанавливает правильный цвет фона. Но как дать текст внутри еще комнаты?

ОБНОВЛЕНИЕ: см. Изображение ниже, чтобы понять, что я имею в виду.

enter image description here

Полагаю, это можно сделать с помощью изменения размера текстового поля и привязок событий, чтобы при необходимости изменить размер текстового поля. Но мои попытки, подобные приведенным ниже, не дали должного результата (классификатор, в котором находится этот компонент, неправильно размещается). Любая помощь приветствуется.

    def _on_resize(self,event):
        try:
            size = self.text_box.GetSize()
            _y = 2 * size[1]
            self.text_box.SetSize(wx.Size(size[0], _y))

        except AttributeError:
            pass
        event.Skip()

1 Ответ

0 голосов
/ 19 апреля 2019

Вы продолжаете упоминать текстовое поле, но я предполагаю, что вы не имеете в виду wx.StaticBox, поскольку оно никогда специально не упоминается. Обратите внимание, что есть wx.StaticBoxSizer, если вы имеете в виду StaticBox.
Вы всегда можете просто выделить вертикальный размер окна и, возможно, поиграть с размером шрифта, чтобы настроить «воздух» вокруг текста.
Вот ужасный пример:

import sys
sys.path.insert(0,'/usr/lib/python3/dist-packages')
import wx

class MyFrame(wx.Frame):
    def __init__(self, title):
        wx.Frame.__init__(self, None, title=title)
        self.panel = wx.Panel(self, wx.ID_ANY)
        text1 = wx.StaticText(self, -1, 'Tight Text')
        text1.SetForegroundColour(wx.WHITE)
        text1.SetBackgroundColour(wx.RED)

        text2 = wx.StaticText(self, -1, "  Loose text in a box  ")
        text3 = wx.StaticText(self, -1, "  Tighter text in a box  ")
        text4 = wx.TextCtrl(self, -1, "Tighter text in a box", size=(130,30), style=wx.TE_READONLY|wx.TE_CENTRE)
        t21 = wx.StaticText(self, -1, "")
        t22 = wx.StaticText(self, -1, "")
        t31 = wx.StaticText(self, -1, "")
        t32 = wx.StaticText(self, -1, "")

        text2.SetBackgroundColour(wx.RED)
        text2.SetForegroundColour(wx.WHITE)
        text3.SetBackgroundColour(wx.RED)
        text3.SetForegroundColour(wx.WHITE)
        text4.SetForegroundColour(wx.WHITE)

        t21.SetBackgroundColour(wx.RED)
        t22.SetBackgroundColour(wx.RED)
        t31.SetBackgroundColour(wx.RED)
        t32.SetBackgroundColour(wx.RED)
        text4.SetBackgroundColour(wx.RED)

        sbox=wx.BoxSizer(wx.VERTICAL)
        sbox.Add(t21,0 ,wx.EXPAND,0)
        sbox.Add(text2, 0, wx.EXPAND, 0)
        sbox.Add(t22,0,wx.EXPAND,0)

        font = wx.SystemSettings.GetFont(wx.SYS_SYSTEM_FONT)
        font.SetPointSize(2)
        sbox1=wx.BoxSizer(wx.VERTICAL)
        t31.SetFont(font)
        t32.SetFont(font)
        sbox1.Add(t31,0 ,wx.EXPAND,0)
        sbox1.Add(text3, 0, wx.EXPAND, 0)
        sbox1.Add(t32,0,wx.EXPAND,0)

        self.Bind(wx.EVT_CLOSE, self.OnClose)
        sizer=wx.BoxSizer(wx.VERTICAL)
        sizer.Add(text1,0,wx.ALL,5)
        sizer.Add(sbox,0,wx.ALL,5)
        sizer.Add(sbox1,0,wx.ALL,5)
        sizer.Add(text4,0,wx.ALL,5)
        self.SetSizer(sizer)
        self.Show()

    def OnClose(self, event):
        self.Destroy()

app = wx.App()
top = MyFrame("My Window")
app.MainLoop()

Пожалуйста, не обращайте внимания на мое утверждение import, как в разделе «4.0.4 gtk2 (phoenix) wxWidgets 3.0.5» для Linux, установка цвета фона для статических текстов, похоже, не удалась полностью, и я использую другую версию wx

enter image description here

...