Невозможно установить (некоторые типы) границы для wx.Panel на Raspbian - PullRequest
0 голосов
/ 24 марта 2019

У меня проблема с установкой границы для некоторых текстовых меток на моем Raspberry Pi. Работает нормально в Windows, но не работает на raspbian. Не все границы терпят неудачу. У меня нет проблем с wx.BORDER_RAISED или wx.BORDER_SUNKEN, но с остальными.

Это проблема с платформой или есть какие-то хитрости / настройки, которые мне не хватает (т.е. укажите некоторую толщину границы или что-то в этом роде).

Вот мой пример кода

import wx

class Example(wx.Frame):
    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title=title, size=(900, 750))
        self.SetBackgroundColour('Black')
        self.SetForegroundColour("White")

        PanelMain = wx.Panel(self, -1)
        PanelMain.SetForegroundColour("White")
        PanelMain.SetBackgroundColour("Black")
        SizerMain = wx.BoxSizer(wx.HORIZONTAL)

        for i in range(3):
            PanelSub = wx.Panel(PanelMain, -1, style=wx.BORDER_STATIC)
            PanelSub.SetBackgroundColour("Black")
            lblNew = wx.StaticText(PanelSub, -1, label="Hello {}".format(i))
            lblNew.SetForegroundColour("White")
            lblNew.SetBackgroundColour("Green" if i == 0 else "Blue")
            SizerMain.Add(PanelSub, 1, wx.EXPAND)

        PanelMain.SetSizer(SizerMain)
        SizerMain.Fit(PanelMain)

        self.Show()


app = wx.App()
Example(None, title='Boxes')
app.MainLoop()

1 Ответ

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

Я не нашел решения для этого, поэтому я так и сделал.

Сначала я создал собственный класс wx.Panel, подобный этому

class MyCustomPanel(wx.Panel):
    def __init__(self, Parent):
        wx.Panel.__init__(self, Parent, -1)
        self.Bind(wx.EVT_PAINT, self.OnPaint)
        self.Bind(wx.EVT_SIZE, self.OnSize)

    def OnSize(self, event):
        self.Refresh()
        event.Skip()

    def OnPaint(self, event):
        dc = wx.PaintDC(self)
        dc.SetPen(wx.Pen("Gray", width=1))
        dc.SetBrush(wx.Brush("black", wx.TRANSPARENT)) 
        mySize = self.GetSize()
        dc.DrawRectangle(0,0, mySize.GetWidth(), mySize.GetHeight())

Этот класс можетиспользоваться как обычная панель, но имеет вокруг себя рамку.Это основная программа:

import wx
import wx.lib.stattext as ST

class Example(wx.Frame):
    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title=title, size=(900, 750))
        self.SetBackgroundColour('Black')
        self.SetForegroundColour("White")

        PanelMain = wx.Panel(self, -1)
        PanelMain.SetForegroundColour("White")
        PanelMain.SetBackgroundColour("Black")
        SizerMain = wx.BoxSizer(wx.HORIZONTAL)

        for i in range(3):
            PanelSub = MyCustomPanel(PanelMain)
            PanelSub.SetBackgroundColour("Black")
            lblNew = ST.GenStaticText(PanelSub, -1, label="Hello {}".format(i))
            lblNew.SetForegroundColour("White")
            lblNew.SetBackgroundColour("Green" if i == 0 else "Blue")
            SizerMain.Add(PanelSub, 1, wx.EXPAND|wx.ALL, 5)

        PanelMain.SetSizer(SizerMain)
        SizerMain.Fit(PanelMain)

        self.Show()


app = wx.App()
Example(None, title='Boxes')
app.MainLoop()

Примечание: Заменено wx.StaticText на ST.GenStaticText , так как это работает лучшена GTK

Примечание 2: К сожалению, в этом простом примере граница перекрывается текстовым полем (см. этот рисунок ниже).Это не так в моем реальном коде, так как я использую там внутренний классификатор.В простом примере этого можно избежать, добавив внутренний классификатор, содержащий текстовые метки.

Textbox overlaps the border of the panel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...