4 개의 이미지 (3 개의 라인과 게이트 심볼)를 사용하여 OR 게이트를 만들어야합니다. 이렇게하려면 wxGridBagSizer에서 셀에 배치 된 이미지가 겹쳐 져야합니다. 어떻게하면 될까요?wxPython의 wxFormBuilder를 사용하여 wxGridBagSizer에서 wxStaticBitmap 이미지를 겹치는 방법
나는 이미지를 겹쳐 wxFormBuilder를 사용하여 부정적인 vgap에와 hgap에 설정하려고하지만 wxFormBuilder는 음의 값을 허용하지 않습니다.
그럼 나도 같은를 달성하기 위해 원시 코드를 작성하려고 :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()
그리고 그것은했다. 나는 다음과 같은 출력을 얻을 수 :
내가 내 프로젝트에 신속하게 요소를 만들 필요가 나를이 사용 wxFormBuilder를 달성하는 데 도움이 바랍니다. 이 작업을 수행하는 다른 방법이 있습니까? 다음과 같이 wxFormBuilder에 의해 생성
코드는 다음과 같습니다
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()
{
}
어떤 코드가 wxFB에 의해 생성 되었습니까? 당신은 비교할 수 있습니까? – Igor
또한 호기심 때문에 왜 GridBagSizer를 사용하고 싶습니까? BoxSizer가 충분하지 않습니까? – Igor
@Igor : wxFB에서 생성 된 코드를 편집하고 추가했습니다. GridBagSizer를 사용하면 행과 열의 요소를 설정하고 각 셀을 사용자 정의 할 수 있습니다. – SMD