>

wxpython 2.8.11.0, python 2.7

내가 pyzwyz를 넣으면   Sizer 에 직접 일부 컨트롤  ~처럼

Frame

import wx app=wx.App() frm = wx.Frame(None, title='title') sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(wx.SpinCtrl(frm)) sizer.Add(wx.SpinCtrl(frm)) frm.SetSizerAndFit(sizer) frm.Show() app.MainLoop()   Frame 를 포함하기 위해 자동으로 올바른 최소 크기를 갖습니다.  더 작게 만들 수 없습니다. Sizer 가 있다면  사이에 (컨트롤 사이를 탭하는 데 필요에 따라) 작동하지 않으면 창을 너무 작게 만들 수 있습니다.

Panel

추가적으로 import wx app=wx.App() frm = wx.Frame(None, title='title') pan = wx.Panel(frm) sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(wx.SpinCtrl(pan)) sizer.Add(wx.SpinCtrl(pan)) pan.SetSizerAndFit(sizer) frm.Show() app.MainLoop()  그리고 frm.Fit()  같은 행동을 취해야합니다. 전체 코드 :

frm.SetMinSize(frm.GetEffectiveMinSize())

import wx app=wx.App() frm = wx.Frame(None, title='title') pan = wx.Panel(frm) sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(wx.SpinCtrl(pan)) sizer.Add(wx.SpinCtrl(pan)) pan.SetSizerAndFit(sizer) frm.Fit() frm.SetMinSize(frm.GetEffectiveMinSize()) frm.Show() app.MainLoop() 괜찮습니다 , 그러나 나는 frm.Fit() 를 싫어한다 . 더 나은 해결책이 없어서 frm.SetMinSize(frm.GetEffectiveMinSize())   Frame 의 최소 크기를 자동으로 고려   Panel 와 마찬가지로  전에? 나는 Sizer 경우 어떻게되는지 고려  다른 컨트롤을 사이 저에 추가 한 후 변경됩니다.

수정 : 분명히

EffectiveMinSize

로 대체되어야합니다

panel.SetSizerAndFit(sizer)
frm.Fit()
frm.SetMinSize(frm.GetEffectiveMinSize())

다소 깨끗해 보인다. 총체적으로 이것은 다음과 같습니다

panel.SetSizer(sizer)
sizer.SetSizeHints(frm)

이것이 선호되는 방법입니까?

import wx app=wx.App() frm = wx.Frame(None, title='title') pan = wx.Panel(frm) sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(wx.SpinCtrl(pan)) sizer.Add(wx.SpinCtrl(pan)) pan.SetSizer(sizer) sizer.SetSizeHints(frm) frm.Show() app.MainLoop() 를 사용한 첫 번째 접근 방식에서도 나중에 위젯이 추가되는 경우   Sizer 에 직접  개입 없이는 제대로 작동하지 않으므로 완전히 다른 질문이라고 생각합니다.

Frame
  • 답변 # 1

    가장 우아한 방법 (IMHO)은 피네 아스의 답변으로 제공됩니다. 불필요한 크기 조정기를 추가하는 것은 약간 비효율적이지만 실제로 눈에 띄지는 않을 것이라고 생각합니다.

    어떤 사람들은 SetSizeHints() 에 전화를합니다  마지막 예제와 같이 수동으로 작동하며 더 잘 작동 할 수 있습니다 (추가 크기 조정기를 사용할 때마다 제거하지 않아야하는 이유를 설명하는 의견을 남길 필요가 있음).

    안타깝게도 더 좋은 방법은 없으며 모든 패널, 사이 저 및 프레임으로 무언가를해야하기 때문에 하나를 추가 할 수 있는지 확실하지 않습니다. 단일로 할 수 없다는 것을 의미합니다 관련없는 매개 변수를 전달하지 않고 메소드 호출. 즉 우리는 다음과 같은 것을 가질 수 있습니다

    panel.SetSizerAndFitParent(sizer, frame);
    
    

    그러나 이것이 더 좋은지 확실하지 않습니다.

  • 답변 # 2

    프레임 내용 (예 : 패널)을 관리하는 크기 조정기를 도입하는 것은 어떻습니까? 최소 예제를 포함하지 않았으므로 아직 테스트하지 않았습니다.

    frameSizer = wx.BoxSizer(wx.VERTICAL)
    frameSizer.Add(panel)
    frm.SetSizerAndFit(frameSizer)
    
    

  • 이전 asynchronous - C # 5 비동기를 작성하는 방법?
  • 다음 android - 슬라이딩 드로어 애니메이션 속도