【问题标题】:Buttons under wx.Notebook elementwx.Notebook 元素下的按钮
【发布时间】:2014-07-09 12:20:13
【问题描述】:

我正在尝试在wx.Notebook 元素下添加保存/取消按钮,但是在wx.Frame 上添加此按钮后,我的所有 UI 都损坏了。例如,我的wx.Notebook 元素的一部分位于左上角。但按钮一切OK。我该如何解决这个问题,我的 UI 没有被违反?

# -*- coding: utf-8 -*-
import wx

ID_NOTEBOOK_CTRL = 2000
ID_BUTTON_SAVE = 2001
ID_BUTTON_CANCEL_SAVE = 2002
ID_TAB_ONE = 2003
ID_TAB_ONE_CRYPTO_CHECKBOX = 2004    

class TabPanelBasics(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent, id=ID_TAB_ONE)

        self.LabelCrypto = wx.StaticText(self, label='Crypto:', pos=(15, 15))

        crypto = ['AES-256', 'RC5', 'Twofish']
        self.ComboBox = wx.ComboBox(self, choices=crypto, style=wx.CB_READONLY, pos=(160, 10))    

class NotebookCtrl(wx.Notebook):
    def __init__(self, parent):
        wx.Notebook.__init__(self, parent, id=ID_NOTEBOOK_CTRL, style=wx.BK_DEFAULT)

        self.tabBasicPreferences = TabPanelBasics(self)
        self.AddPage(self.tabBasicPreferences, "Test1")
        self.testTab = TabPanelBasics(self)
        self.AddPage(self.testTab, "Test2")    

        self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
        self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.OnPageChanging)

    def OnPageChanged(self, event):
        old = event.GetOldSelection()
        new = event.GetSelection()
        sel = self.GetSelection()
        event.Skip()

    def OnPageChanging(self, event):
        old = event.GetOldSelection()
        new = event.GetSelection()
        sel = self.GetSelection()
        event.Skip()

class OptionsCtrl(wx.Frame):
    """
        Frame that holds all other widgets
    """
    def __init__(self, parent, id, title, ico_folder):
        wx.Frame.__init__(self, parent, -1, title, style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER)
        self.panel = wx.Panel(self)

        self.notebook = NotebookCtrl(self.panel)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.notebook, 1, wx.ALL | wx.EXPAND, 5)

        self.accept_button = wx.Button(self, id=ID_BUTTON_SAVE, label='Save', pos=(210, 215))
        self.cancel_button = wx.Button(self, id=ID_BUTTON_CANCEL_SAVE, label='Cancel', pos=(305, 215))

        self.Bind(wx.EVT_BUTTON, self.CloseOptionsWindowAndSave, id=ID_BUTTON_SAVE)
        self.Bind(wx.EVT_BUTTON, self.CloseOptionsWindow, id=ID_BUTTON_CANCEL_SAVE)

        self.panel.SetSizer(self.sizer)
        self.Layout()

        self.icon = wx.Icon(ico_folder+'/icons/app.ico', wx.BITMAP_TYPE_ICO)
        self.SetIcon(self.icon)

    def CloseOptionsWindowAndSave(self, event):
        print 'saving...'
        self.Close()

    def CloseOptionsWindow(self, event):
        print 'close without save!'
        self.Close()    

if __name__ == "__main__":
    app = wx.App(0)
    ico_folder = '..'
    frame = OptionsCtrl(None, -1, 'Options', ico_folder)
    frame.Show()
    app.MainLoop()

【问题讨论】:

    标签: python python-2.7 user-interface wxpython


    【解决方案1】:

    笔记本的父级是self.panel,而按钮的父级是框架。这是你的问题。将每个按钮的父级设置为 self.panel 并且它应该可以工作,假设您已正确设置定位。

    就我个人而言,我会将按钮放入 Horizo​​ntal boxsizer,然后将该 sizer 添加到 self.sizer,而不是使用绝对定位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 2019-01-12
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      相关资源
      最近更新 更多