📄 panel.py
字号:
# panel.py: wxPanel objects# $Id: panel.py,v 1.38 2007/08/07 12:15:21 agriggio Exp $## Copyright (c) 2002-2007 Alberto Griggio <agriggio@users.sourceforge.net># License: MIT (see license.txt)# THIS PROGRAM COMES WITH NO WARRANTYimport wximport common, miscfrom tree import Treefrom widget_properties import *from edit_windows import ManagedBase, TopLevelBaseclass PanelBase(object): _custom_base_classes = True def __init__(self, style=wx.TAB_TRAVERSAL): """\ Class to handle wxPanel objects """ super(PanelBase, self).__init__() self.top_sizer = None # sizer to handle the layout of children # ------ ALB 2005-11-19: option to disable custom class code generation self.no_custom_class = False self.access_functions['no_custom_class'] = (self.get_no_custom_class, self.set_no_custom_class) self.properties['no_custom_class'] = CheckBoxProperty( self, 'no_custom_class', label=_("Don't generate code for this custom class")) # ------ self.style = style self.access_functions['style'] = (self.get_style, self.set_style) self.style_pos = [wx.SIMPLE_BORDER, wx.DOUBLE_BORDER, wx.SUNKEN_BORDER, wx.RAISED_BORDER, wx.STATIC_BORDER, wx.NO_BORDER, wx.NO_3D, wx.TAB_TRAVERSAL, wx.WANTS_CHARS, wx.NO_FULL_REPAINT_ON_RESIZE, wx.FULL_REPAINT_ON_RESIZE, wx.CLIP_CHILDREN] style_labels = ('#section#' + _('Style'), 'wxSIMPLE_BORDER', 'wxDOUBLE_BORDER', 'wxSUNKEN_BORDER', 'wxRAISED_BORDER', 'wxSTATIC_BORDER', 'wxNO_BORDER', 'wxNO_3D', 'wxTAB_TRAVERSAL', 'wxWANTS_CHARS', 'wxNO_FULL_REPAINT_ON_RESIZE', 'wxFULL_REPAINT_ON_RESIZE', 'wxCLIP_CHILDREN') self.properties['style'] = CheckListProperty(self, 'style', None, style_labels) self.access_functions['scrollable'] = (self.get_scrollable, self.set_scrollable) self.scrollable = False self.properties['scrollable'] = CheckBoxProperty( self, 'scrollable', None, label=_("scrollable")) self.scroll_rate = (10, 10) self.access_functions['scroll_rate'] = (self.get_scroll_rate, self.set_scroll_rate) self.properties['scroll_rate'] = TextProperty(self, 'scroll_rate', None, can_disable=True, label=_("scroll_rate")) def finish_widget_creation(self): super(PanelBase, self).finish_widget_creation( sel_marker_parent=self.widget) if not self.scrollable: self.widget.SetScrollRate(0, 0) else: self.widget.SetScrollRate(*self.scroll_rate) # this must be done here since ManagedBase.finish_widget_creation # normally sets EVT_LEFT_DOWN to update_wiew if not self.widget.Disconnect(-1, -1, wx.wxEVT_LEFT_DOWN): print _("EditPanel: Unable to disconnect the event hanlder") wx.EVT_LEFT_DOWN(self.widget, self.drop_sizer) #wx.EVT_SCROLLWIN(self.widget, self._update_markers) def _update_markers(self, event): def get_pos(): x, y = self.widget.GetPosition() xx, yy = self.widget.GetViewStart() return x+xx, y+yy old = self.widget.GetPosition self.widget.GetPosition = get_pos #print self.widget, self.sel_marker.owner self.sel_marker.update() self.widget.GetPosition = old event.Skip() def create_properties(self): super(PanelBase, self).create_properties() panel = wx.ScrolledWindow(self.notebook, -1, style=wx.TAB_TRAVERSAL) panel.SetScrollRate(5, 5) szr = wx.BoxSizer(wx.VERTICAL) self.properties['no_custom_class'].display(panel) szr.Add(self.properties['no_custom_class'].panel, 0, wx.EXPAND) label = self.properties['no_custom_class'].cb label.SetToolTip( wx.ToolTip(_('If this is a custom class, setting this property ' 'prevents wxGlade\nfrom generating the class definition' ' code'))) self.properties['style'].display(panel) szr.Add(self.properties['style'].panel, 0, wx.EXPAND) self.properties['scrollable'].display(panel) szr.Add(self.properties['scrollable'].panel, 0, wx.EXPAND) self.properties['scroll_rate'].display(panel) szr.Add(self.properties['scroll_rate'].panel, 0, wx.EXPAND) panel.SetAutoLayout(True) panel.SetSizer(szr) szr.Fit(panel) self.notebook.AddPage(panel, 'Widget') def on_enter(self, event): if not self.top_sizer and common.adding_sizer: self.widget.SetCursor(wx.CROSS_CURSOR) else: self.widget.SetCursor(wx.STANDARD_CURSOR) def set_sizer(self, sizer): self.top_sizer = sizer if self.top_sizer and self.top_sizer.widget and self.widget: self.widget.SetAutoLayout(True) self.widget.SetSizer(self.top_sizer.widget) self.widget.Layout() elif self.top_sizer is None and self.widget: self.widget.SetSizer(None) def drop_sizer(self, event): if self.top_sizer or not common.adding_sizer: self.on_set_focus(event) # default behaviour: call show_properties return self.widget.SetCursor(wx.NullCursor) common.widgets[common.widget_to_add](self, None, None) common.adding_widget = common.adding_sizer = False common.widget_to_add = None common.app_tree.app.saved = False def get_widget_best_size(self): if self.top_sizer and self.widget.GetSizer(): self.top_sizer.fit_parent() return self.widget.GetSize() return wx.ScrolledWindow.GetBestSize(self.widget) def get_style(self): retval = [0] * len(self.style_pos) try: for i in range(len(self.style_pos)): if self.style & self.style_pos[i]: retval[i] = 1 except AttributeError: pass return retval def set_style(self, value): value = self.properties['style'].prepare_value(value) self.style = 0 for v in range(len(value)): if value[v]: self.style |= self.style_pos[v] def get_scrollable(self): return self.scrollable def set_scrollable(self, value): self.scrollable = bool(int(value)) if self.scrollable: if self.klass == 'wxPanel': self.klass = 'wxScrolledWindow' self.klass_prop.set_value(self.klass) else: if self.klass == 'wxScrolledWindow': self.klass = 'wxPanel' self.klass_prop.set_value(self.klass) if not self.widget: return if self.scrollable: self.properties['scroll_rate'].toggle_active(True) self.widget.SetScrollRate(*self.scroll_rate) else: self.properties['scroll_rate'].toggle_active(False) self.widget.SetScrollRate(0, 0) def get_scroll_rate(self): return '%d, %d' % self.scroll_rate def set_scroll_rate(self, value): invalid = False try: srx, sry = [int(t) for t in value.split(',', 1)] if srx < 0 or sry < 0: invalid = True except: invalid = True if invalid: self.properties['scroll_rate'].set_value(self.get_scroll_rate()) return self.scroll_rate = srx, sry if self.widget: self.widget.SetScrollRate(srx, sry) 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 PanelBase class EditPanel(PanelBase, ManagedBase): def __init__(self, name, parent, id, sizer, pos, property_window, show=True, style=wx.TAB_TRAVERSAL): """\ Class to handle wxPanel objects """ ManagedBase.__init__(self, name, 'wxPanel', parent, id, sizer, pos, property_window, show=show) PanelBase.__init__(self, style) def create_widget(self): #self.widget = wx.Panel(self.parent.widget, self.id, style=0) self.widget = wx.ScrolledWindow(self.parent.widget, self.id, style=0) wx.EVT_ENTER_WINDOW(self.widget, self.on_enter) self.widget.GetBestSize = self.get_widget_best_size if self.sizer.is_virtual(): def GetBestSize(): if self.widget and self.widget.GetSizer(): return self.widget.GetSizer().GetMinSize()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -