zoukankan      html  css  js  c++  java
  • wxpython 学习之 --窗口分割

    #coding:utf-8
    import wx
    import os
    class MyApp(wx.App):
        def __init__(self):
            super(MyApp,self).__init__()
    
    class MyFrame(wx.Frame):
        def __init__(self,title='test',size=wx.DefaultSize):
            super(MyFrame,self).__init__(None,wx.ID_ANY,title=title,size=size,style=wx.DEFAULT_FRAME_STYLE^wx.MINIMIZE_BOX)
            self.Center()
            #self.SetSize(700,700)
            #self.SetTitle('aaa')
            self.InitMenuBar()
            self.InitStatusBar()
            self.splitwindow()
            #self.Bind(wx.EVT_ERASE_BACKGROUND,self.EraseBack)
    
        def EraseBack(self,event):
            self.ParentWindow.SetSashPosition(0)
    
        def splitwindow(self):
            self.ParentWindow=wx.SplitterWindow(self) #创建分割窗口
            self.lpanel=wx.Panel(self.ParentWindow) #创建左面板
            self.rpanel=wx.Panel(self.ParentWindow) #创建右面板
            self.lpanel.SetBackgroundColour('#949449')
            self.rpanel.SetBackgroundColour(colour='RED')
            self.ParentWindow.SplitVertically(self.lpanel,self.rpanel,100)
            self.ParentWindow.SetMinimumPaneSize(50) #设定最小的窗口不能小于50
    
    
        def InitMenuBar(self):
            #创建一个menubar
            menuBar = wx.MenuBar()
    
            #创建两个menu
            filemenu = wx.Menu()
            aboutmenu = wx.Menu()
    
            #filemenu添加一个menuopen,关联的ID为wx.ID_OPEN,名字为Open,如果有状态栏,则状态栏里显示‘打开文件’
            menuopen = filemenu.Append(wx.ID_OPEN,'Open','打开文件')
            #filemenu添加一个menu分隔符
            filemenu.AppendSeparator()
            menusave = filemenu.Append(wx.ID_SAVE,'Save','保存当前设置')
            filemenu.AppendSeparator()
            menuexit = filemenu.Append(wx.ID_EXIT,'Exit','退出程序')
            menuBar.Append(filemenu,'File')
    
            menuabout = aboutmenu.Append(wx.ID_ABOUT,'Info','Information')
            menuBar.Append(aboutmenu,'Info')
    
            #将menu与函数绑定
            self.Bind(wx.EVT_MENU,self.Exit,menuexit)
            self.Bind(wx.EVT_MENU,self.Info,menuabout)
            self.Bind(wx.EVT_MENU,self.Open,menuopen)
            self.Bind(wx.EVT_MENU,self.Save,menusave)
    
            self.SetMenuBar(menuBar)
    
        def Exit(self,event):
                print 'aaaa'
                self.Close()
    
        def Open(self,event):
            self.dirname=''
            self.filename=''
            dlg = wx.FileDialog(self,'选择文件',self.dirname,'','*.csv*',wx.FD_OPEN)
            if dlg.ShowModal() == wx.ID_OK:
                self.filename = dlg.GetFilename()
                self.dirname = dlg.GetDirectory()
                self.FilePath = os.path.join(self.dirname,self.filename)
                return self.FilePath
    
        def Save(self):
            #可以将要保存的东西放入本地磁盘
            pass
    
        def Info(self,event):
            self.messageinfo='Author:testuser
    Date:2019/5/21
    Version:0.1'
            message = wx.MessageDialog(self,self.messageinfo,'INFO',wx.OK)
            message.ShowModal()
            message.Destroy()
    
        def InitStatusBar(self):
            #创建状态栏
            statusbar = self.CreateStatusBar()
            #将状态栏分割为3个部分
            statusbar.SetFieldsCount(3)
            #分割状态栏的比例为3:2:1,用负数表示
            statusbar.SetStatusWidths([-3,-2,-1])
            #每部分状态栏显示的值,当鼠标停在menu上时,0号状态栏会临时显示上面menu里的提示信息
            statusbar.SetStatusText('1111',0)
            statusbar.SetStatusText('2222',1)
            statusbar.SetStatusText('3333',2)
    
    
    if __name__ == '__main__':
        app = MyApp()
        frame = MyFrame(title='wx-test',size=(400,300))
        frame.Show()
        app.MainLoop()

     运行结果:

    在这里做了一些实验,总结如下:

    1.在self.ParentWindow.SplitVertically(self.lpanel,self.rpanel,100)中,100即SashPosition=100,是指左边的窗口大小。

    2.SashPosition=0:平均分割窗口;但是当设定为0的时候没有效果,要结合EVT_ERASE_BACKGROUND来使用

    self.Bind(wx.EVT_ERASE_BACKGROUND,self.EraseBack)
    def EraseBack(self,event):
    self.ParentWindow.SetSashPosition(0)

    3.当使用了self.Bind(wx.EVT_ERASE_BACKGROUND,self.EraseBack)后,self.ParentWindow.SplitVertically(self.lpanel,self.rpanel,100)中100便无效了,会采用EraseBack里设定的值。

  • 相关阅读:
    VS2010版快捷键
    Win7旗舰版中的IIS配置asp.net的运行环境
    实现软件自动在线升级的原理
    view_countInfo
    C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
    error: 40
    SQL Server 2008 阻止保存要求重新创建表的更改问题的设置方法
    继承实现圆柱体面积体积的计算
    圆柱模板价格计算器V1.0版本
    python3.7内置函数整理笔记
  • 原文地址:https://www.cnblogs.com/xia-dong/p/11612371.html
Copyright © 2011-2022 走看看