Ich muss ein OR-Gate erstellen, indem Sie 4 Bilder (3 Zeilen und Gate-Symbol) verwenden. Dies erfordert eine Überlappung von Bildern, die in Zellen in wxGridBagSizer platziert sind. Wie kann ich das erreichen?Wie wxStaticBitmap-Bilder in wxGridBagSizer mit WxFormBuilder in WxPython überlappen
Ich versuche negative VGAP und HGAP einzustellen wxFormBuilder unter Verwendung der Bilder überlappen, aber wxFormBuilder wird negative Werte nicht akzeptieren.
Dann habe ich versucht, roh, Code zu schreiben, das gleiche zu erreichen:
self.widgetSizer = wx.GridBagSizer(hgap=-6,vgap=-20)
self.orGateImage = wx.StaticBitmap(self, -1, self.orGateImageBitmap, style=wx.BITMAP_TYPE_PNG)
self.LineImageOffA = wx.StaticBitmap(self, -1, self.LineImageOffBitmap, style=wx.BITMAP_TYPE_PNG)
self.LineImageOffB = wx.StaticBitmap(self, -1, self.LineImageOffBitmap, style=wx.BITMAP_TYPE_PNG)
self.LineImageOffX = wx.StaticBitmap(self, -1, self.LineImageOffBitmap, style=wx.BITMAP_TYPE_PNG)
self.LetterAImage = wx.StaticBitmap(self, -1, self.LetterAImageBitmap, style=wx.BITMAP_TYPE_PNG)
self.LetterBImage = wx.StaticBitmap(self, -1, self.LetterBImageBitmap, style=wx.BITMAP_TYPE_PNG)
self.LetterXImage = wx.StaticBitmap(self, -1, self.LetterXImageBitmap, style=wx.BITMAP_TYPE_PNG)
self.widgetSizer.Add(self.LineImageOffA, pos=(0,1), border=10)
self.widgetSizer.Add(self.LineImageOffB, pos=(2,1), border=2)
self.widgetSizer.Add(self.LineImageOffX, pos=(1,3), flag=wx.ALIGN_CENTER,border=2)
self.widgetSizer.Add(self.orGateImage, pos=(1,2), border=10)
self.widgetSizer.Add(self.LetterAImage, pos=(0,0), border=10)
self.widgetSizer.Add(self.LetterBImage, pos=(2,0), border=10)
self.widgetSizer.Add(self.LetterXImage, pos=(1,4), flag=wx.ALIGN_CENTER, border=10)
self.frame.fSizer.Layout()
Und es funktionierte. Ich konnte die folgende Ausgabe:
Bitte helfen Sie mir, dies mit wxFormBuilder zu erreichen, wie ich solche Elemente schnell in meinem Projekt erstellen müssen. Gibt es eine andere Alternative, um dies zu erreichen?
Der Code von wxFormBuilder erzeugt wird, wie folgt:
MyFrame1::MyFrame1(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxFrame(parent, id, title, pos, size, style)
{
this->SetSizeHints(wxDefaultSize, wxDefaultSize);
wxBoxSizer* bSizer1;
bSizer1 = new wxBoxSizer(wxVERTICAL);
wxGridBagSizer* gbSizer1;
gbSizer1 = new wxGridBagSizer(0, 0);
gbSizer1->SetFlexibleDirection(wxBOTH);
gbSizer1->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
m_bitmap1 = new wxStaticBitmap(this, wxID_ANY, wxBitmap(wxT("../../home/ece/Desktop/scripts/fromPI/GREEN_LINE_OFF_SMALL.png"), wxBITMAP_TYPE_ANY), wxDefaultPosition, wxSize(85,5), 0);
gbSizer1->Add(m_bitmap1, wxGBPosition(0, 0), wxGBSpan(1, 1), wxALL, 5);
m_bitmap2 = new wxStaticBitmap(this, wxID_ANY, wxBitmap(wxT("../../home/ece/Desktop/scripts/fromPI/GREEN_LINE_OFF_SMALL.png"), wxBITMAP_TYPE_ANY), wxDefaultPosition, wxSize(85,5), 0);
gbSizer1->Add(m_bitmap2, wxGBPosition(2, 0), wxGBSpan(1, 1), wxALL, 5);
m_bitmap3 = new wxStaticBitmap(this, wxID_ANY, wxBitmap(wxT("../../home/ece/Desktop/scripts/fromPI/OR_GATE_SMALL.png"), wxBITMAP_TYPE_ANY), wxDefaultPosition, wxDefaultSize, 0);
gbSizer1->Add(m_bitmap3, wxGBPosition(1, 2), wxGBSpan(1, 1), wxALL, 5);
m_bitmap4 = new wxStaticBitmap(this, wxID_ANY, wxBitmap(wxT("../../home/ece/Desktop/scripts/fromPI/GREEN_LINE_OFF_SMALL.png"), wxBITMAP_TYPE_ANY), wxDefaultPosition, wxSize(85,5), 0);
gbSizer1->Add(m_bitmap4, wxGBPosition(1, 3), wxGBSpan(1, 1), wxALIGN_CENTER|wxALL, 5);
bSizer1->Add(gbSizer1, 1, wxEXPAND, 5);
this->SetSizer(bSizer1);
this->Layout();
}
MyFrame1::~MyFrame1()
{
}
Welcher Code wurde von wxFB generiert? Kannst du vergleichen? – Igor
auch aus Neugier, warum möchten Sie GridBagSizer verwenden? Ist BoxSizer nicht genug? – Igor
@Igor: Ich habe den von wxFB generierten Code bearbeitet und hinzugefügt. Und mit GridBagSizer kann ich die Elemente in Zeilen und Spalten setzen und jede Zelle anpassen. – SMD