在Windows上无法调整wx python对话框的大小

时间:2019-06-27 07:51:32

标签: windows wxpython

我有一个想要调整大小的对话框。它可以在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()

Lorem ipsum dolor坐着,安全奉献精英。 Vivamus consectetur ex arcu,一种盲肠前缘。纳拉姆·埃库里斯(Nullam iaculis)在字典上宣告结束。 Quisque tincidunt vulputate quam ut posuere。 Maecenas scelerisque,dioo vitae placerat tempus,metus mauris cursus erat,quis vulputate mauris turpis坐在amet urna。在习惯习俗中,平板式的格言是正确的。无效或无效的结果。 Nunc Sit amet nulla porttitor,dictum ex ut,venenatis quam。紫茎泽兰(Faucibus orci luctus et ultrices cuuelia Cubilia Curae)中的初生初生植物; Ut nec odio ac ex ullamcorper commodo。 Aenean et leo justo。 Maecenas iaculis purus vel metus lobortis convallis。 Ut nisi nisl,dapibus eget nunc等,Frisilla facilisis mi。 Ut justo sem,在eu的tempus,faucibus ultricies流行。 Nam maximus sem lorem,porttitor porta mauris eleifend ID。整形调味品非运输性调味品。 au augue velit,Placerat ut efficitur等,scelerisque等。

1 个答案:

答案 0 :(得分:1)

问题是您使用的是wx.Dialog的默认样式,而且似乎从一种操作系统更改为另一种操作系统。

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

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

收件人:

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