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)

0 ответов

Другие вопросы по тегам