WxPython中控件隐藏与显示的小技巧

 更新时间:2022年11月01日 14:44:17   作者:陈年椰子  
这篇文章主要介绍了WxPython中控件隐藏与显示的小技巧,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

WxPython控件隐藏与显示

WxPython 的控件,除了有Disable() 和 Enable()方法,还有hide及show方法,在固定位置的布局,Hide 和 Show()工作正常 。

比如这样

import wx
 
class MyButton(wx.Frame):
    flag = True
 
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title)
        panel = wx.Panel(self, -1, size=(300, 250))
        self.btn1 = wx.Button(panel, 201, u'设置', pos=(80, 70))
        self.Bind(wx.EVT_BUTTON, self.click1, self.btn1)
        self.btn2 = wx.Button(panel, 202, u'设置2', pos=(180, 70))
        self.Bind(wx.EVT_BUTTON, self.click2, self.btn2)
        self.Centre()
        self.btn2.Hide()
 
    def click1(self, e):
        print("btn1 click!")
        if self.flag:
            self.btn2.Hide()
            self.flag = False
        else:
            # self.btn2.Disable()
            self.btn2.Show()
            self.flag = True
 
    def click2(self, e):
        print("btn2 click!")
 
 
if __name__ == '__main__':
    app = wx.App()
    frame = MyButton(None, -1, u'按钮示例')
    frame.Show()
    app.MainLoop()

但如果使用wx.BoxSizer 的 EXPAND 布局 , 如果init 时就隐藏 控件,就会照成错位

比如这样

import wx
 
class MyButton(wx.Frame):
    flag = True
    def __init__(self,parent,id,title):
        wx.Frame.__init__(self,parent,id,title)
        panel=wx.Panel(self,-1,size=(300,250))
        box = wx.BoxSizer(wx.HORIZONTAL)
        self.btn1 = wx.Button(panel, -1, 'Button1')
        self.btn2 = wx.Button(panel, -1, 'Button2')
        self.btn3  = wx.Button(panel, -1, 'Button3')
        box.Add(self.btn1 , 1, wx.ALL, 30)
        box.Add(self.btn2 , 0, wx.EXPAND)
        box.Add(self.btn3 , 0, wx.ALIGN_CENTER)
        self.Bind(wx.EVT_BUTTON, self.click1, self.btn1)
        self.Bind(wx.EVT_BUTTON, self.click2, self.btn2)
        panel.SetSizer(box)
        self.Center()
        self.btn2.Hide()
 
 
    def click1(self,e ):
        print("btn1 click!")
        if self.flag:
            self.btn2.Hide()
            self.flag = False
        else:
            # self.btn2.Disable()
            self.btn2.Show()
            self.flag = True
    def click2(self,e):
        print("btn2 click!")
 
 
if __name__=='__main__':
    app=wx.App()
    frame=MyButton(None,-1,u'按钮示例')
    frame.Show()
    app.MainLoop()

想要这种布局结果

实际是这种布局结果

要想控件按预设的位置显示,就不能在init里直接执行 hide 方法。

要在 Frame 显示完成后,再进行隐藏(调用afterload)。

代码优化如下

# encoding: utf-8
"""
@author: 陈年椰子
@contact: hndm@qq.com
@version: 1.0
@project:test 
@file: wxgui3.py
@time: 2022-1-14 11:16
说明
"""
 
# coding: utf-8
 
import wx
 
class MyButton(wx.Frame):
    flag = True
    def __init__(self,parent,id,title):
        wx.Frame.__init__(self,parent,id,title)
        panel=wx.Panel(self,-1,size=(300,250))
        box = wx.BoxSizer(wx.HORIZONTAL)
        self.btn1 = wx.Button(panel, -1, 'Button1')
        self.btn2 = wx.Button(panel, -1, 'Button2')
        self.btn3  = wx.Button(panel, -1, 'Button3')
        box.Add(self.btn1 , 1, wx.ALL, 5)
        box.Add(self.btn2 , 0, wx.EXPAND)
        box.Add(self.btn3 , 0, wx.ALIGN_CENTER)
        self.Bind(wx.EVT_BUTTON, self.click1, self.btn1)
        self.Bind(wx.EVT_BUTTON, self.click2, self.btn2)
        panel.SetSizer(box)
        self.Center()
 
 
 
    def afterload(self):
        # 根据数据情况再次调整控件
        self.flag = False
        self.btn2.Hide()
 
    def click1(self,e ):
        print("btn1 click!")
        if self.flag:
            self.btn2.Hide()
            self.flag = False
        else:
            self.btn2.Show()
            self.flag = True
    def click2(self,e):
        print("btn2 click!")
 
 
if __name__=='__main__':
    app=wx.App()
    frame=MyButton(None,-1,u'按钮示例')
    frame.Show()
    # frame 显示完成后,再调整控件
    frame.afterload()
    app.MainLoop()

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python 注释:解释和优化代码可读性

    Python 注释:解释和优化代码可读性

    本文将探讨Python中注释的重要性,以及如何通过注释解释和优化代码的可读性,了解如何正确使用注释可以提高代码的可维护性和可理解性
    2023-09-09
  • Python 数据类型--集合set

    Python 数据类型--集合set

    这篇文章主要介绍了Python 数据类型集合set,在集合中的元素是无序的、唯一的、不可变的类型,它还有一个特殊的列表,可以对数据去重,下面来对其进行更彻底的认识吧,需要的小伙伴可以参考一下
    2022-02-02
  • Python 比较两个 CSV 文件的三种方法并打印出差异

    Python 比较两个 CSV 文件的三种方法并打印出差异

    这篇文章主要介绍了Python 比较两个 CSV 文件并打印出差异,本文将讨论比较两个 CSV 文件的各种方法,我们将包括执行此操作的最“Pythonic”方式和可帮助简化此任务的外部 Python 模块,需要的朋友可以参考下
    2023-06-06
  • Python使用pyinstaller打包含有gettext locales语言环境的项目(推荐)

    Python使用pyinstaller打包含有gettext locales语言环境的项目(推荐)

    最近在用 pyhton 做一个图片处理的小工具,顺便接触了gettext,用来实现本地化化中英文转换,本文通过一个项目给大家详细介绍下,感兴趣的朋友跟随小编一起看看吧
    2022-01-01
  • PyQt5之基础框架解读

    PyQt5之基础框架解读

    这篇文章主要介绍了PyQt5之基础框架,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 在Pytorch中自定义dataset读取数据的实现代码

    在Pytorch中自定义dataset读取数据的实现代码

    这篇文章给大家介绍了如何在Pytorch中自定义dataset读取数据,文中给出了详细的图文介绍和代码讲解,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-12-12
  • python实现中文文本分句的例子

    python实现中文文本分句的例子

    今天小编就为大家分享一篇python实现中文文本分句的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 分享python中matplotlib指定绘图颜色的八种方式

    分享python中matplotlib指定绘图颜色的八种方式

    这篇文章主要给大家分享的是python中matplotlib指定绘图颜色的八种方式,在使用matplotlib的pyplot库进行绘图时,经常会发现各种开源代码指定“color”的方式并不一致,下面就向大家展示8种指定color的方式,需要的朋友可以参考一下
    2022-03-03
  • python实现微信小程序用户登录、模板推送

    python实现微信小程序用户登录、模板推送

    这篇文章主要为大家详细介绍了python实现微信小程序用户登录、模板推送,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • python 线性回归分析模型检验标准--拟合优度详解

    python 线性回归分析模型检验标准--拟合优度详解

    今天小编就为大家分享一篇python 线性回归分析模型检验标准--拟合优度详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02

最新评论