【问题标题】:How to dynamically shrink or grow panel contents?如何动态缩小或扩大面板内容?
【发布时间】:2017-06-08 02:41:10
【问题描述】:

我在使我的程序面板适合低分辨率时遇到问题。就像我有 800 x 600 的分辨率,而我的面板比那个大,所以一切都被切断了,尤其是屏幕底部的按钮。

所以,我做了一个模拟程序作为例子:

import wx

MAIN_FRAME_SIZE = (190, 150)

class MainFrame(wx.Frame):  

    def __init__(self):

        wx.Frame.__init__(self, None, id = -1, title = 'Hello, World!', size = MAIN_FRAME_SIZE)

        vertBox = wx.BoxSizer(wx.VERTICAL)   

        staticText = wx.StaticText(self, label = 'Hello, World!')

        vertBox.Add(staticText, 0, wx.ALL, 40)

        self.SetSizer(vertBox)       

if __name__ == '__main__':
    app = wx.App()
    frame = MainFrame()
    frame.Show(True)
    app.MainLoop()

那么,我的问题是如何制作“Hello, World!” MainFrame变大时文本变大,MainFrame变小时我该怎么做?

谢谢。

【问题讨论】:

    标签: python wxwidgets boxsizer


    【解决方案1】:

    您可以使用一些启发式方法根据帧大小选择字体大小,或者您可以使用GetTextExtent() 计算字符串的长度并找到与您想要的字体大小相等的字体大小。

    要在调整框架大小时动态执行此操作,您需要捕获 wxEVT_SIZE 并在其处理程序中更改字体。

    【讨论】:

    • 感谢您的回答,但静态文本仅用作示例。在我的实际程序中,我有所有类型和种类的小部件......所以我似乎很难想象如何即时调整所有这些小部件的大小。
    • 像这样动态更改控件的字体是非常不寻常的。通常,您使用 sizer 进行布局,但 sizer 会更改窗口的大小,例如您的文本控件可以显示更多文本。他们从不改变字体的大小。
    • P.S.我所说的“不寻常”是指“闻所未闻”。
    猜你喜欢
    • 2013-03-10
    • 2020-05-25
    • 2016-08-18
    • 2011-09-26
    • 2012-02-15
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    相关资源
    最近更新 更多