2013-11-04 5 views
0

WORKS ON (Linux Mint, Python 2.7.5, wxPython 2.8.12.1 (gtk2-unicode)), Windows 7은 지원되지 않습니다.wxPython - BUTTON을 누르거나 슬라이더를 움직일 수 없습니다.

wxPython을 사용하여 멋진 레이아웃으로 GUI를 만들었습니다. 그러나 단추와 슬라이더는 패널 중 하나에서 작동하지 않습니다. 제게 약간의 안내를 해주십시오. 그래서 선별기는 크기가 변경에있을 때 ...

import wx 

class MainWindow(wx.Frame): 

    def __init__(self, *args, **kwargs): 
     super(MainWindow, self).__init__(*args, **kwargs) 

     self.InitUI() 

    def InitUI(self): 
     self.SetSize((1300, 700)) 
     self.SetTitle('GUI made by James') 

     self.panel = wx.Panel(self) 
     self.panel.SetBackgroundColour('#4f5049') 
     mainPanel = wx.Panel(self.panel) 
     mainPanel.SetBackgroundColour('#ededed') 

     sub_vbox = wx.BoxSizer(wx.VERTICAL) 
     subPanel_top = wx.Panel(mainPanel) 

     hbox = wx.BoxSizer(wx.HORIZONTAL) 
     hierarchy_browser = wx.TextCtrl(subPanel_top, style = wx.TE_MULTILINE) 
     hbox.Add(hierarchy_browser, proportion = 1, flag = wx.TOP | wx.BOTTOM | wx.LEFT | wx.EXPAND, border = 10) 
     subPanel_right = wx.Panel(mainPanel) 
     wx.StaticText(subPanel_right, -1, "This is custom static text", (10, 10), (300, -1), wx.ALIGN_CENTER) 
     button = wx.Button(subPanel_right, label = "exit", pos = (500, 100), size = (60, 60)) #can't press for some reason 
     slider = wx.Slider(subPanel_right, -1, 50, 1, 100, pos = (320, 10), size = (250, -1), style = wx.SL_AUTOTICKS | wx.SL_LABELS) # can't slide for some reason 
     slider.SetTickFreq(5, 1) 

     hbox.Add(subPanel_right, proportion = 1, flag = wx.TOP | wx.BOTTOM | wx.LEFT | wx.EXPAND, border = 10) 
     subPanel_top.SetSizer(hbox) 

     sub_vbox.Add(subPanel_top, 1, wx.EXPAND) 

     subPanel_bottom = wx.Panel(mainPanel) 
     text_entry = wx.TextCtrl(subPanel_bottom, style = wx.TE_MULTILINE) 
     text_sizer = wx.BoxSizer() # use sizer to expand TextCtrl 
     text_sizer.Add(text_entry, 1, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 10) 
     subPanel_bottom.SetSizerAndFit(text_sizer) 
     sub_vbox.Add(subPanel_bottom, 1, wx.EXPAND) 
     mainPanel.SetSizer(sub_vbox) 

     vbox = wx.BoxSizer(wx.VERTICAL) 
     vbox.Add(mainPanel, 1, wx.EXPAND | wx.ALL, 10) 
     self.panel.SetSizer(vbox) 

     self.Bind(wx.EVT_BUTTON, self.closebutton, button) 
     self.Bind(wx.EVT_CLOSE, self.closewindow) 

     self.Centre() 
     self.Show(True) 

    def closebutton(self, event): 
     self.Close(True) 

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

def main(): 
    ex = wx.App() 
    MainWindow(None) 
    ex.MainLoop()  

if __name__ == '__main__': 
    main() 
+0

코드가 작동합니다. 버튼을 눌러 창을 닫을 수 있습니다. 슬라이더도 움직일 수 있습니다. (Linux Mint, Python 2.7.5, wxPython 2.8.12.1 (gtk2-unicode)) – furas

+0

무엇을!? Windows를 사용하고 있습니다. 어떻게 테스트 할 수 있는지 모르겠다. –

+0

Windows 8,7, Vista, XP 또는 2000? 파이썬 버전'python -V' (큰 글자 'V') 명령으로 얻을 수 있습니다. 스크립트'import wx;와 함께 얻을 수있는 wxPython 버전; wx.version()' – furas

답변

0

당신의 subPanel_right은 단순히 오히려 선별기를 사용하는 것보다 그것에 객체를 부착 이후에는 크기가 없습니다 (코드는 잘 실행하지만, 버튼을 누를 수 없으며 슬라이더를 이동할 수 없습니다) 그것의 크기는 아무도 없습니다 당신은

하나의 솔루션이

subPanel_right = wx.Panel(subPanel_top,-1,size=(560,300)) 

당신이 후 재미 somehting을해야하고 할 수있는 패널의 크기를 설정하는 것입니다 클릭 할 수 없습니다

subPanel_right.SetMinSize(560,300) 

은 (내가 그없이 나를 위해 일한 몰라,하지만 때로는 내가 그렇게해야)는 크기를 조정하는 크기와하지 강제로 일반적으로 당신이 크기 조절기 제어 레이아웃을 절대 레이아웃을 혼합해서는 안

.. 예를 들어 flexgridbagsizer가있는 패널 한 개는 아마도 충분할 것입니다 ... 또는 까다로운 박스 레이아웃이있는 한 패널

+0

아무 크기없이 작동합니다. –

+1

키가 mainPanel 대신 subPanel_top 패널을 사용하고 있습니다. –