网站首页 > 技术文章 正文
实战wxPython系列-009

一个典型的GUI程序的窗口界面中,一般是由各种控件(或者部件)组成,这些部件一般都会按一定的布局呈现在窗口中。布局方式可以分为绝对定位布局和相对定位布局,绝对定位布局中的控件不会随窗口的大小变化而做调整,相对布局则会根据窗口的尺寸对其中的控件布局进行调整,以更好地适应窗口的变化。在比较久远的一些GUI框架中,一般只支持绝对定位布局,比如微软的MFC框架,只支持绝对定位布局。绝对布局虽然使用方便,但有很大的局限性。一般现代GUI框架,无论是微软的.Net 框架,Andriod SDK 里的布局,wxWidgets, Qt等C++ 框架,都提供了布局管理功能,来提供更灵活的窗口布局。
PyQt5是QT5的Python封装,wxPython是wxWidgets的Python封装,因此你无论是在PyQt5还是在wxPython中,都提供了管理应用程序布局的功能模块。在wxPython中,可以使用绝对定位或者使用sizer来进行布局管理。
绝对定位布局
绝对布局是指在窗口中以像素为单位指定每个部件的位置和大小。绝对定位布局有几个明显的缺点:
- 如果我们调整窗口大小,部件的大小和位置不会改变。
- 在不同平台上,应用程序看起来都不同。
- 在应用程序中更改字体可能会破坏布局。
- 如果决定更改布局,则必须完全重做布局,这样做既繁琐又耗时,更容易出错。
在一些简单的测试程序,使用绝对布局可以快速演示某个功能,但是在大多数情况下,都使用sizer来进行布局管理。
尺寸调节器
尺寸调节器解决了绝对定位布局中提到的所有这些问题。wxPython提供了以下调节器:
- wx.BoxSizer
- wx.StaticBoxSizer
- wx.GridSizer
- wx.FlexGridSizer
- wx.GridBagSizer
使用尺寸调节器,我们可以在wxPython中实现满足各种要求的布局,在后续的文章中将对其做更详细的介绍。
绝对布局演示
在绝对布局示例中,我们在窗口中使用wx.StaticBitmap加载几幅图像,使用绝对位置放置在窗口中。当我们调整窗口的大小的时候,可以看到,图像的位置并不随窗口的尺寸变化而做调整,以适应窗口的变化。完整代码如下:
import wx
import os
class Example(wx.Frame):
def __init__(self, *args, **kwargs):
super(Example, self).__init__(*args, **kwargs)
self.SetTitle('实战wxPython: 绝对位置布局演示')
self.SetSize(480, 360)
self.InitUi()
self.Centre()
def InitUi(self):
self.panel = wx.Panel(self)
self.panel.SetBackgroundColour("gray")
self.LoadImages()
self.pythonLogo.SetPosition((10, 10))
self.wxpythonLogo.SetPosition((100, 10))
self.wxwidgetsLogo.SetPosition((20, 200))
def LoadImages(self):
imgPath = os.path.dirname(__file__)
self.pythonLogo = wx.StaticBitmap(self.panel, wx.ID_ANY,
wx.Bitmap(imgPath + '/python-logo.png', wx.BITMAP_TYPE_ANY))
self.wxpythonLogo = wx.StaticBitmap(self.panel, wx.ID_ANY,
wx.Bitmap(imgPath + '/wxpython.png', wx.BITMAP_TYPE_ANY))
self.wxwidgetsLogo = wx.StaticBitmap(self.panel, wx.ID_ANY,
wx.Bitmap(imgPath + '/wxwidgets-logo.png', wx.BITMAP_TYPE_ANY))
def main():
app = wx.App()
window = Example(None)
window.Show()
app.MainLoop()
if __name__ == '__main__':
main()
运行效果如下图所示:

wxPython绝对布局演示
本文知识点
- GUI程序为什么需要布局;
- 了解wxPython中的布局管理;
- 认识静态图像控件wx.StaticBitmap;
- 使用绝对定位布局。
请多多关注,评论,收藏,点赞,和转发。
前一篇: wxPython -为应用添加工具栏
猜你喜欢
- 2024-12-29 cgitb,一个非常实用但容易被忽视的宝藏Python库
- 2024-12-29 Python爬虫入门(四):实战,爬取4399小游戏首页
- 2024-12-29 揭秘Python中的超强库:Hypothesis
- 2024-12-29 python+selenium做ui自动化测试用法必会
- 2024-12-29 肝了三天三夜,一文道尽Python的xpath解析
- 2024-12-29 基于opencv的轮廓匹配算法:python代码实现
- 2024-12-29 Python自动化:一键查找文件,告别手动翻找!拯救你的“文件堆”
- 2024-12-29 发掘 Python 的宝藏库:faulthandler,让你的调试轻松无比
- 2024-12-29 业余电台梅登黑德定位系统python计算程序
- 2024-12-29 如何利用python+selenium+ajax-hook抓取网页后台返回的json数据
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 90℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)