IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> WxPython 实现自适应的布局分割 -> 正文阅读

[移动开发]WxPython 实现自适应的布局分割

作者:>

在用WxPython 做桌面应用的界面时,为了提高使用者的体验,总会面临窗体的布局分割和排版的问题。 WxPython 提供了?wx.BoxSizer 和?wx.GridSizer 两个控件, 结合用起来,就基本能实现对窗体的布局分割, 比如实现九宫格

# encoding: utf-8
"""
@author:陈年椰子
@contact: hndm@qq.com
@version: 1.0
@project:test 
@file: wx_gui6.py
@time: 2022-3-9 8:35

说明 wx.FlexGridSizer和wx.GridSizer没
"""

# coding=utf-8
import wx

class MainWindow(wx.Frame):
    def __init__(self, parent, title, size=(600,600)):
        wx.Frame.__init__(self, parent=parent, title=title, size=size)

        self.Center()  # 设置窗口居中
        # 放一个面板,用于布局其他控件
        panel = wx.Panel(parent=self)
        # 创建按钮列表
        btn_lst = []
        for i in range(1,10):
            btn_lst.append(( wx.Button(panel, label="按钮"+str(i)), 0, wx.EXPAND))

        # 创建grid,垂直缝隙,水平缝隙
        gridsizer = wx.GridSizer(cols=3, rows=3, vgap=10, hgap=10)
        gridsizer.AddMany(btn_lst)

        panel.SetSizer(gridsizer)

        self.Show(True)

app = wx.App()
window = MainWindow(None, '九宫格')
app.MainLoop()

?

或者是对界面进行某种规则分割,比如这样

这种结构,就是把整个窗体,按1:1 左右平分,再把右边按1:1上下平分

代码如下:

# encoding: utf-8
"""
@author: 陈年椰子
@contact: hndm@qq.com
@version: 1.0
@project:test 
@file: wx_gui7.py
@time: 2022-3-9 9:36

说明
"""

import wx

class MainWindow(wx.Frame):
    def __init__(self, parent, title, size=(400,200)):
        wx.Frame.__init__(self, parent=parent, title=title, size=size)


        self.Center()  # 设置窗口居中
        # 放一个面板,用于布局其他控件
        panel = wx.Panel(parent=self)

        # 定义相关控件
        btn1 = wx.Button(panel, label="左")
        btn2 = wx.Button(panel, label="右1")
        btn3 = wx.Button(panel, label="右2 自动扩展")
        text1 = wx.TextCtrl(panel)
        text2 = wx.TextCtrl(panel)
        text3 = wx.TextCtrl(panel)
        text3.SetValue("自动扩展")

        # 创建右边子区域
        vbox_right_1 = wx.BoxSizer(wx.VERTICAL)
        vbox_right_2 = wx.BoxSizer(wx.VERTICAL)

        # 右边子区域增加控件
        vbox_right_1.Add(text2, proportion=0, flag=wx.ALL, border=10)
        vbox_right_1.Add(btn2, proportion=0, flag=wx.ALL, border=10)

        vbox_right_2.Add(text3, proportion=1, flag=wx.ALL| wx.EXPAND, border=10)
        vbox_right_2.Add(btn3, proportion=1, flag=wx.ALL| wx.EXPAND, border=10)


        # 创建右grid,垂直缝隙,水平缝隙
        gridsizer_right = wx.GridSizer(cols=1, rows=2, vgap=10, hgap=5)
        gridsizer_right.AddMany([(vbox_right_1, 1,wx.ALL |  wx.EXPAND), (vbox_right_2, 1, wx.ALL | wx.EXPAND)])

        # 创建区域
        vbox1 = wx.BoxSizer(wx.VERTICAL)
        # 左边区域增加控件
        vbox1.Add(text1, proportion=0, flag=wx.ALL, border=10)
        vbox1.Add(btn1, proportion=0, flag=wx.ALL, border=10)

        vbox2 = wx.BoxSizer(wx.VERTICAL)
        vbox2.Add(gridsizer_right, proportion=1, flag=wx.ALL | wx.EXPAND, border=15)


        # 创建主grid,垂直缝隙,水平缝隙
        gridsizer = wx.GridSizer(cols=2, rows=1, vgap=10, hgap=5)
        gridsizer.AddMany([(vbox1, 0, wx.EXPAND), (vbox2, 1, wx.ALL | wx.EXPAND) ])


        panel.SetSizer(gridsizer)


        # 菜单栏
        file_menu = wx.Menu()
        file_menu.Append(wx.ID_SAVE, '保存', '将会保存内容')
        window_menu = wx.MenuBar()
        window_menu.Append(file_menu, '文件')
        self.SetMenuBar(window_menu)

        # 创建状态栏
        self.statusbar = self.CreateStatusBar()
        self.statusbar.SetFieldsCount(3)
        self.statusbar.SetStatusWidths([-1, -2, -3])
        self.statusbar.SetStatusText(u"数据1" , 0)
        self.statusbar.SetStatusText(u"数据2:"  , 1)
        self.statusbar.SetStatusText(u"数据3:"  , 2)

        self.Show(True)

app = wx.App()
window = MainWindow(None, '测试')
app.MainLoop()

思路过程就是,就是panel 里放一个wx.GridSizer , 这个wx.GridSizer 是1行2列结构。?wx.GridSizer里面的2个格子,各自放一个wx.BoxSizer , 右边的?wx.BoxSizer 继续嵌套 一个wx.GridSizer,此wx.GridSizer是2行1列结构,右边wx.GridSizer 的2个格子,各自放一个wx.BoxSizer , 最下层的wx.BoxSizer 再装入相关的控件。

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:21:45  更:2022-03-11 22:23:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/2 18:35:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码