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使用pyinstaller打包含有gettext locales语言环境的项目(推荐)
最近在用 pyhton 做一个图片处理的小工具,顺便接触了gettext,用来实现本地化化中英文转换,本文通过一个项目给大家详细介绍下,感兴趣的朋友跟随小编一起看看吧2022-01-01分享python中matplotlib指定绘图颜色的八种方式
这篇文章主要给大家分享的是python中matplotlib指定绘图颜色的八种方式,在使用matplotlib的pyplot库进行绘图时,经常会发现各种开源代码指定“color”的方式并不一致,下面就向大家展示8种指定color的方式,需要的朋友可以参考一下2022-03-03
最新评论