📄 frame.py
字号:
szr.Add(prop['style'].panel, 0, wx.EXPAND) panel.SetAutoLayout(True) panel.SetSizer(szr) szr.Fit(panel) self.notebook.AddPage(panel, 'Widget') w, h = panel.GetClientSizeTuple() panel.SetScrollbars(5, 5, int(math.ceil(w/5.0)), int(math.ceil(h/5.0))) def get_menubar(self): return self.menubar is not None def set_menubar(self, value): if value: from menubar import EditMenuBar self.menubar = EditMenuBar(self.name + '_menubar', 'wxMenuBar', self, common.property_panel) self.menubar.node = Tree.Node(self.menubar) common.app_tree.add(self.menubar.node, self.node) if self.widget: self.menubar.show_widget(True) self.menubar.show_properties() else: self.menubar = self.menubar.remove() self.show_properties(None) def get_statusbar(self): return self.statusbar is not None def set_statusbar(self, value): if value: self.statusbar = EditStatusBar(self, common.property_panel) if self.widget: self.statusbar.show_widget(True) self.statusbar.show_properties() else: self.statusbar = self.statusbar.remove() self.show_properties(None) if self.widget: # this is needed at least on win32 wx.PostEvent(self.widget, wx.SizeEvent(self.widget.GetSize(), self.widget.GetId())) def get_toolbar(self): return self.toolbar is not None def set_toolbar(self, value): if value: from toolbar import EditToolBar self.toolbar = EditToolBar(self.name + '_toolbar', 'wxToolBar', self, common.property_panel) self.toolbar.node = Tree.Node(self.toolbar) common.app_tree.add(self.toolbar.node, self.node) if self.widget: self.toolbar.show_widget(True) self.toolbar.show_properties() else: self.toolbar = self.toolbar.remove() self.show_properties(None) def get_style(self): retval = [0] * len(self.style_pos) try: if self.style == wx.DEFAULT_FRAME_STYLE: retval[0] = 1 else: for i in range(len(self.style_pos)): if self.style & self.style_pos[i]: retval[i] = 1 retval[0] = 0 except AttributeError: pass return retval def set_style(self, value): value = self.properties['style'].prepare_value(value) style = 0 for v in range(len(value)): if value[v]: style |= self.style_pos[v] self.style = style if self.widget: self.widget.SetWindowStyleFlag(style) def remove(self, *args): if self.menubar: self.menubar = self.menubar.remove(gtk_do_nothing=True) if self.statusbar: self.statusbar = self.statusbar.remove(do_nothing=True) if self.toolbar: self.toolbar = self.toolbar.remove(do_nothing=True) TopLevelBase.remove(self, *args) def get_icon(self): # is a string that holds the filename (for example: icon.png) return self.icon def set_icon(self, value): self.icon = value.strip() if self.widget: if self.icon and not (self.icon.startswith('var:') or self.icon.startswith('code:')): # setting icon icon = misc.get_relative_path(self.icon) bmp = wx.Bitmap(icon, wx.BITMAP_TYPE_ANY) if not bmp.Ok(): self.set_icon("") else: icon = wx.EmptyIcon() icon.CopyFromBitmap(bmp) self.widget.SetIcon(icon) else: # removing icon icon = wx.EmptyIcon() import os xpm = os.path.join(common.wxglade_path, 'icons', 'frame.xpm') icon.CopyFromBitmap(misc.get_xpm_bitmap(xpm)) self.widget.SetIcon(icon) def get_centered(self): return self.centered def set_centered(self, value): try: self.centered = bool(int(value)) except ValueError: pass def get_sizehints(self): return self.sizehints def set_sizehints(self, value): try: self.sizehints = bool(int(value)) except ValueError: pass# end of class EditFrameclass EditMDIChildFrame(EditFrame): _is_toplevel = False # used to avoid to appear in the "Top Window" property # of the app def __init__(self, *args, **kwds): EditFrame.__init__(self, *args, **kwds) del self.properties['statusbar'] self.base = 'wxFrame'# end of class EditMDIChildFrame def builder(parent, sizer, pos, number=[0]): """\ factory function for EditFrame objects. """ class Dialog(wx.Dialog): def __init__(self): wx.Dialog.__init__(self, None, -1, _('Select frame class')) if common.app_tree.app.get_language().lower() == 'xrc': self.klass = 'wxFrame' else: if not number[0]: self.klass = 'MyFrame' else: self.klass = 'MyFrame%s' % number[0] number[0] += 1 self.base = 0 base_prop = RadioProperty(self, 'base class', self, ['wxFrame', 'wxMDIChildFrame'], label=_("base class")) klass_prop = TextProperty(self, 'class', self, label=_("class")) szr = wx.BoxSizer(wx.VERTICAL) szr.Add(base_prop.panel, 0, wx.ALL|wx.EXPAND, 5) szr.Add(klass_prop.panel, 0, wx.EXPAND) btnbox = wx.BoxSizer(wx.HORIZONTAL) btnOK = wx.Button(self, wx.ID_OK, _('OK')) btnCANCEL = wx.Button(self, wx.ID_CANCEL, _('Cancel')) btnbox.Add(btnOK, 0, wx.ALL, 3) btnbox.Add(btnCANCEL, 0, wx.ALL, 3) btnOK.SetFocus() szr.Add(btnbox, 0, wx.ALL|wx.ALIGN_CENTER, 3) self.SetAutoLayout(True) self.SetSizer(szr) szr.Fit(self) self.CenterOnScreen() def undo(self): if number[0] > 0: number[0] -= 1 def __getitem__(self, value): if value == 'class': def set_klass(c): self.klass = c return (lambda : self.klass, set_klass) else: def set_base(b): self.base = b return (lambda : self.base, set_base) # end of inner class dialog = Dialog() # Check if the user hit Cancel, if so then bail out if dialog.ShowModal() == wx.ID_CANCEL: # restore state dialog.undo() # clean up resources dialog.Destroy() return label = 'frame_%d' % (number[0] or 1) while common.app_tree.has_name(label): number[0] += 1 label = 'frame_%d' % number[0] if dialog.base == 0: base_class = EditFrame else: base_class = EditMDIChildFrame frame = base_class(label, parent, wx.NewId(), label, common.property_panel, klass=dialog.klass) node = Tree.Node(frame) frame.node = node common.app_tree.add(node) frame.show_widget(True) # add a default vertical sizer to the frame import edit_sizers edit_sizers._builder(frame, None, 0) # now select the frame's node in the tree common.app_tree.select_item(node) dialog.Destroy() if wx.Platform == '__WXMSW__': #frame.widget.CenterOnScreen() frame.widget.Raise()def _make_builder(base_class): def xml_builder(attrs, parent, sizer, sizeritem, pos=None): from xml_parse import XmlParsingError try: label = attrs['name'] except KeyError: raise XmlParsingError, _("'name' attribute missing") frame = base_class(label, parent, wx.NewId(), "", common.property_panel, show=False) node = Tree.Node(frame) frame.node = node common.app_tree.add(node) return frame return xml_builder ## def xml_builder(attrs, parent, sizer, sizeritem, pos=None):## """\## factory to build EditFrame objects from an xml file## """## from xml_parse import XmlParsingError## try: label = attrs['name']## except KeyError: raise XmlParsingError, _("'name' attribute missing")## frame = EditFrame(label, parent, wx.NewId(), label, common.property_panel,## show=False)## node = Tree.Node(frame)## frame.node = node## common.app_tree.add(node)## return framedef statusbar_xml_builder(attrs, parent, sizer, sizeritem, pos=None): """\ factory to build EditStatusBar objects from an xml file """ parent.statusbar.set_fields([]) name = attrs.get('name') if name: parent.statusbar.set_name(name) parent.statusbar.name_prop.set_value(name) return parent.statusbardef initialize(): """\ initialization function for the module: returns a wx.BitmapButton to be added to the main palette. """ cwx = common.widgets_from_xml cwx['EditStatusBar'] = statusbar_xml_builder cwx['EditFrame'] = _make_builder(EditFrame) cwx['EditMDIChildFrame'] = _make_builder(EditMDIChildFrame) common.widgets['EditFrame'] = builder # add statusbar icon to WidgetTree from tree import WidgetTree import os.path WidgetTree.images['EditStatusBar'] = os.path.join(common.wxglade_path, 'icons/statusbar.xpm') WidgetTree.images['EditMDIChildFrame'] = os.path.join(common.wxglade_path, 'icons/frame.xpm') return common.make_object_button('EditFrame', 'icons/frame.xpm', 1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -