微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

切换面板时窗口左上角的小方块 wxpython

如何解决切换面板时窗口左上角的小方块 wxpython

我遇到了 wx.panels 的问题。 在我的项目中,创建了一个文件中的类中继承的 wx.frame 文件,其他两个文件继承了 wx.panels。 我试图隐藏/销毁 panel1 并调用 panel2 但不知何故它不起作用。一个带有面板背景颜色的小方形图标出现在开关上。 我在 stackoverflow 上提到了 [this topic][1],但我发现如果我不使用 sizers,代码就不起作用(当拆分到不同的文件中时。) [1]:https://stackoverflow.com/questions/58794753/wxpython-panel-is-cropped-with-only-a-small-Box-shown-at-the-top-left-hand-corne

main.py

import sys
import wx
from test1 import panel1
from test2 import panel2

class main(wx.Frame):
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.panel = panel1(parent=self)
        self.Show()
        # display=wx.display()
        # size = display.GetGeometry().GetSize()
        # print(size)

    def update_window(self):
        self.panel2=panel2(self,wx.ID_ANY)
        self.panel2.Show()
        self.panel.Hide()
        self.Refresh()

if __name__ == "__main__":
    print(__file__)
    app = wx.App()  # Create a new app,don't redirect stdout/stderr to a window.
    frame = main(None,wx.ID_ANY,"Hello World",size=(1024,700)) # A Frame is a top-level window.
    frame.Show(True)     # Show the frame.
    app.MainLoop()

test1.py

import wx
from view.panel import custom_panel
from test2 import panel2

class panel1(custom_panel):
    def __init__(self,parent=None):
        super().__init__(parent)
        self.parent=parent
        self.btn1 = wx.Button(self,"button1",pos=(100,50),size=(300,50))
        self.Bind(wx.EVT_BUTTON,self.On_btn1_clicked,self.btn1)


    def On_btn1_clicked(self,event):
        self.parent.update_window()

test2.py

import wx
from view.panel import custom_panel

class panel2(custom_panel):
    def __init__(self,parent=None,id=None,700)):
        super().__init__(parent)
        self.parent=parent
        self.btn2 = wx.Button(self,"button2",pos=(300,self.On_btn2_clicked,self.btn2)


    def On_btn2_clicked(self,event):
        self.parent.update_window()


custom_panel.py

import wx

class custom_panel(wx.Panel):
    def __init__(self,**kwargs)
        self.SetBackgroundColour("#000000")


if __name__ == "__main__":
    pass
    

解决方法

@PavanHebli,

我强烈建议您学习 sizer 以及如何使用它们。

虽然您的解决方案确实有效,但这是非常糟糕的解决方案。

,

嗯,我也同意使用 sizer。

但是:我也遇到了很长时间的问题并且不知道解决方案。 sizer 不工作(正如我所料)

对我来说,问题是面板没有(或尺寸不正确)。 解决方案是:

panel.Fit() 要么 panel.SetSize(x,y)

,

解决了! 在创建第二个面板时,我只传递了父面板,我猜 wx.DefaultSize 与第一个面板不同,不适用于第二个面板。 我所要做的就是在 test2.py 文件的 init 方法 中传递 size=(1024,700) 像这样:

super().__init__(parent,id=id,size=(1024,700))

就是这样。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。