wxPython 4.0 автоматическая прокрутка не работает
Я пытаюсь реализовать автоматическую прокрутку wxPython в моем графическом интерфейсе.
Я создал упрощенную версию большого диалога в моем графическом интерфейсе, который может нуждаться в прокрутке на маленьком экране. Однако я не смог включить автоматическую прокрутку.
Я попытался обратиться ко всем ошибкам, перечисленным в документации, но я все еще не могу добиться автоматической прокрутки. Я обновил свой код для использования wx.StdBtnDialogSizer, но это не решило проблему.
Мой диалог выглядит одинаково, независимо от того, пытаюсь ли я применить принудительную адаптацию прокрутки, то есть прокрутки нет, и в нижней части диалогового окна (OS X) можно увидеть усеченную версию кнопок Ok / Cancel или совсем нет (Windows 10).
Как получить прокрутку? Или, альтернативно, только что создали диалог, который всегда прокручивается?
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, name='Name')
self.InitUI()
def InitUI(self):
self.panel = wx.Panel(self, name='main_panel')
self.btn1 = wx.Button(self.panel, -1, 'do dialog')
self.Bind(wx.EVT_BUTTON, self.on_btn1, self.btn1)
hsizer = wx.BoxSizer(wx.HORIZONTAL)
main_sizer = wx.BoxSizer(wx.VERTICAL)
hsizer.Add(self.btn1, flag=wx.ALL, border=10)
main_sizer.Add(hsizer, flag=wx.ALL, border=20)
self.panel.SetSizer(main_sizer)
main_sizer.Fit(self)
def on_btn1(self, event):
dia = my_dialog(self)
dia.ShowModal()
class my_dialog(wx.Dialog):
def __init__(self, parent, title='dialog'):
super(my_dialog, self).__init__(
parent, title=title)
self.lbl = "Lorem ipsum dolor sit amet." * 30
self.set_adaptation()
self.InitUI()
def InitUI(self):
pnl1 = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
hbox = wx.BoxSizer(wx.HORIZONTAL)
# main (scrolling) portion of dialog
bSizer1 = wx.StaticBoxSizer(wx.StaticBox(pnl1, wx.ID_ANY, 'bsizer1'), wx.VERTICAL)
bSizer1_hbox1 = wx.BoxSizer(wx.HORIZONTAL)
#btn1 = wx.Button(pnl1, -1, 'do dialog')
#btn2 = wx.Button(pnl1, -1, 'button 2')
btn1 = wx.StaticText(pnl1, label='btn1', name='hi')#, size=(500, -1))
btn2 = wx.StaticText(pnl1, label='btn2', name='hi')#, size=(500, -1))
bSizer1_hbox1.Add(btn1)
bSizer1_hbox1.Add(btn2)
bSizer1.Add(bSizer1_hbox1)
bSizer2 = wx.StaticBoxSizer(wx.StaticBox(pnl1, wx.ID_ANY, 'bsizer2'), wx.VERTICAL)
bSizer2_hbox = wx.BoxSizer(wx.HORIZONTAL)
lbl = self.lbl.split('.')
lbl = "\n\n".join(lbl)
txt = wx.StaticText(pnl1, label=lbl, name='hi')#, size=(500, -1))
bSizer2_hbox.Add(txt)
bSizer2.Add(bSizer2_hbox)
hbox.Add(bSizer1, flag=wx.ALL, border=10)
hbox.Add(txt, flag=wx.ALL, border=10)
hbox.Add(bSizer2, flag=wx.ALL, border=10)
# non-scrolling adaptation portion of the dialog
hbox_OK_CANCEL = wx.StdDialogButtonSizer()
self.okButton = wx.Button(pnl1, wx.ID_OK, "&OK")
self.cancelButton = wx.Button(pnl1, wx.ID_CANCEL, '&Cancel')
hbox_OK_CANCEL.AddButton(self.okButton)
hbox_OK_CANCEL.AddButton(self.cancelButton)
hbox_OK_CANCEL.Realize()
vbox.Add(hbox)
vbox.Add(hbox_OK_CANCEL)
pnl1.SetSizer(vbox)
vbox.Fit(self)
self.do_adaptation()
def set_adaptation(self):
"""
Try several methods of setting scrolling adaptation to on
"""
self.SetLayoutAdaptationLevel(1)
self.SetLayoutAdaptationMode(wx.DIALOG_ADAPTATION_MODE_ENABLED)
self.EnableLayoutAdaptation(wx.DIALOG_ADAPTATION_MODE_ENABLED)
wx.Dialog.EnableLayoutAdaptation(wx.DIALOG_ADAPTATION_MODE_ENABLED)
def do_adaptation(self):
"""
Try to manually force layout adaptation to happen
"""
adapter = self.GetLayoutAdapter()
adapter.DoLayoutAdaptation(self)
if __name__ == "__main__":
app = wx.App()
app.frame = MyFrame()
app.frame.Centre()
app.frame.Show()
app.MainLoop()
Вот версия wxPython, которую я использую:
wxPython (4.0.0b2)
wxPython-Phoenix (3.0.3.dev2902+a79cd32)