0
首先,我使用wxPython 2.8.12.1。wxPython ScrolledPanel不在對話框中調整大小
我正在嘗試創建一個設置對話框,用戶可以在其中查看並編輯某些設置。 Atm我在滾動面板中有設置,然後我希望將面板添加到我的對話框中,並在對話框底部的「保存」和「取消」按鈕。我可以隱約得到我需要的東西,但滾動的面板開始非常小(甚至不顯示一次完整的垂直行文本),並且不會與對話框一起調整大小。這裏是我的代碼看起來像:
import wx
import wx.lib.scrolledpanel as scrolled
class SettingsDialog(wx.Dialog):
def __init__(self):
"""Initialize the dialog"""
wx.Dialog.__init__(self, None, wx.ID_ANY, 'Settings', size=(100,100),
style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
self.mainSizer = wx.BoxSizer(wx.VERTICAL)
# Add Settings Panel
self.panel = SettingsPanel(self)
self.mainSizer.Add(self.panel, 0, wx.EXPAND)
# Add Save/Cancel Buttons
self.createWidgets()
# Set sizer and window size
self.SetSizer(self.mainSizer)
self.mainSizer.Fit(self)
def createWidgets(self):
"""Create and layout the widgets in the dialog"""
btnSizer = wx.StdDialogButtonSizer()
saveBtn = wx.Button(self, wx.ID_OK, label="Save")
saveBtn.Bind(wx.EVT_BUTTON, self.OnSave)
btnSizer.AddButton(saveBtn)
cancelBtn = wx.Button(self, wx.ID_CANCEL)
btnSizer.AddButton(cancelBtn)
btnSizer.Realize()
self.mainSizer.Add(btnSizer, 0, wx.ALL | wx.ALIGN_RIGHT, 5)
def OnSave(self, event):
pass
class SettingsPanel(scrolled.ScrolledPanel):
def __init__(self, parent):
scrolled.ScrolledPanel.__init__(self, parent, -1)
self.mainSizer = wx.BoxSizer(wx.VERTICAL)
self.createWidgets()
self.SetSizer(self.mainSizer)
self.mainSizer.Fit(self)
self.SetupScrolling()
def createWidgets(self):
"""Create and layout the widgets in the panel"""
settingsSizer = wx.GridSizer(rows=0, cols=2, hgap=5, vgap=0)
names = #List of names grabbed from elsewhere
values = #List of values grabbed from elsewhere
name_value_dict = zip(names, values)
for name, value in name_value_dict:
lbl = wx.StaticText(self, label=''.join([name,':']))
settingsSizer.Add(lbl, 0, wx.ALL, 5)
txt = wx.TextCtrl(self, value=value, name="Name")
settingsSizer.Add(txt, 0, wx.ALL|wx.EXPAND, 5)
self.mainSizer.Add(settingsSizer, 0, wx.EXPAND)
class MyApp(wx.App):
def OnInit(self):
dlg = SettingsDialog()
dlg.ShowModal()
dlg.Destroy()
return True
if __name__ == '__main__':
app = MyApp(False)
app.MainLoop()
任何幫助一如既往的讚賞。
好的,謝謝。我還沒有仔細觀察,但我並不擔心在初始化時設置大小。我希望sizer.Fit(父母)會照顧這一點。 – Shatnerz
所以看起來像設置大小是主要問題。如果設置更改大小,是否有一種簡單的方法來自動執行此操作?這是甚至是好的做法,還是有更好的默認大小看起來好嗎?與之前一樣,我希望面板能夠包含所有的小部件,然後該對話框將適合包含面板和按鈕。 – Shatnerz
有一些方法,這篇文章討論它http://stackoverflow.com/q/12607460/5303401 – ozy