📄 notebook.py
字号:
self._create_slots = False for i in range(len(self.tabs)): if self.tabs[i][1] is None: self.tabs = self.tabs[:i] self.properties['tabs'].set_value(self.get_tabs()) def finish_widget_creation(self): ManagedBase.finish_widget_creation(self) # replace 'self' with 'self.nb_sizer' in 'self.sizer' if not misc.check_wx_version(2, 5, 2): self.sizer._fix_notebook(self.pos, self.nb_sizer) def create_properties(self): ManagedBase.create_properties(self) panel = wx.ScrolledWindow(self.notebook, -1, style=wx.TAB_TRAVERSAL) self.properties['no_custom_class'].display(panel) self.properties['tabs'].display(panel) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.properties['no_custom_class'].panel, 0, wx.ALL|wx.EXPAND, 3) sizer.Add(self.properties['tabs'].panel, 1, wx.ALL|wx.EXPAND, 3) panel.SetAutoLayout(True) panel.SetSizer(sizer) sizer.Fit(panel) self.notebook.AddPage(panel, _('Widget')) self.properties['tabs'].set_col_sizes([-1]) def on_set_focus(self, event): self.show_properties() event.Skip() def _add_tab(self, window, pos): if window is None: window = SizerSlot(self, self.virtual_sizer, pos) self.tabs[pos-1][1] = window else: window._dont_destroy = True node = Tree.Node(window) window.node = node common.app_tree.add(node, self.node) if self.widget: window.show_widget(True) self.virtual_sizer.set_item(pos) try: misc.wxCallAfter(window.sel_marker.update) except AttributeError, e: #print e pass def get_tabs(self): return [ [n] for n, w in self.tabs ] def set_tabs(self, tabs): delta = len(self.tabs) - len(tabs) if delta > 0: self._is_removing_pages = True # we have to remove some pages i = len(tabs) if self.widget: for n, window in self.tabs[i:]: self.widget.RemovePage(i) window.remove(False) del self.tabs[i:] if self.widget: self.widget.SetSelection(0) self._is_removing_pages = False elif delta < 0: # we have to add some pages number = len(self.tabs)+1 while common.app_tree.has_name(self.name + '_pane_%s' % number): number += 1 pos = len(self.tabs) for i in range(-delta): self.tabs.append(['', None]) pos += 1 if _has_panel: window = EditPanel(self.name + '_pane_%s' % number, self, -1, self.virtual_sizer, pos, self.property_window) self._add_tab(window, pos) else: self._add_tab(None, pos) number += 1 if self.widget: self.widget.SetSelection(self.widget.GetPageCount()-1) # finally, we must update the labels of the tabs for i in range(len(tabs)): tt = misc.wxstr(tabs[i][0]) if self.widget: self.widget.SetPageText(i, tt) self.tabs[i][0] = tt def delete(self): if self.widget: self.widget.DeleteAllPages() ManagedBase.delete(self) def get_property_handler(self, name): if name == 'tabs': return TabsHandler(self) return ManagedBase.get_property_handler(self, name) def find_page(self, page): """\ returns the index of the given page in the notebook, or -1 if the page cannot be found """ if not self.widget: return -1 for i in range(len(self.tabs)): if self.tabs[i][1] is page: if i < self.widget.GetPageCount(): return i else: return -1 return -1 def get_tab_pos(self): styles = { wx.NB_LEFT: 'wxNB_LEFT', wx.NB_RIGHT: 'wxNB_RIGHT', wx.NB_BOTTOM: 'wxNB_BOTTOM' } return styles.get(self.style, '0') def set_tab_pos(self, value): styles = { 'wxNB_LEFT': wx.NB_LEFT, 'wxNB_RIGHT': wx.NB_RIGHT, 'wxNB_BOTTOM': wx.NB_BOTTOM } self.style = styles.get(value, 0) def get_no_custom_class(self): return self.no_custom_class def set_no_custom_class(self, value): self.no_custom_class = bool(int(value))# end of class EditNotebook def builder(parent, sizer, pos, number=[1]): """\ factory function for EditNotebook objects. """ class Dialog(wx.Dialog): def __init__(self): wx.Dialog.__init__(self, None, -1, _('Select tab placement')) self.styles = [ 0, wx.NB_BOTTOM, wx.NB_LEFT, wx.NB_RIGHT ] self.style = 0 prop = RadioProperty(self, 'tab_placement', self, [_('Top'), _('Bottom'), _('Left'), _('Right')], columns=2, label=_('tab_placement')) szr = wx.BoxSizer(wx.VERTICAL) szr.Add(prop.panel, 0, wx.ALL|wx.EXPAND, 10) btn = wx.Button(self, wx.ID_OK, _('OK')) btn.SetDefault() szr.Add(btn, 0, wx.BOTTOM|wx.ALIGN_CENTER, 10) self.SetAutoLayout(True) self.SetSizer(szr) szr.Fit(self) self.CenterOnScreen() def __getitem__(self, value): def set_style(s): self.style = self.styles[s] return (lambda: self.style, set_style) # end of inner class dialog = Dialog() dialog.ShowModal() name = 'notebook_%d' % number[0] while common.app_tree.has_name(name): number[0] += 1 name = 'notebook_%d' % number[0] window = EditNotebook(name, parent, wx.NewId(), dialog.style, sizer, pos, common.property_panel, show=False) if _has_panel: pane1 = EditPanel(name + '_pane_1', window, wx.NewId(), window.virtual_sizer, 1, common.property_panel) node = Tree.Node(window) window.node = node window.virtual_sizer.node = node window.set_option(1) window.set_flag("wxEXPAND") window.show_widget(True) common.app_tree.insert(node, sizer.node, pos-1) if _has_panel: window._add_tab(pane1, 1) sizer.set_item(window.pos, 1, wx.EXPAND)def xml_builder(attrs, parent, sizer, sizeritem, pos=None): """\ factory to build EditNotebook objects from an xml file """ from xml_parse import XmlParsingError try: name = attrs['name'] except KeyError: raise XmlParsingError, _("'name' attribute missing") if not sizer or not sizeritem: raise XmlParsingError, _("sizer or sizeritem object cannot be None") window = EditNotebook(name, parent, wx.NewId(), 0, sizer, pos, common.property_panel, True) window._create_slots = True sizer.set_item(window.pos, option=sizeritem.option, flag=sizeritem.flag, border=sizeritem.border) node = Tree.Node(window) window.node = node if pos is None: common.app_tree.add(node, sizer.node) else: common.app_tree.insert(node, sizer.node, pos-1) return windowdef initialize(): """\ initialization function for the module: returns a wxBitmapButton to be added to the main palette. """ common.widgets['EditNotebook'] = builder common.widgets_from_xml['EditNotebook'] = xml_builder return common.make_object_button('EditNotebook', 'icons/notebook.xpm')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -