You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用wxPython-Phoenix时控件不显示问题求助

解决wxPython-Phoenix中控件无法显示的问题

嘿,我帮你定位到问题啦!你的控件之所以不显示,核心原因是把布局sizer绑定给了Frame,而非承载所有控件的Panel。所有的静态文本和输入框都放在main_Panel里,sizer必须作用于这个Panel才能让控件正确渲染和布局。

修正后的代码

import wx

class App_Frame(wx.Frame):
    def __init__(self,title=""):
        # 初始化Frame(用更规范的继承写法)
        super().__init__(None, -1, title)
        main_Panel = wx.Panel(self)
        
        #-----------Controls------------
        # Deal Name
        Deal_Name_Lbl = wx.StaticText(main_Panel,-1,"Deal Name:",style=wx.ALIGN_CENTER)
        Deal_Name_Txt = wx.TextCtrl(main_Panel,-1,"Deal Name")
        # Num Copies
        Num_Copies_lbl = wx.StaticText(main_Panel,-1,"Number of Copies:",style=wx.ALIGN_CENTER)
        Num_Copies_Txt = wx.TextCtrl(main_Panel,-1,"Num Copies")
        
        #--------------Sizer--------------
        flex_grid_sizer = wx.FlexGridSizer(cols=2,vgap=6,hgap=6)
        flex_grid_sizer.AddGrowableCol(1)
        
        # 添加控件到sizer
        flex_grid_sizer.Add(Deal_Name_Lbl,0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
        flex_grid_sizer.Add(Deal_Name_Txt,0,wx.EXPAND)
        flex_grid_sizer.Add(Num_Copies_lbl,0,wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
        flex_grid_sizer.Add(Num_Copies_Txt,0,wx.EXPAND)
        
        # 关键修改:把sizer绑定给Panel,而非Frame
        main_Panel.SetSizer(flex_grid_sizer)
        # 让Panel先适配内部控件,再让Frame适配Panel尺寸
        main_Panel.Fit()
        self.Fit()

class App_(wx.App):
    def OnInit(self):
        Main_Frame = App_Frame("Paper")
        Main_Frame.Show()
        return True

#--------------------- MAIN FUNCTION ----------------------
def Main():
    Main_Window = App_()
    Main_Window.MainLoop()

#--- Call of Main----
Main()

主要修改点说明

  • 修正sizer绑定对象:将self.SetSizer(flex_grid_sizer)替换为main_Panel.SetSizer(flex_grid_sizer),因为所有控件都属于main_Panel,sizer必须作用于这个父容器才能管理子控件布局。
  • 优化初始化逻辑:用super().__init__(...)替代原有的wx.Frame.__init__(self,...),这是Python类继承更规范的写法,避免潜在的初始化冲突。
  • 调整适配顺序:先让Panel适配内部控件大小,再让Frame适配Panel的最终尺寸,确保布局完整生效。

这样修改后,你的控件就能正常显示,FlexGridSizer的布局也会按预期工作啦!

内容的提问来源于stack exchange,提问作者Andy

火山引擎 最新活动