Python图形开发GUI库wxPython使用方法详解
wxPython是一个开源的Python图形开发GUI库,它可以用来创建本机GUI应用程序,wxPython是对wxWidgets C++ 代码库的Python绑定。
安装wxPython
在使用wxPython之前,需要先安装它。在Windows上,可以从wxPython的官方网站(https://www.wxpython.org/pages/downloads/)上下载预编译的二进制文件。在Linux上,可以使用包管理器来安装wxPython。
wxPython基本组件
wxPython提供了许多用于创建GUI应用程序的基本组件。下面是一些常用的组件:
wx.Frame
: 顶级窗口,通常是应用程序的主窗口。wx.Panel
: 用于包含其他组件的容器。wx.Button
: 一个按钮。wx.TextCtrl
: 用于输入和输出文本的控件。wx.StaticText
: 用于显示静态文本的控件。wx.BoxSizer
:用于组织窗口布局的sizer。
创建wxPython应用程序框架
在开始创建GUI应用程序之前,需要首先创建一个应用程序框架。以下是创建应用程序框架的基本代码:
import wx
app = wx.App()
frame = wx.Frame(None, title="My Application")
frame.Show()
app.MainLoop()
这段代码将创建一个名为"My Application"的窗口,并显示它。wx.App
类是wxPython应用程序的基础,它必须是应用程序的第一个实例。wx.Frame
类是应用程序窗口的基础,它必须接收应用程序的wx.App
实例作为第一个参数。
创建wxPython应用程序的主要布局
要创建wxPython应用程序的主要布局,需要使用sizer。以下是一个简单的布局示例:
import wx
app = wx.App()
frame = wx.Frame(None, title="My Application")
panel = wx.Panel(frame, -1)
button1 = wx.Button(panel, -1, "Button 1")
button2 = wx.Button(panel, -1, "Button 2")
button3 = wx.Button(panel, -1, "Button 3")
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(button1, 0, wx.ALL, 5)
sizer.Add(button2, 0, wx.ALL, 5)
sizer.Add(button3, 0, wx.ALL, 5)
panel.SetSizer(sizer)
frame.Show()
app.MainLoop()
这段代码将创建一个包含三个按钮的垂直布局。wx.Panel
类是用来组织控件的一个容器,可以接收wx.Frame
类作为第一个参数。wx.BoxSizer
类是用来组织窗口布局的一个sizer,可以接收group window的对象或None作为第一个参数,用于固定大小,不填即应用 entire range。wx.ALL
用于指定控件的边距。
示例一:创建简单的计算器
下面是创建一个简单的计算器的代码:
import wx
class CalcFrame(wx.Frame):
def __init__(self, parent, title):
super(CalcFrame, self).__init__(parent, title=title, size=(300, 250))
self.InitUI()
self.Center()
self.Show()
def InitUI(self):
vbox = wx.BoxSizer(wx.VERTICAL)
self.textprint = wx.TextCtrl(self, style=wx.TE_READONLY)
vbox.Add(self.textprint, flag=wx.EXPAND | wx.TOP | wx.BOTTOM, border=4)
gridBox = wx.GridSizer(5, 4, 5, 5)
labels = ['AC', 'DEL', 'pi', 'CLOSE', '7', '8', '9', '/', '4', '5', '6', '*', '1', '2', '3', '-', '0', '.', '+', '=']
for label in labels:
buttonItem = wx.Button(self, label=label)
self.createHandler(buttonItem, label)
gridBox.Add(buttonItem, 1, wx.EXPAND)
vbox.Add(gridBox, proportion=1, flag=wx.EXPAND)
self.SetSizer(vbox)
def createHandler(self, button, labels):
item = "DEL AC CLOSE = pi"
if labels not in item:
self.Bind(wx.EVT_BUTTON, self.OnAppend, button)
elif labels == 'DEL':
self.Bind(wx.EVT_BUTTON, self.OnDel, button)
elif labels == 'AC':
self.Bind(wx.EVT_BUTTON, self.OnAc, button)
elif labels == '=':
self.Bind(wx.EVT_BUTTON, self.OnTarget, button)
elif labels == 'CLOSE':
self.Bind(wx.EVT_BUTTON, self.OnExit, button)
elif labels == 'pi':
self.Bind(wx.EVT_BUTTON, self.OnPi, button)
def OnAppend(self, event):
eventbutton = event.GetEventObject()
label = eventbutton.GetLabel()
self.textprint.AppendText(label)
def OnDel(self, event):
self.textprint.Remove(self.textprint.GetLastPosition() - 1, self.textprint.GetLastPosition())
def OnAc(self, event):
self.textprint.Clear()
def OnTarget(self, event):
string = self.textprint.GetValue()
try:
target = eval(string)
self.textprint.SetValue(str(target))
except Exception:
dlg = wx.MessageDialog(self, u'格式错误,请输入正确的算式!', u'错误提示',
wx.OK | wx.ICON_INFORMATION)
dlg.ShowModal()
dlg.Destroy()
def OnExit(self, event):
self.Close()
def OnPi(self, event):
self.textprint.AppendText('3.1415926535')
if __name__ == '__main__':
app = wx.App()
CalcFrame(None, title='Calculator')
app.MainLoop()
示例二:wxPython创建一个简单的图片浏览器
下面是创建一个简单的图片浏览器的代码:
import wx
import os
import glob
class ImagePanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.max_size = 240
self.photos = []
self.current_photo = 0
self.photos = glob.glob("images/*.jpg")
for photo in self.photos:
if os.path.exists(photo):
wx_image = wx.Image(photo, wx.BITMAP_TYPE_ANY)
width, height = wx_image.GetSize()
if width > height:
new_width = self.max_size
new_height = self.max_size * height // width
else:
new_height = self.max_size
new_width = self.max_size * width // height
wx_image = wx_image.Scale(new_width, new_height)
self.photos[self.current_photo] = wx.Bitmap(wx_image)
wx.StaticBitmap(self, -1, self.photos[self.current_photo], (10, 10))
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Photo Viewer", size=(258, 240))
panel = wx.Panel(self)
panel.SetBackgroundColour('#DFEFF8')
hbox = wx.BoxSizer(wx.HORIZONTAL)
ImagePanel(hbox)
panel.SetSizer(hbox)
self.Centre()
self.Show()
app = wx.App(redirect=False)
frame = MainFrame()
app.MainLoop()
以上就是wxPython的基本用法,通过学习这篇文章,你可以基本开发出简单的wxPython应用程序或组件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python图形开发GUI库wxpython使用方法详解 - Python技术站