如何解决如何完全删除wxPython中的按钮?
编辑:Windows,如果重要
我:对Python本身相当满意,但是我对UI的所有经验都是HTML / CSS / AJAX / PHP。大约24小时前开始教我自己wxPython的知识,请保持友善。
问题:
对于我的项目,我将需要根据正在检查的数据不断调整UI的内容。我在这个方向上取得了一些进展,但是在拆除按钮时遇到了麻烦。有两种方法可以解决此问题,我也不知道该怎么做。
方法1是删除按钮。这在下面的代码中表示出来,并且可以正常工作,但是按钮的位置曾经有个大洞。
方法2是擦除界面并从头开始重建它。对于这个特定的问题,这可能有些矫kill过正,但这是我需要为我的项目做的事情。没有代码发布,因为我尝试的所有操作都没有效果,UI变成了暗灰色,关闭了应用程序,或者没有效果,只是在UI的左上方显示了一个小方块。
我感到我在这里缺少明显的东西,但是谷歌没有帮助;我显然没有对它表述正确,因为我所得到的就是如何像下面这样,或者与我的工作完全无关的情况。
import wx
class TinkerFrame( wx.Frame ):
def __init__(self):
super().__init__(parent=None,title='SandBox')
self.panel = wx.Panel(self)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.buttons = {}
self.buttons['one'] = wx.Button(self.panel,label='Press Me')
self.buttons['one'].Bind( wx.EVT_BUTTON,self.buttonpressed1)
self.buttons['two'] = wx.Button(self.panel,label='No,Press Me!')
self.buttons['two'].Bind( wx.EVT_BUTTON,self.buttonpressed2)
self.buttons['three'] = wx.Button(self.panel,label='Don\'t Touch Me' )
self.buttons['three'].Bind( wx.EVT_BUTTON,self.buttonpressed3)
for thisbutton in self.buttons:
self.sizer.Add( self.buttons[thisbutton],wx.ALL | wx.CENTER,5 )
self.panel.SetSizer(self.sizer)
self.Show()
def buttonpressed1(self,event):
print( 'Congrats. You can press a button. Mom would be so proud.' )
def buttonpressed2(self,event):
print( 'Oooooo,two buttons. Careful not to overheat your cpu!' )
def buttonpressed3(self,event):
self.buttons['one'].SetLabel( 'OW' )
self.buttons['one'].Bind( wx.EVT_BUTTON,self.buttonpressed4)
self.buttons['two'].Hide()
self.buttons['two'].Destroy()
self.buttons['three'].SetLabel( 'hey!' )
self.buttons['three'].Bind( wx.EVT_BUTTON,self.buttonpressed5)
def buttonpressed4(self,event):
print( 'You shouldn\'t oughta done that mister.' )
def buttonpressed5(self,event):
print( 'WHAT DID I SAY???' )
if __name__ == '__main__':
app = wx.App()
frame = TinkerFrame()
app.MainLoop()
解决方法
在wxPython中,小部件布局将在resize事件时重置。您可以通过调整窗口大小然后重新调整大小来触发事件。
为按钮处理程序尝试以下代码:
def buttonPressed3(self,event):
self.buttons['one'].SetLabel( 'OW' )
self.buttons['one'].Bind( wx.EVT_BUTTON,self.buttonPressed4)
self.buttons['two'].Hide()
self.buttons['two'].Destroy()
self.buttons['three'].SetLabel( 'HEY!' )
self.buttons['three'].Bind( wx.EVT_BUTTON,self.buttonPressed5)
sz = self.GetSize()
self.SetSize((sz[0],sz[1]+1)) # shift height 1 pixel
self.SetSize(sz) # shift back
if self.IsMaximized():
self.Maximize(False)
self.Maximize(True)
,
在buttonPressed3的末尾添加了以下内容。
self.sizer.Layout()
包含该建议的论坛帖子还指出,将需要self.Update()和/或self.Refresh()。 (在这种情况下,“自我”是wxFrame),这不是我的经验,但我提到它是因为在某些情况下可能需要它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。