python - wxpython中的派生面板类

标签 python wxpython

在我的 wxpython 程序中,我的面板的行为有所不同,具体取决于我是否将其设为派生类或直接面板实例:

import wx

class PanelWithText(wx.Panel):
    def __init__(self, parent):
        super(PanelWithText, self).__init__(parent)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        panel1 = wx.Panel(parent)
        st1 = wx.StaticText(panel1, label='Some Text')
        hbox1.Add(st1)

class Example(wx.Frame):

    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title=title,
            size=(390, 350))

        panel = wx.Panel(self)

        vbox = wx.BoxSizer(wx.VERTICAL)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)                  # comment out from here
        panel1 = wx.Panel(panel)                            #
        st1 = wx.StaticText(panel1, label='Some Text')      #
        hbox1.Add(st1)                                      # to here
        # panel1 = PanelWithText(panel)
        vbox.Add(panel1)

        panel.SetSizer(vbox)

        self.Centre()
        self.Show()

if __name__ == '__main__':

    app = wx.App()
    Example(None, title='Example')
    app.MainLoop()

如果我按原样运行它,它看起来很好。 如果我运行它,注释掉创建 panel1 的四行,并取消注释使用派生类创建 panel1 的行,则“Some Text”将被剪切并仅显示“Sor”。当我编写一个不平凡的程序时,更糟糕的事情开始发生。

这两个对我来说似乎相同。有什么区别?

我正在使用: Python 2.7.6 wxpython 3.0.0.0 Mac优胜美地10.10.2

最佳答案

问题出在养育子女上。问题在于,在第一个示例中,您将 StaticText 小部件的父级正确设置为 panel1。在 PanelWithText 类中,您将其父级设置为顶级面板而不是面板类,这是不正确的。这是一个固定的示例:

import wx

class PanelWithText(wx.Panel):
    def __init__(self, parent):
        super(PanelWithText, self).__init__(parent)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        st1 = wx.StaticText(self, label='Some Text')
        hbox1.Add(st1)

class Example(wx.Frame):

    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title=title,
            size=(390, 350))

        panel = wx.Panel(self)

        vbox = wx.BoxSizer(wx.VERTICAL)

        #hbox1 = wx.BoxSizer(wx.HORIZONTAL)                  # comment out from here
        #panel1 = wx.Panel(panel)                            #
        #st1 = wx.StaticText(panel1, label='Some Text')      #
        #hbox1.Add(st1)                                      # to here
        panel1 = PanelWithText(panel)
        vbox.Add(panel1)

        panel.SetSizer(vbox)

        self.Centre()
        self.Show()

if __name__ == '__main__':
    import wx.lib.mixins.inspection
    app = wx.App()
    Example(None, title='Example')
    wx.lib.inspection.InspectionTool().Show()
    app.MainLoop()

关于python - wxpython中的派生面板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28865389/

相关文章:

python - 如何将 python 依赖项添加到 heroku Node 服务器?

python - 在 LIbre Office Calc 中编写宏需要什么语言?

python - 在长时间运行的任务中保持 GUI 响应

python - 部署 Python 程序时出现问题(用 py2exe 打包)

python - WxPython:符合“确定”/“取消”按钮顺序的跨平台方式

Python 2to3 windows CMD

python - pysvn:如何获取修订号?

python - 如何在特定时间间隔内将某些值设置为零

python - 在 wxPython 中展开的 FoldPanelBar 上没有出现滚动条

python - 单击按钮即可更新 wxpython 框架