網站首頁 編程語言 正文
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()
原文鏈接:https://blog.csdn.net/seakingx/article/details/122491587
相關推薦
- 2022-03-01 格式化日期‘年月日-時分秒’方法
- 2022-11-05 WPF+ASP.NET?SignalR實現后臺通知功能的示例代碼_C#教程
- 2022-04-29 通過C#程序操作Config文件_C#教程
- 2022-10-19 Android項目中引入aar包的正確方法介紹_Android
- 2023-01-17 關于最大池化層和平均池化層圖解_python
- 2022-06-22 Android使用http實現注冊登錄功能_Android
- 2022-12-29 react中將html字符串渲染到頁面的實現方式_React
- 2022-04-11 python寫入Excel表格的方法詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支