【脚本语言系列】关于PythonGUI编程wxPython, 你需要知道的事
2017-05-08 00:07
1001 查看
如何使用wxPython
创建简单窗口# -*- coding:utf-8 -*- # import wx app = wx.App(0) frame = wx.Frame(None) frame = wx.Frame(parent = None, title = "Hello, wxPython!") frame.Show(True) app.MainLoop()
2. 创建窗口
# -*- coding:utf-8 -*- # import wx class MyApp(wx.App): def OnInit(self): frame = wx.Frame(parent = None, title = "Hello, wxPython!") frame.Show() return True app = MyApp() app.MainLoop()
3. 组件
* 面板
# -*- coding:utf-8 -*- # import wx class MyApp(wx.App): def OnInit(self): frame = wx.Frame(parent = None, id = -1, title = "Panel", pos=(100, 100), size=(600, 480), style = wx.DEFAULT_FRAME_STYLE, name = "frame") panel = wx.Panel(frame, -1) frame.Show() return True app = MyApp() app.MainLoop()
* 按钮
# -*- coding:utf-8 -*- # import wx class MyApp(wx.App): def OnInit(self): frame = wx.Frame(parent = None, title = 'Button') panel = wx.Panel(frame, -1) button = wx.Button(panel, -1, "Button", pos=(50,50)) frame.Show() return True app = MyApp() app.MainLoop()
* 标签
# -*- coding:utf-8 -*- # import wx class MyApp(wx.App): def OnInit(self): frame = wx.Frame(parent = None, title = 'wxPython',size=(300,200)) panel = wx.Panel(frame, -1) label1 = wx.StaticText(panel, -1, "Python", size=(160, 20), pos = (60, 10), style = wx.ALIGN_RIGHT) label2 = wx.StaticText(panel, -1, "Python", size=(160, 20), pos = (60, 50), style = wx.ALIGN_CENTER) label2.SetForegroundColour('red') label2.SetBackgroundColour('black') label3 = wx.StaticText(panel, -1, 'Python\nwxPython', size = (160, 40), pos = (60, 90)) frame.Show() return True app = MyApp() app.MainLoop()
* 文本框
* 单行文本框
# -*- coding:utf-8 -*- # import wx class MyApp(wx.App): def OnInit(self): frame = wx.Frame(parent = None, title = 'wxPython',size=(300,200)) panel = wx.Panel(frame, -1) label1 = wx.StaticText(panel, -1, "wxPython", pos = (120, 20)) label2 = wx.StaticText(panel, -1, "User Name:", pos = (10, 50)) text = wx.TextCtrl(panel, -1, "Python", size=(100, 20), pos = (120, 50)) label3 = wx.StaticText(panel, -1, "Password:", pos = (10, 100)) password = wx.TextCtrl(panel, -1, "password", size=(100, 20), pos = (120, 100), style = wx.TE_PASSWORD) frame.Show() return True app = MyApp() app.MainLoop()
* 多行文本框
# -*- coding:utf-8 -*- # import wx class MyApp(wx.App): def OnInit(self): frame = wx.Frame(parent = None, title = 'wxPython',size=(600,400)) panel = wx.Panel(frame, -1) label1 = wx.StaticText(panel, -1, "MultiLine", pos = (280, 10)) text1 = wx.TextCtrl(panel, -1, "Python", pos =(10, 30), size = (560, 150), style = wx.TE_MULTILINE) label2 = wx.StaticText(panel, -1, "RichText", pos = (280, 190)) text2 = wx.TextCtrl(panel, -1, "Python wxPython", pos=(10, 210), size = (560, 150), style = wx.TE_MULTILINE|wx.TE_RICH) text2.SetStyle(0,6,wx.TextAttr('red','blue')) frame.Show() return True app = MyApp() app.MainLoop()
* 单选框和复选框
# -*- coding:utf-8 -*- # import wx class MyApp(wx.App): def OnInit(self): frame = wx.Frame(parent = None, title = 'wxPython',size=(300,200)) panel = wx.Panel(frame, -1) self.radio1 = wx.RadioButton(panel, -1, "Radio1", pos = (10, 40), style = wx.RB_GROUP) self.radio2 = wx.RadioButton(panel, -1, "Radio2", pos = (10, 80)) self.radio3 = wx.RadioButton(panel, -1, "Radio3", pos = (10, 120)) self.check = wx.CheckBox(panel, -1, "CheckBox", pos = (120, 40), size = (150, 20)) self.button1 = wx.Button(panel, -1, "Radio", pos = (120, 80)) self.button2 = wx.Button(panel, -1, "Check", pos = (120, 120)) self.Bind(wx.EVT_BUTTON, self.OnButton1, self.button1) self.Bind(wx.EVT_BUTTON, self.OnButton2, self.button2) frame.Show() return True def OnButton1(self, event): if self.radio1.GetValue(): self.buton1.SetLabel("Radio1") elif self.radio2.GetValue(): self.button1.SetLabel("Radio2") else: self.button1.SetLabel("Radio3") def OnButton2(self, event): if self.check.IsChecked(): self.button2.SetLabel("Checked") else: self.button2.SetLabel("UnChecked") app = MyApp() app.MainLoop()
* 使用sizer布置组件
4. 对话框
* 消息框
# -*- coding:utf-8 -*- # import wx class MyApp(wx.App): def OnInit(self): self.frame = wx.Frame(parent = None, title = 'wxPython',size=(300,200)) panel = wx.Panel(self.frame, -1) self.button1 = wx.Button(panel, -1, 'Style1', pos=(100, 20)) self.button2 = wx.Button(panel, -1, 'Style2', pos=(100, 50)) self.button3 = wx.Button(panel, -1, 'Style3', pos=(100, 80)) self.button4 = wx.Button(panel, -1, 'Style4', pos=(100, 110)) self.button5 = wx.Button(panel, -1, 'Style5', pos=(100, 140)) self.Bind(wx.EVT_BUTTON, self.OnButton1,self.button1) self.Bind(wx.EVT_BUTTON, self.OnButton2,self.button2) self.Bind(wx.EVT_BUTTON, self.OnButton3,self.button3) self.Bind(wx.EVT_BUTTON, self.OnButton4,self.button4) self.Bind(wx.EVT_BUTTON, self.OnButton5,self.button5) self.frame.Show() return True def OnButton1(self, event): wx.MessageBox('Style1','wxPython',wx.YES_NO|wx.ICON_QUESTION) def OnButton2(self, event): wx.MessageBox('Style2','wxPython',wx.OK|wx.CANCEL|wx.ICON_ERROR) def OnButton3(self, event): wx.MessageBox('Style3','wxPython',wx.OK|wx.CANCEL|wx.ICON_EXCLAMATION) def OnButton4(self, event): wx.MessageBox('Style4','wxPython',wx.YES_NO|wx.NO_DEFAULT|wx.ICON_HAND) def OnButton5(self, event): wx.MessageBox('Style5','wxPython',wx.YES_NO|wx.YES_DEFAULT|wx.ICON_INFORMATION) app = MyApp() app.MainLoop()
* 标准对话框
# -*- coding:utf-8 -*- # import wx class MyApp(wx.App): def OnInit(self): self.frame = wx.Frame(parent = None, title = 'wxPython',size=(300,200)) panel = wx.Panel(self.frame, -1) self.button1 = wx.Button(panel, -1, 'Input String', pos=(100, 20)) self.button2 = wx.Button(panel, -1, 'Input Password', pos=(100, 70)) self.button3 = wx.Button(panel, -1, 'Input Number', pos=(100, 120)) self.Bind(wx.EVT_BUTTON, self.OnButton1,self.button1) self.Bind(wx.EVT_BUTTON, self.OnButton2,self.button2) self.Bind(wx.EVT_BUTTON, self.OnButton3,self.button3) self.frame.Show() return True def OnButton1(self, event): r = wx.GetTextFromUser('wxPython','String', 'Default') wx.MessageBox(r,"wxPython",wx.OK) def OnButton2(self, event): r = wx.GetPasswordFromUser('wxPython', 'Password') wx.MessageBox(r,"wxPython",wx.OK) def OnButton3(self, event): r = wx.GetNumberFromUser('Input Number','Number', 'wxPython',80) wx.MessageBox(str(r),"wxPython",wx.OK) app = MyApp() app.MainLoop()
* 自定义对话框
# -*- coding:utf-8 -*- # import wx class MyApp(wx.App): def OnInit(self): self.frame = wx.Frame(parent = None, title = 'wxPython',size=(300,170)) panel = wx.Panel(self.frame, -1) self.button = wx.Button(panel, -1, 'Show Dialog', pos=(100, 50)) self.Bind(wx.EVT_BUTTON, self.OnButton,self.button) self.frame.Show() return True def OnButton(self, event): dialog = MyDialog() r = dialog.ShowModal() if r == wx.ID_OK: wx.MessageBox("You input:"+dialog.text.GetValue(),"wxPython",wx.OK) class MyDialog(wx.Dialog): def __init__(self): wx.Dialog.__init__(self, None, -1, 'wxDialog', size=(300,170)) label = wx.StaticText(self, -1, 'Simple Dialog', pos = (120, 20)) self.text = wx.TextCtrl(self, -1, pos = (100, 50), size = (160, -1)) self.ok = wx.Button(self, wx.ID_OK, "OK", pos=(50, 80)) self.cancel = wx.Button(self, wx.ID_CANCEL, "Cancel", pos=(200, 80)) app = MyApp() app.MainLoop()
5. 菜单
* 普通菜单
# -*- coding:utf-8 -*- # import wx class MyApp(wx.App): def OnInit(self): frame = wx.Frame(parent = None, title = 'wxPython',size=(300,200)) panel = wx.Panel(frame, -1) menuBar = wx.MenuBar() menu =wx.Menu() open = menu.Append(-1, 'Open') exit = menu.Append(-1, 'Save') menu.AppendSeparator() close = menu.Append(-1, 'Close') menuBar.Append(menu, '&File') menu = wx.Menu() copy = menu.Append(-1, 'Copy') paste = menu.Append(-1, 'Paste') cut = menu.Append(-1, 'Cut') menu.AppendSeparator() selectall = menu.Append(-1, 'SelectAll') menuBar.Append(menu, '&Edit') menu = wx.Menu() about = menu.Append(-1, 'About') menuBar.Append(menu, '&Help') frame.SetMenuBar(menuBar) frame.Show() return True def OnButton1(self, event): r = wx.GetTextFromUser('wxPython','String', 'Default') wx.MessageBox(r,"wxPython",wx.OK) def OnButton2(self, event): r = wx.GetPasswordFromUser('wxPython', 'Password') wx.MessageBox(r,"wxPython",wx.OK) def OnButton3(self, event): r = wx.GetNumberFromUser('Input Number','Number', 'wxPython',80) wx.MessageBox(str(r),"wxPython",wx.OK) app = MyApp() app.MainLoop()
* 弹出式菜单
# -*- coding:utf-8 -*- # import wx class MyApp(wx.App): def OnInit(self): frame = wx.Frame(parent = None, title = 'wxPython',size=(300,200)) self.panel = wx.Panel(frame, -1) menuBar = wx.MenuBar() self.menu =wx.Menu() open = self.menu.Append(-1, 'Open') exit = self.menu.Append(-1, 'Save') self.menu.AppendSeparator() close = self.menu.Append(-1, 'Close') menuBar.Append(self.menu, '&File') frame.SetMenuBar(menuBar) self.Bind(wx.EVT_RIGHT_DOWN, self.OnRClick) frame.Show() return True def OnRClick(self, event): pos = (event.GetX(), event.GetY()) self.panel.PopupMenu(self.menu, pos) app = MyApp() app.MainLoop()
* 绑定菜单事件
# -*- coding:utf-8 -*- # import wx class MyApp(wx.App): def OnInit(self): self.frame = wx.Frame(parent = None, title = 'wxPython',size=(300,200)) self.panel = wx.Panel(self.frame, -1) menuBar = wx.MenuBar() self.menu =wx.Menu() open = self.menu.Append(-1, 'Open') save = self.menu.Append(-1, 'Save') self.menu.AppendSeparator() close = self.menu.Append(-1, 'Close') menuBar.Append(self.menu, '&File') self.menu = wx.Menu() about = self.menu.Append(-1, 'About') menuBar.Append(self.menu, '&Help') self.frame.SetMenuBar(menuBar) self.Bind(wx.EVT_MENU, self.OnOpen, open) self.Bind(wx.EVT_MENU, self.OnSave, save) self.Bind(wx.EVT_MENU, self.OnClose, close) self.Bind(wx.EVT_MENU, self.OnAbout, about) self.Bind(wx.EVT_RIGHT_DOWN, self.OnRClick) self.frame.Show() return True def OnOpen(self, event): dialog = wx.FileDialog(None, 'wxPython', style = wx.OPEN) dialog.ShowModal() dialog.Destroy() def OnSave(self, event): dialog = wx.FileDialog(None, 'wxPython', style = wx.SAVE) dialog.ShowModal() dialog.Destroy() def OnClose(self, event): self.frame.Destroy() def OnAbout(self, event): wx.MessageBox('wxPython Menu Event', 'wxPython', wx.OK) def OnRClick(self, event): pos = (event.GetX(), event.GetY()) self.panel.PopupMenu(self.menu, pos) app = MyApp() app.MainLoop()
6. 资源文件
# -*- coding:utf-8 -*- # import wx from wx import xrc class MyApp(wx.App): def OnInit(self): self.res = xrc.XmlResource('res.xrc') self.frame = self.res.LoadFrame(None, 'frame') self.panel = xrc.XRCCTRL(self.frame, 'panel') self.label = xrc.XRCCTRL(self.panel, 'label') self.text = xrc.XRCCTRL(self.panel, 'text') self.button = xrc.XRCCTRL(self.panel, 'button') self.Bind(wx.EVT_BUTTON, self.OnButton, self.button) self.frame.Show() return True def OnButton(self, event): wx.MessageBox('You input:'+self.text.GetValue(), 'wxPython', wx.OK) app = MyApp() app.MainLoop()
什么是wxpython
wxPython是跨平台GUI工具库wxWidgets的封装;wxWidgets库是由C++编写的,它类似Windows的MFC。
wxWidgets提供了对多种操作系统的支持。
由于它具有良好的可移植性,wxPython也具备了跨平台的能力。
相关文章推荐
- 【脚本语言系列】关于 Python 多线程编程, 你需要知道的事
- 【脚本语言系列】关于PythonGUI界面PyQT,你需要知道的事
- 【脚本语言系列】关于PythonGUI界面PythonWin,你需要知道的事
- 【脚本语言系列】关于Python数据库编程ODBC,你需要知道的事
- 【脚本语言系列】关于Python音频处理WMPlayerOCX,你需要知道的事情
- 【脚本语言系列】关于Python性能分析工具timeit, 你需要知道的事
- 【脚本语言系列】关于Python图像处理scikits-image, 需要知道的事
- 【脚本语言系列】关于Python图像处理PIL,你需要知道的事
- 【脚本语言系列】关于Python测试工具mock, 你需要知道的事
- 【脚本语言系列】关于Python代码分析工具line_profiler,你需要知道的事
- 【脚本语言系列】关于Python测试工具docstrings, 你需要知道的事
- 【脚本语言系列】关于Python邮件服务smtplib,你需要知道的事
- 【脚本语言系列】关于Python测试工具lettuce, 你需要知道的事
- 【脚本语言系列】关于Python网页服务Apache,你需要知道的事
- 【脚本语言系列】关于Python游戏工具Pygame,你需要知道的事
- 【脚本语言系列】关于Python文本解析XML,你需要知道的事
- 【脚本语言系列】关于Python数据库处理MySQL, 你需要知道的事
- 【脚本语言系列】关于Python开发环境搭建,你需要知道的事
- 【脚本语言系列】关于Python数据库处理SQLite,你需要知道的事
- 【脚本语言系列】关于Python统计分析statsmodel,你需要知道的事