Изменение размера диалогового окна wx python не работает в Windows - PullRequest
0 голосов
/ 27 июня 2019

У меня есть диалог, который я хочу изменить размер.Он отлично работает в 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 Sit Amet, Concetetur Adipiscing Elit.Vivamus contectetur ex arcu, iaculis mi vestibulum vel.Nullam iaculis sed nunc at dictum.Quisque tincidunt vulputate quam ut posuere.Maecenas scelerisque, odio vitae placerat tempus, metus mauris cursus erat, quis vulputate mauris turpis sit amet urna.В привычных привычках.Нулла ес хусто виверра анте следствиеНун сит амет нулла портиттор, изречение от ут, вененатис квам.Vestibulum ante ipsum primis у faucibus orci luctus et ultrices posuere 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 et, fringilla facilisis mi.Ut justo sem, tempus in Tellus Eu, faucibus ultricies elit.Nam maximus sem lorem, porttitor porta mauris eleifend id.Целочисленный condimentum dolor без транспортных средств tincidunt.Ut augue velit, placerat ut efficitur et, scelerisque et nulla.

1 Ответ

1 голос
/ 27 июня 2019

Проблема в том, что вы используете стиль по умолчанию 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...