ฉันสร้างวัตถุ Frame และต้องการจำกัดความกว้างที่สามารถขยายได้ หน้าต่างเดียวในเฟรมคือวัตถุ ScrolledWindow และที่ประกอบด้วยลูกอื่นๆ ทั้งหมด ฉันมีวัตถุจำนวนมากที่จัดเรียงโดยวาง BoxSizer ในแนวตั้ง ดังนั้นวัตถุ ScrolledWindow จึงค่อนข้างสูง มักจะมีแถบเลื่อนทางด้านขวาเพื่อให้คุณสามารถเลื่อนขึ้นและลงได้
ปัญหาเกิดขึ้นเมื่อฉันพยายามกำหนดขนาดสูงสุดสำหรับเฟรม ฉันใช้ฟังก์ชัน scrolled_window.GetBestSize()
(หรือ scrolled_window.GetEffectiveMinSize()
) ของ ScrolledWindow แต่ไม่ได้คำนึงถึงแถบเลื่อนแนวตั้ง ในที่สุดฉันก็มีเฟรมที่แคบเกินไปนิดหน่อยและมีแถบเลื่อนแนวนอนที่จะไม่มีวันหายไป
มีวิธีที่จะชดเชยความกว้างของแถบเลื่อนแนวตั้งหรือไม่? ถ้าไม่ ฉันจะหาความกว้างของแถบเลื่อนได้อย่างไร เพื่อที่ฉันจะได้เพิ่มลงในขนาดสูงสุดของเฟรมด้วยตนเอง
นี่คือตัวอย่างที่มีกรอบสูงแต่แคบ:
class TallFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, title='Tall Frame')
self.scroll = wx.ScrolledWindow(parent=self) # our scroll area where we'll put everything
scroll_sizer = wx.BoxSizer(wx.VERTICAL)
# Fill the scroll area with something...
for i in xrange(10):
textbox = wx.StaticText(self.scroll, -1, "%d) Some random text" % i, size=(400, 100))
scroll_sizer.Add(textbox, 0, wx.EXPAND)
self.scroll.SetSizer(scroll_sizer)
self.scroll.Fit()
width, height = self.scroll.GetBestSize()
self.SetMaxSize((width, -1)) # Trying to limit the width of our frame
self.scroll.SetScrollbars(1, 1, width, height) # throwing up some scrollbars
หากคุณสร้างเฟรมนี้ คุณจะเห็นว่า self.SetMaxSize
แคบเกินไป จะมีแถบเลื่อนแนวนอนเสมอเนื่องจาก self.scroll.GetBestSize()
ไม่ได้คำนึงถึงความกว้างของแถบเลื่อน