如何循环布局wxPython控件?SQLite数据展示问题求助
问题修复方案
1. 修正控件位置颠倒问题
你的main_sizer如果未指定垂直方向,默认会采用水平布局,导致三个子sizer并排而非上下堆叠。初始化main_sizer时必须明确设置垂直方向:
self.main_sizer = wx.BoxSizer(wx.VERTICAL)
这样三个子sizer会严格按照你Add的顺序从上到下排列,解决最后一个sizer跑到顶部的问题。
2. 显示全部数据库行数据
当前代码仅处理了单行数据,且未按行组织布局。正确的做法是为每行数据单独创建水平sizer,再统一加到垂直方向的结果容器中:
步骤1:初始化结果容器为垂直sizer
self.search_result_box_sizer = wx.BoxSizer(wx.VERTICAL)
步骤2:遍历所有数据库行并添加控件
假设db_results是从SQLite查询返回的所有行数据(每行包含student_name, student_class, amount_paid):
for student_name, student_class, amount_paid in db_results: # 为当前行创建水平布局容器 row_sizer = wx.BoxSizer(wx.HORIZONTAL) # 添加当前行的三个文本控件 row_sizer.Add( wx.StaticText(self, label=f"{student_name} "), 1, wx.ALL | wx.EXPAND, 5 ) row_sizer.Add( wx.StaticText(self, label=f"{student_class} "), 1, wx.ALL | wx.EXPAND, 5 ) row_sizer.Add( wx.StaticText(self, label=f"{amount_paid} "), 1, wx.ALL | wx.EXPAND, 5 ) # 将当前行的布局容器添加到结果容器 self.search_result_box_sizer.Add(row_sizer, 0, wx.ALL | wx.EXPAND, 5)
最后确保布局生效
完成所有sizer添加后,需要绑定主sizer到窗口并刷新布局:
self.SetSizer(self.main_sizer) self.Layout() # 可选:让窗口自动适配内容大小 # self.Fit()
内容的提问来源于stack exchange,提问作者Z.Edibo
相关产品推荐
相关产品推荐

