具体使用见页面:http://www.yiibai.com/wxpython/wxpython_drawing_api.html
组件容器(Containers)-用于容纳其他组件
例如:wx.Panel其他组件:
在窗体中显示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()
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()
输出单选按钮的内容到文本框
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()
综合使用(股票注释项目主框架):
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()