首页 > 解决方案 > wxPython:如何根据嵌入的StaticText的内容使Dialog调整大小

问题描述

这是我的测试小程序:

import wx

class Test(wx.Dialog):
    def __init__(self, parent, title="", caption='', btnList=['OK']):
        wx.Dialog.__init__(self, parent, -1, title=title)
        self.btnList = btnList
        self.parent = parent
        sizer = wx.BoxSizer()

        self.panel = wx.Panel(self, -1)
        sizer.Add(self.panel)
        self.mainSizer = wx.BoxSizer(wx.VERTICAL)
        self.panel.SetSizer(self.mainSizer)

        self.caption = caption
        self.setCaption()
        self.setButton()

        self.SetSizerAndFit(sizer)


    def setCaption(self):
        caplb = wx.StaticText(self.panel, -1, self.caption)
        self.mainSizer.Add(caplb, 1, wx.EXPAND | wx.ALL, 10)
        capFont = caplb.GetFont()
        capFont.SetPointSize(10)
        capFont.SetWeight(wx.FONTWEIGHT_BOLD)
        caplb.SetFont(capFont)
        caplb.SetForegroundColour(wx.RED)

    def setButton(self):
        self.btnBox = wx.BoxSizer(wx.HORIZONTAL)
        self.mainSizer.Add(self.btnBox, 0, wx.EXPAND | wx.BOTTOM, 10)
        self.btnBox.Add((1, 1), 1, wx.EXPAND)
        self.btns = []
        for i in range(len(self.btnList)):
            self.btns.append(wx.Button(self.panel, -1, self.btnList[i]))
            self.btnBox.Add(self.btns[i])
            self.btnBox.Add((1, 1), 1, wx.EXPAND)

if __name__ == "__main__":
    app = wx.App()
    msg = ""
    for i in range(8):
        msg += "%s: ATTENTION! ATTENTION! ATTENTION! ATTENTION!\n" % i

    dlg = Test(None, caption=msg, title="WARNING", btnList=['Yes', 'No'])
    dlg.CenterOnParent()
    val = dlg.ShowModal()
    app.MainLoop()

我希望对话框展开,以便可以看到 caplb 中的所有文本。在我处理过这段代码的大多数系统中,它运行良好。但是当我迁移到新系统时,gtk 限制只能显示 caplb 的一半。我不知道如何强制它显示所有的 StaticText。你能看看那个并告诉我提示吗?先谢谢了!!!

标签: dialogresizewxpythonstatic-text

解决方案


推荐阅读