📄 panel.py
字号:
#return wx.Panel.GetBestSize(self.widget) return wx.ScrolledWindow.GetBestSize(self.widget) self.widget.GetBestSize = GetBestSize def set_sizer(self, sizer): super(EditPanel, self).set_sizer(sizer) if self.top_sizer and self.top_sizer.widget and self.widget: self.sizer.set_item(self.pos, size=self.widget.GetBestSize()) def set_scrollable(self, value): super(EditPanel, self).set_scrollable(value) if self.scrollable: # 2003-06-26 ALB: change the "class name", to allow code generation # for a wxScrolledWindow (see Tree.Node.write and # common.class_names usage in xml_parse.py) self._classname = 'EditScrolledWindow' else: self._classname = self.__class__.__name__ def popup_menu(self, event): if self.widget: if not self._rmenu: COPY_ID, REMOVE_ID, CUT_ID = [wx.NewId() for i in range(3)] self._rmenu = misc.wxGladePopupMenu(self.name) misc.append_item(self._rmenu, REMOVE_ID, _('Remove\tDel'), wx.ART_DELETE) misc.append_item(self._rmenu, COPY_ID, _('Copy\tCtrl+C'), wx.ART_COPY) misc.append_item(self._rmenu, CUT_ID, _('Cut\tCtrl+X'), wx.ART_CUT) def bind(method): return lambda e: misc.wxCallAfter(method) wx.EVT_MENU(self.widget, REMOVE_ID, bind(self.remove)) wx.EVT_MENU(self.widget, COPY_ID, bind(self.clipboard_copy)) wx.EVT_MENU(self.widget, CUT_ID, bind(self.clipboard_cut)) # paste PASTE_ID = wx.NewId() misc.append_item(self._rmenu, PASTE_ID, _('Paste\tCtrl+V'), wx.ART_PASTE) wx.EVT_MENU(self.widget, PASTE_ID, bind(self.clipboard_paste)) PREVIEW_ID = wx.NewId() self._rmenu.AppendSeparator() misc.append_item(self._rmenu, PREVIEW_ID, _('Preview')) wx.EVT_MENU(self.widget, PREVIEW_ID, bind(self.preview_parent)) self.setup_preview_menu() self.widget.PopupMenu(self._rmenu, event.GetPosition()) def clipboard_paste(self, *args): import clipboard, xml_parse size = self.widget.GetSize() try: if clipboard.paste(self, None, 0): common.app_tree.app.saved = False self.widget.SetSize(size) except xml_parse.XmlParsingError, e: print _('\nwxGlade-WARNING: only sizers can be pasted here') # end of class EditPanelclass EditTopLevelPanel(PanelBase, TopLevelBase): _is_toplevel = False # used to avoid to appear in the "Top Window" property # of the app def __init__(self, name, parent, id, property_window, klass='wxPanel', show=True, style=wx.TAB_TRAVERSAL): TopLevelBase.__init__(self, name, klass, parent, id, property_window, show=show, has_title=False) PanelBase.__init__(self, style) self.base = 'wxPanel' self.skip_on_size = False def create_widget(self): win = wx.Frame(common.palette, -1, misc.design_title(self.name), size=(400, 300)) import os icon = wx.EmptyIcon() xpm = os.path.join(common.wxglade_path, 'icons', 'panel.xpm') icon.CopyFromBitmap(misc.get_xpm_bitmap(xpm)) win.SetIcon(icon) #self.widget = wx.Panel(win, self.id, style=0) self.widget = wx.ScrolledWindow(win, self.id, style=0) wx.EVT_ENTER_WINDOW(self.widget, self.on_enter) self.widget.GetBestSize = self.get_widget_best_size #self.widget.SetSize = win.SetSize wx.EVT_CLOSE(win, self.hide_widget) if wx.Platform == '__WXMSW__': win.CentreOnScreen() def show_widget(self, yes): oldval = self.get_size() super(EditTopLevelPanel, self).show_widget(yes) if self.widget: if yes and not self.properties['size'].is_active() \ and self.top_sizer: self.top_sizer.fit_parent() self.widget.GetParent().Show(yes) self.set_size(oldval) def hide_widget(self, *args): super(EditTopLevelPanel, self).hide_widget(*args) self.widget.GetParent().Hide() def set_name(self, name): super(EditTopLevelPanel, self).set_name(name) if self.widget: self.widget.GetParent().SetTitle(misc.design_title(self.name)) def delete(self): win = None if self.widget: win = self.widget.GetParent() super(EditTopLevelPanel, self).delete() if win is not None: win.Destroy() def on_size(self, event): w, h = event.GetSize() if self.skip_on_size: self.skip_on_size = False return super(EditTopLevelPanel, self).on_size(event) self.skip_on_size = True if self.widget.GetParent().GetClientSize() != (w, h): self.widget.GetParent().SetClientSize((w+2, h+2)) def set_scrollable(self, value): super(EditTopLevelPanel, self).set_scrollable(value) if self.scrollable: # 2003-06-26 ALB: change the "class name", to allow code generation # for a wxScrolledWindow (see Tree.Node.write and # common.class_names usage in xml_parse.py) self._classname = 'EditTopLevelScrolledWindow' else: self._classname = self.__class__.__name__ # end of class EditTopLevelPanel def builder(parent, sizer, pos, number=[1]): """\ factory function for EditPanel objects. """ name = 'panel_%d' % number[0] while common.app_tree.has_name(name): number[0] += 1 name = 'panel_%d' % number[0] panel = EditPanel(name, parent, wx.NewId(), sizer, pos, common.property_panel) node = Tree.Node(panel) panel.node = node panel.set_option(1) panel.set_flag("wxEXPAND") panel.show_widget(True) common.app_tree.insert(node, sizer.node, pos-1) sizer.set_item(panel.pos, 1, wx.EXPAND)def xml_builder(attrs, parent, sizer, sizeritem, pos=None): """\ factory to build EditPanel 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") panel = EditPanel(name, parent, wx.NewId(), sizer, pos, common.property_panel, True, style=0) sizer.set_item(panel.pos, option=sizeritem.option, flag=sizeritem.flag, border=sizeritem.border) node = Tree.Node(panel) panel.node = node if pos is None: common.app_tree.add(node, sizer.node) else: common.app_tree.insert(node, sizer.node, pos-1) return paneldef xml_toplevel_builder(attrs, parent, sizer, sizeritem, pos=None): from xml_parse import XmlParsingError try: label = attrs['name'] except KeyError: raise XmlParsingError, _("'name' attribute missing") panel = EditTopLevelPanel(label, parent, wx.NewId(), common.property_panel, show=False, style=0) node = Tree.Node(panel) panel.node = node common.app_tree.add(node) return paneldef initialize(): """\ initialization function for the module: returns a wxBitmapButton to be added to the main palette. """ common.widgets['EditPanel'] = builder common.widgets_from_xml['EditPanel'] = xml_builder #common.widgets['EditScrolledWindow'] = builder common.widgets_from_xml['EditScrolledWindow'] = xml_builder common.widgets_from_xml['EditTopLevelPanel'] = xml_toplevel_builder common.widgets_from_xml['EditTopLevelScrolledWindow'] = \ xml_toplevel_builder from tree import WidgetTree import os.path icon = os.path.join(common.wxglade_path, 'icons/panel.xpm') WidgetTree.images['EditTopLevelPanel'] = icon WidgetTree.images['EditScrolledWindow'] = icon WidgetTree.images['EditTopLevelScrolledWindow'] = icon # these are for backwards compatibility (may be removed someday...) common.widgets_from_xml['SplitterPane'] = xml_builder WidgetTree.images['SplitterPane'] = os.path.join(common.wxglade_path, 'icons/panel.xpm') common.widgets_from_xml['NotebookPane'] = xml_builder WidgetTree.images['NotebookPane'] = os.path.join(common.wxglade_path, 'icons/panel.xpm') return common.make_object_button('EditPanel', 'icons/panel.xpm', tip='Add a Panel/ScrolledWindow')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -