wxPython SetMinSize问题

问题描述

| 在wxPython中设置SetMinSize时遇到问题。有人可以帮我让这个窗口变得比启动时更小吗?和/或使窗口不允许调整大小? 我在MainPanel类中的
self.SetSizerAndFit(SizerH)
之后尝试了
self.SetMinSize(GetSize())
。不工作。 我已经寻找并搜寻了,但没有帮助。 我对编程还是陌生的,有人可以评论程序的构建方式吗?它可以理解并且很好吗?还是应该采取措施? 感谢任何帮助。 =] 这是代码
import wx


ID_EXIT = 110

class MainPanel(wx.Panel):
    def __init__(self,parent,id):
        wx.Panel.__init__(self,id)
        self.parent = parent

        #------------- Setting up the buttons
        Run = wx.Button(self,label=\"Run\")
        Run.Bind(wx.EVT_BUTTON,self.Run )

        #------------- Setting up Static text
        ChooseRoot = wx.StaticText(self,label =\"Root catalog: \")
        ScratchWrk = wx.StaticText(self,label =\"Sratch workspace: \")
        MergeFile = wx.StaticText(self,label =\"Merge file: \")

        #------------ Setting up inputtext
        ChooseRoottxt = wx.TextCtrl(self,-1,size=(210,-1))

        #------------- Setting up the outputBox
        Output = wx.TextCtrl(self,style=wx.TE_MULTILINE|wx.TE_READONLY)

        #------------- Setting up the sizer
        SizerV1 = wx.BoxSizer(wx.VERTICAL)
        SizerV1.Add(ChooseRoot,wx.ALIGN_RIGHT|wx.ALL,5)
        SizerV1.Add(ScratchWrk,5)
        SizerV1.Add(MergeFile,5)

        SizerV3 = wx.BoxSizer(wx.VERTICAL)
        SizerV3.Add(ChooseRoottxt,5)

        SizerV2 = wx.BoxSizer(wx.VERTICAL)
        SizerV2.Add(Run,5)

        SizerH1 = wx.BoxSizer()
        SizerH1.Add(SizerV1,wx.ALIGN_RIGHT | wx.EXPAND | wx.ALL)
        SizerH1.Add(SizerV3,1,wx.ALIGN_RIGHT | wx.EXPAND | wx.ALL)
        SizerH1.Add(SizerV2,wx.ALIGN_RIGHT | wx.EXPAND | wx.ALL)

        SizerH2 = wx.BoxSizer()
        SizerH2.Add(Output,wx.EXPAND | wx.ALL,5)

        SizerH = wx.BoxSizer(wx.VERTICAL)
        SizerH.Add(SizerH1,wx.ALIGN_RIGHT | wx.EXPAND | wx.ALL)
        SizerH.Add(SizerH2,wx.ALIGN_RIGHT | wx.EXPAND | wx.ALL)


        self.SetSizerAndFit(SizerH)

    #--- START EVENT HANDLERS

    def Run(self,event=None):
        pass

class MainWindow(wx.Frame):
    def __init__(self,id,title):
        wx.Frame.__init__(self,wx.ID_ANY,title,size = (415,330),style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE | wx.STAY_ON_TOP)

        self.CreateStatusBar() # Creates statusbar
        #------------- Setting up the menu
        filemenu = wx.Menu()
        filemenu.Append(ID_EXIT,\"E&xit\",\"Exit the program\")
        #------------- Creating the menu
        menubar = wx.MenuBar()
        menubar.Append(filemenu,\"&File\")
        self.SetMenuBar(menubar)
        #---------- Setting menu event handlers
        wx.EVT_MENU(self,ID_EXIT,self.OnExit)                    
        #--- Add MainPanel
        self.Panel = MainPanel(self,-1)

        #Centre on Screen
        self.CentreOnScreen()

        ###---- SHOW THE WINDOW
        self.Show(True)

    def OnExit(self,event):
        self.Close(True) # Close the Frame
    #--- END EVENT HANDLERS ---------------------------------

if __name__==\'__main__\':
    try:
        app = wx.PySimpleApp()
        frame = MainWindow(None,\"Indexinator3000\")
        app.MainLoop()
    finally:
        del app
    

解决方法

        固定:
###---- SHOW THE WINDOW
self.Show(True)
self.SetMinSize(self.GetSize())
普通的留言: 代码还不错。只是一些评论: 对小部件使用对象属性,因此不要松动它们(
self.ChooseRoot =...
) 使用更多描述性的小部件名称(
self.labelChooseRoot
) 丢弃ID,不需要时为默认值-1 删除多余的注释,不提供任何新信息(
self.CreateStatusBar() # Creates statusbar
) 您可以从呼叫
self.Show(True)
self.Close(True)
中删除True值,因为True是默认值 我建议对派生的窗口小部件类使用这种构造函数,但这是基于我的个人喜好: 。
def __init__(self,*args,**kwargs):
    wx.Frame.__init__(self,**kwargs)