簡體   English   中英

筆記本中的 wxPython scrolledwindow 不滾動

[英]wxPython scrolledwindow in a notebook does not scroll

我想在筆記本的標簽上滾動 windows。 如果 window 太小,內容應該是可滾動的。 如果 window 足夠大,則一切都已正確布局。 當 window 太小無法容納所有內容時,它看起來也正確,但滾動條從未出現,我也無法使用鼠標滾輪滾動。 這是我最小的失敗案例:

#!/usr/bin/env python3
import wx

class MainWindow(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = u"Title", pos = wx.DefaultPosition, size = wx.Size(800,480), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL)
        self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
        notebook = wx.Notebook(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0)
        
        for tab in range(0,3):
            scrolled_window = wx.ScrolledWindow(notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.HSCROLL|wx.VSCROLL)
            sizer = wx.GridSizer(0, 5, 0, 0)
            scrolled_window.SetScrollRate(5, 5)
            scrolled_window.SetSizer(sizer)
            notebook.AddPage(scrolled_window, "Tab %d" % tab, False)
            scrolled_window.SetScrollbars(1, 1, 1, 1)
            
            for btn in range(0,50):
                button = wx.Button(scrolled_window, wx.ID_ANY, str(btn), wx.DefaultPosition, wx.DefaultSize, 0)
                button.SetMinSize((-1, 90))
                sizer.Add(button, 0, wx.ALL|wx.EXPAND, 5)
                sizer.Fit(scrolled_window)
                self.Layout()                
    
app = wx.App(False)
main_window = MainWindow(parent=None)
main_window.Show(True)
app.MainLoop()

此外,我看到此斷言失敗(每個選項卡一次或每當我更改選項卡時):

(scroll_bug.py:8990): Gtk-CRITICAL **: 09:02:58.514: gtk_box_gadget_distribute: assertion 'size >= 0' failed in GtkNotebook

感謝幫助

我不確定,但問題可能在於嘗試在筆記本中使用ScrolledWindow作為從屬子項 window。
面板更合適。
嘗試使用ScrolledPanel代替,例如

#!/usr/bin/env python3
import wx
import wx.lib.scrolledpanel as scrolled

class MainWindow(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = u"Title", pos = wx.DefaultPosition, size = wx.Size(800,480), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL)
        self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
        self.panel = wx.Panel(self)
        notebook = wx.Notebook(self.panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0)
        
        for tab in range(0,3):
            scrolled_window = scrolled.ScrolledPanel(notebook, wx.ID_ANY)
            scrolled_window.SetupScrolling()
            notebook.AddPage(scrolled_window, "Tab %d" % tab, False)
            bsizer = wx.GridSizer(0, 5, 0, 0)            
            for btn in range(0,50):
                button = wx.Button(scrolled_window, wx.ID_ANY, str(btn), wx.DefaultPosition, wx.DefaultSize, 0)
                button.SetMinSize((-1, 90))
                bsizer.Add(button, 0, wx.ALL|wx.EXPAND, 5)
            scrolled_window.SetSizer(bsizer)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(notebook, 1, wx.ALL| wx.EXPAND, 5)
        self.panel.SetSizer(sizer)
        self.Layout()                
        self.Refresh()                
    
app = wx.App(False)
main_window = MainWindow(parent=None)
main_window.Show(True)
app.MainLoop()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM