调整 wx python 对话框的大小不适用于 windows

Resizing a wx python dialog does not work on windows

我有一个要调整大小的对话框。它在 Linux 上完美运行,但在 Windows 上它不会调整大小。

我知道使用 wx.Frame 和 MakeModal 可以解决问题,但为什么这行不通?

import wx


class TestDialog(wx.Dialog):
    MIN_SIZE = (200, 100)
    def __init__(self, *args, **kwargs):
        super(TestDialog, self).__init__(None, *args, **kwargs)
        self.panel = MainPanel(self)
        self.Title = 'Test dialog'
        self.Bind(wx.EVT_CLOSE, self.on_quit_click)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.panel)
        self.SetSizer(sizer)

        self.SetMinSize(self.MIN_SIZE)
        self.SetSize(self.MIN_SIZE)

        self.status = wx.ID_CANCEL

    def on_cmd_ok_click(self, event):
        self.status = wx.ID_OK
        self._tear_down

    def on_quit_click(self, event):
        self._tear_down()

    def _tear_down(self):
        self.Destroy()


class MainPanel(wx.Panel):
    def __init__(self, parent, *args, **kwargs):
        super(MainPanel, self).__init__(parent, *args, **kwargs)
        self.parent = parent

        name_sizer = self._name_sizer(parent)
        button_sizer = self._button_sizer(parent)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(name_sizer, flag=wx.EXPAND)
        sizer.Add(button_sizer, flag=wx.EXPAND)
        self.SetSizer(sizer)

    def _name_sizer(self, parent):
        lbl_name = wx.StaticText(self, label='Name:')
        self.txt_name = wx.TextCtrl(self, size=(2000, -1))
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(lbl_name, flag=wx.ALIGN_CENTER)
        sizer.Add(self.txt_name, flag=wx.EXPAND)
        return sizer

    def _button_sizer(self, parent):
        cmd_action = wx.Button(self, id=wx.ID_OK)
        cmd_cancel = wx.Button(self, wx.ID_EXIT)
        cmd_action.Bind(wx.EVT_BUTTON, parent.on_cmd_ok_click)
        cmd_cancel.Bind(wx.EVT_BUTTON, parent.on_quit_click)

        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(cmd_action)
        sizer.Add((0, 0), proportion=1)
        sizer.Add(cmd_cancel)
        return  sizer

if __name__ == '__main__':
    wx_app = wx.App()
    TestDialog().ShowModal()
    wx_app.MainLoop()

事实是痛苦本身很重要,其次是肥胖精英。生命将从弓或我前庭的箭中被追逐。没有目标但现在却说。每个人都有决定做什么的能力。 Maecenas scelerisque,对生活的仇恨投入了时间,恐惧 mauris course was,who vulputate mauris turpis amet urn。据说他就住在这条街上。在 Euismod 的结果之前没有足球只是卡通,除非。现在不要有航空公司,ut, venenatis quam 说。首先躺在他面前的是医院的喉咙,护理床,以免恨而从肉体优势茉莉花和狮子座而已。 Maecenas 的目标是纯粹的恐惧或恐惧。至于球员,他现在需要蛋白质,这对我来说很容易。平心而论,足球之乡的时光,Ultricies的味道。对于最伟大的 sem lorem,渡轮 porta mauris eleifend id。痛苦的整个故事不是开发人员的载体。因为他想做广告,他尽可能多地投资,巧克力和什么都不投资。

问题是您使用的是 wx.Dialog 的默认样式,这似乎从一个 OS 更改为另一个。

您只需要通过更改以下行来定义您的自定义样式:

super(TestDialog, self).__init__(None, *args, **kwargs)

至:

super(TestDialog, self).__init__(None, *args, style=wx.RESIZE_BORDER|wx.CAPTION|wx.CLOSE_BOX, **kwargs)