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\nDate:2019/5/21\nVersion: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里设定的值。

原文地址:https://www.cnblogs.com/xia-dong/p/11612371.html

时间: 2024-10-09 14:26:59

wxpython 学习之 --窗口分割的相关文章

[wxPython学习]wx.CallAfter和wx.FutureCall

[wxPython学习]wx.CallAfter和wx.FutureCall 今天才学到的两个wxPython中的函数:wx.CallAfter和wx.FutureCall.这是两个无关的函数,但又多少有些联系.记得在邮件列表中有人问过: wxPython中的Frame有没有OnShow之类的事件,因为他想在窗口显示之后执行一些操作.有人回答说使用PostEvent()方法. 这的确是一个方法,不过要自已创建事件(可以使用现成事件),然后把事件与处理窗口进行绑定.这种方法我没有试过.不过现在发现

利用图形窗口分割法将极坐标方程:r=cos(θ/3)+1/9用四种绘图方式画在不同的窗口中

利用图形窗口分割法将极坐标方程:r=cos(θ/3)+1/9用四种绘图方式画在不同的窗口中. 解:MATLAB指令: theta=0:0.1:6*pi;rho=cos(theta/3)+1/9; >> polar(theta,rho) >> >> plot(theta,rho) >> semilogx(theta,rho) >> grid >> hist(rho,15) 结果分别如下图: 图1 图2 图3 图4

MFC的窗口分割的设计与实现以及CSplitterWnd 类分析

1 引言 在Microsoft VC++ 6.0 中,基于MFC 的应用程序一般分为以下几种:多文档界面(MDI). 单文档界面(SDI)以及基于对话框的应用程序.其中单文档又可分为单视图的和多视图的, 一般情况下,单文档仅需要单视图就够了,如Windows 自带的记事本.画图程序等等,但 在一些情况下,单文档需要多视图支持,比如同时观察文档的不同部分,同时从不同的角度 观察同一文档等. 在MFC 的框架下,文档对象(CDocument)有一个保存其所有视图的列表,并提供了 增加视图(AddVi

MFC学习之窗口基础

WinMain函数 1.句柄(HANDLE):{ 1. 定义:资源的标识 2. 句柄的作用: 操作系统通过句柄来找到对应的资源,从而对这些资源进行管理和操作. 3句柄的分类:(按资源){ 1.图标句柄(HICON) , 2.光标句柄(HCURSOR) , 3. 窗口句柄(HWND) , 4.应用程序实列句柄(HINSTANCE). } } 2.Windows应用程序,操作系统,计算机硬件之间的相互关系 Windows程序的入口函数: 窗口应用程序入口: Int WINAPI WinMain( H

学习java窗口基本操作时无聊写的

学习java窗口基本操作时无聊写的 就当记录 代码如下: package day08; import java.awt.BorderLayout;import java.awt.Color;import java.awt.FlowLayout;import java.awt.Font;import java.awt.GridLayout; import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;

OpenCV学习(20) grabcut分割算法

http://www.cnblogs.com/mikewolf2002/p/3330390.html OpenCV学习(20) grabcut分割算法 在OpenCV中,实现了grabcut分割算法,该算法可以方便的分割出前景图像,操作简单,而且分割的效果很好.算法的原理参见papaer:“GrabCut” — Interactive Foreground Extraction using Iterated Graph Cuts 比如下面的一副图,我们只要选定一个四边形框,把框中的图像作为gra

窗口分割

我们在使用OutLook或者NetAnt等工具的时候,一般都会被其复杂的界面所吸引,在这些界面中窗口被分割为若干的区域,真正做到了窗口的任意分割. 那么我们自己如何创建类似的界面,也实现窗口的任意的分割呢?要解决这个问题,在Visual C++6.0编程中就需要使用到MFC提供的CSplitterWnd类.CSplitterWnd看上去像是一种特殊的框架窗口,每个窗口都被相同的或者不同的视图所填充.当窗口被切分后用户可以使用鼠标移动切分条来调整窗口的相对尺寸.虽然VC6.0支持从AppWizar

MFC窗口分割以及各窗口间的通讯

一个偶然的机会又重新接触了MFC窗口的分割,自己结合资料重新写了一个窗口分割的程序,现将具体流程跟大家分享一下: 1.我们先创建一个MFC单文档类的程序,具体分割方式先将单文档整个客户区分成两行一列,首先我们在MFC的CMainFrame类中定义一个CSplitterWnd类的对像m_wndSplitter,在主窗口类中我们可以通过对象m_wndSplitter,调用CSplitterWnd类的所有成员函数,为了将窗口分割成两行一列,我们在CMainFrame类中重载OnCreateClient

【VC编程技巧】窗体?3.9静态窗口分割 (固定分割线)

上一章节说明了如何静态的分割窗口,分割后窗口的分割线是可以拖动的,有的时候我们需要固定分割线,那么如何实现固定分割呢? 我们需要构造出固定分割窗口类(CFixedSplitterWnd),来实现我们对窗口的固定分割,以上一章例来说明. 1.新创建MFC类,从CSplitterWnd继承,并重载WM_LBUTTONDOWN ,WM_MOUSEMOVE 和 WM_SETCURSOR消息响应函数. 2.新构造的CFixedSplitterWnd使用方法和CSplitterWnd一样. 通过MFC类向导