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