python wxpython常用控件实例

具体使用见页面:http://www.yiibai.com/wxpython/wxpython_drawing_api.html

组件容器(Containers)-用于容纳其他组件

例如:wx.Panel
动态组件(Dynamic Widgets)-可以被用户编辑
例如:wx.Button,wx.TextCtrl,wx.ListBox
静态组件(Static Widgets)-显示信息用,不能被用户编辑
例如:wx.StaticBitmap,wx.StaticText,wx.StaticLine

其他组件:


在窗体中显示hello world

import wx
class Frame1(wx.Frame):
   def __init__(self,parent,title):
        wx.Frame.__init__(self, parent, title = title, pos = (100,200), size = (200,100))
        #容纳其他组件的容器
        panel = wx.Panel(self)
        text1 = wx.TextCtrl(panel, value = "Hello, World!", size = (200,100))
        self.Show(True)
if __name__ == '__main__':
    #创建一个应用程序对象,用于消息循环
    app = wx.App()
    #创建一个窗体
    frame = Frame1(None, "Example")
    app.MainLoop()


在窗体中抬起左键可以创建Hello World

import wx
class Frame1(wx.Frame):
    def __init__(self,parent):
        wx.Frame.__init__(self, parent=parent, title='Example', pos=(100, 200), size=(200, 100))
        self.panel = wx.Panel(self)
        #鼠标左键抬起时触发时间绑定带OnClick函数
        self.panel.Bind(wx.EVT_LEFT_UP, self.OnClick)

    def OnClick(self,event):
        posm=event.GetPosition()
        wx.StaticText(parent=self.panel,label='Hello World',pos=(posm.x,posm.y))
if __name__ == '__main__':
    app = wx.App()
    frame = Frame1(None)
    frame.Show()
    app.MainLoop()

python wxpython常用控件实例_第1张图片


使用sizer来布局组件

sizer本身是不是一个容器或一个窗体部件,只是一个屏幕布局算法
sizer允许嵌套

使用sizer的步骤:
(1)创建自动调用尺寸的容器,例如panel
(2)创建sizer
(3)创建子窗体(窗体部件)
(4)使用sizer的Add()方法将每个子窗体添加给sizer
(5)调用容器的SetSizer方法


点击button输出一行hello world

import wx
class Frame1(wx.Frame):
    def __init__(self,parent):
        wx.Frame.__init__(self, parent=parent, title='Example')
        self.panel = wx.Panel(self)
        sizer=wx.BoxSizer(wx.VERTICAL)
        #采用多行显示
        self.text1=wx.TextCtrl(self.panel,value='Hello World\n',style=wx.TE_MULTILINE)
        #1为响应容器改变大小,expand占据窗口的整个宽度
        sizer.Add(self.text1,1,wx.ALIGN_TOP|wx.EXPAND)
        self.button=wx.Button(self.panel,label='click')
        self.Bind(wx.EVT_BUTTON,self.OnClick,self.button)
        sizer.Add(self.button)
        self.panel.SetSizerAndFit(sizer)
        self.panel.Layout()
    #响应button事件
    def OnClick(self,event):
        self.text1.AppendText('Hello World\n')
        
if __name__ == '__main__':
    app = wx.App()
    frame = Frame1(None)
    frame.Show()
    app.MainLoop()

python wxpython常用控件实例_第2张图片


输出单选按钮的内容到文本框

import wx
class Frame1(wx.Frame):
    def __init__(self,parent):
        wx.Frame.__init__(self, parent=parent, title='Example',size=(300,300))
        self.panel = wx.Panel(self)
        lblList = ['Value X', 'Value Y', 'Value Z']
        self.rbox = wx.RadioBox(self.panel, label='RadioBox', pos=(0, 20), choices=lblList,
                                majorDimension=1, style=wx.RA_SPECIFY_ROWS)
        self.rbox.Bind(wx.EVT_RADIOBOX, self.onRadioBox)
        self.button=wx.Button(self.panel,label='button',pos=(0,100))
        self.Bind(wx.EVT_BUTTON,self.onclick)
        self.text1=wx.TextCtrl(self.panel,style=wx.TE_MULTILINE,pos=(0,150),size=(300,50))


    def onclick(self,event):
        self.text1.AppendText(self.rbox.GetStringSelection())

    def onRadioBox(self, e):
        print(self.rbox.GetSelection())
