gpt4 book ai didi

python - wxPython BoxSizer 中的重叠小部件(控件)

转载 作者:行者123 更新时间:2023-12-01 09:31:36 25 4
gpt4 key购买 nike

我正在向水平 wx.BoxSizer 添加元素,但它们不是彼此相邻放置,而是显示在彼此之上(所有元素都放置在父级的像素位置 (0,0) 中)面板)。

以下是文件的缩短版本(相关部分):

ma​​in.py:

import wx
from frm_users import UsersForm

class MainFrame(wx.Frame):

def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "My App Title", size=(1200, 800))
self.panel = wx.Panel(self, wx.ID_ANY)
self.statusbar = self.CreateStatusBar(2)
self.statusbar.SetStatusWidths([-1, 60])

# this event is bound to a menu item I construct elsewhere
def onUsers(self, event=None):
frmUsers = UsersForm(self.panel)


if __name__ == "__main__":
app = wx.App(False)
frame = MainFrame()
frame.Show()
app.MainLoop()

frm_users.py:

from dbmodel import OlvUsers, Users
import forms_controller
import wx

class UsersForm(wx.Panel):
def __init__(self, parent):
# parent here is the panel

toolbox = forms_controller.getToolboxSizer(self, parent)
parent.SetSizer(toolbox)


def onSearch(self, event=None):
print("Searching")

forms_controller.py:

import wx


def getToolboxSizer(parent, frame):
# frame is a panel usually
toolboxSizer = wx.BoxSizer(wx.HORIZONTAL)
toolboxSizer.AddSpacer(5)

font = wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD)
# create the search related widgets
searchByLbl = wx.StaticText(frame, label="Search By:")
searchByLbl.SetFont(font)
toolboxSizer.Add(searchByLbl, 0, wx.ALL, 5)

cat = ["Author", "Title", "ISBN", "Publisher"]
categories = wx.ComboBox(frame, value="Author", choices=cat)
toolboxSizer.Add(categories, 0, wx.ALL, 5)

search = wx.SearchCtrl(frame, style=wx.TE_PROCESS_ENTER)
search.Bind(wx.EVT_TEXT_ENTER, parent.onSearch)
toolboxSizer.Add(search, 0, wx.ALL, 5)

return toolboxSizer

我错过了什么?

最佳答案

main.py 中,UsersForm 的实例不在 sizer 内部。面板不会自动填充其父面板,除非它们是 wx.Frame 的唯一子面板。要实现此功能,您应该将 frmUsers 添加到与框架中的面板关联的 sizer。

我认为 getToolboxSizer 中也可能存在问题,因为那里的小部件似乎是直接添加到框架而不是面板中。您通常希望将子窗口小部件添加到面板中,以便选项卡可以正常工作。

我可能会将 onUsers 更改为以下内容:

def onUsers(self, event=None):
child_sizer = getToolboxSizer(self.panel)
self.main_sizer.Add(child_sizer, 0, wx.ALL, 5)

然后更新getToolboxSizer,这样它就不会将其所有小部件放在父级上,因为父级现在将是一个面板。

关于python - wxPython BoxSizer 中的重叠小部件(控件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49922095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com