if __name__ == '__main__':
    app = wx.App()
    frame = Frame1(None)
    frame.Show()
    app.MainLoop()

python wxpython常用控件实例_第3张图片


综合使用(股票注释项目主框架):

import wx
import os
import re
class Frame1(wx.Frame):
    def __init__(self,parent):
        wx.Frame.__init__(self, parent=parent, title='注释股票代码',size=(380,250))
        self.panel = wx.Panel(self)
        self.text1 = wx.TextCtrl(self.panel, pos=(30, 20), size=(200, 25))
        self.btnO = wx.Button(self.panel, label="选择文件路径", pos=(255, 20), size=(90, 25))
        # 一组单选
        lblList = ['注释单一文件', '注释文件夹下所有文件']
        self.rbox = wx.RadioBox(self.panel, label='运行方式', pos=(30, 60) ,choices=lblList,
                                majorDimension=1, style=wx.RA_SPECIFY_ROWS)
        self.btnS = wx.Button(self.panel, label="运行", pos=(130, 150), size=(70, 25))

        # 绑定事件
        self.btnS.Bind(wx.EVT_BUTTON,self.OnClick)
        self.btnO.Bind(wx.EVT_BUTTON,self.OnOpenFile)

        # 设置窗口标题的图标
        self.icon = wx.Icon('123.ico', wx.BITMAP_TYPE_ICO)
        self.SetIcon(self.icon)

    def OnOpenFile(self,event):
        #根据单选的索引执行
        if self.rbox.GetSelection() == 1:
            #选择文件夹对话框
            self.dlgd=wx.DirDialog(self, u"选择文件夹", style=wx.DD_DEFAULT_STYLE)
            #如果确定了选择的文件夹,将文件夹路径写到text1控件
            if self.dlgd.ShowModal() == wx.ID_OK:
                self.text1.AppendText(self.dlgd.GetPath())
        else:
            # 选择文件对话框,设置选择的文件必须为txt格式
            self.dlg = wx.FileDialog(self, message=u"选择文件", style=wx.FD_OPEN | wx.FD_CHANGE_DIR,
                                     wildcard="Text Files (*.txt)|*.txt")
            # 如果确定了选择的文件,将文件路径写到text1控件
            if self.dlg.ShowModal() == wx.ID_OK:
                self.text1.AppendText(self.dlg.GetPath())

    def OnClick(self,event):
        # 判断text1的文本框内容是否为空
        if self.text1.GetValue() == "":
            wx.MessageBox("请先设定需要注释的文件或文件夹路径", "提示消息", wx.OK | wx.YES_DEFAULT)
            return
        if self.rbox.GetSelection() == 0:
            # 设置选择的文件必须为txt格式
            self.dlgx = wx.FileDialog(self, message=u"另存为", style=wx.FD_OPEN | wx.FD_CHANGE_DIR,
                                      wildcard="Text Files (*.txt)|*.txt")
            if self.dlgx.ShowModal() == wx.ID_OK:
                self.RunSingalFile()
        else:
            self.dlgdx = wx.DirDialog(self, u"另存为", style=wx.DD_DEFAULT_STYLE)
            if self.dlgdx.ShowModal() == wx.ID_OK:
                self.RunOneFolder()

    def RunSingalFile(self):
        self.msg1 = wx.MessageDialog(parent=None, message="运行成功!(是否打开输出文件)", caption="提示消息",
                                     style=wx.YES_NO | wx.ICON_INFORMATION)
        # 如果选择“是”,startfile用来打开一个文件或者文件夹(像日常双击一样的效果)
        if self.msg1.ShowModal() == wx.ID_YES:
            os.startfile(self.dlgx.GetPath())
    def RunOneFolder(self):
        self.msg2 = wx.MessageDialog(parent=None, message="运行成功!(是否打开输出文件夹)", caption="提示消息",
                                     style=wx.YES_NO | wx.ICON_INFORMATION)
        if self.msg2.ShowModal() == wx.ID_YES:
            os.startfile(self.dlgdx.GetPath())


if __name__ == '__main__':
    app = wx.App()
    frame = Frame1(None)
    frame.Show()
    app.MainLoop()

python wxpython常用控件实例_第4张图片


python wxpython常用控件实例_第5张图片








你可能感兴趣的:(Python,GUI与图像处理)