1. WinForm Library
import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") clr.AddReferenceToFileAndPath("ScintillaNET.dll") import System from System.Windows.Forms import * from System.Drawing import * import ScintillaNET from ScintillaNET import * #WrapMode, IndentView, MarginType # Controls class IpyCtrl(): def init(self): self.dockFill() #self.anchorAll() def SetSize(self,size): self.ctrl.Size = size def SetWidth(self,w): self.ctrl.Width = w; def SetHeight(self,h): self.ctrl.Height = h; def SetLocation(self,point): self.ctrl.Location = point def dockFill(self): self.ctrl.Dock = DockStyle.Fill def dockTop(self): self.ctrl.Dock = DockStyle.Top def dockBottom(self): self.ctrl.Dock = DockStyle.Bottom def dockLeft(self): self.ctrl.Dock = DockStyle.Left def dockRight(self): self.ctrl.Dock = DockStyle.Right def anchorAll(self): self.ctrl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right def Add(self,ctrl): self.ctrl.Controls.Add(ctrl) def SetBackColor(self,color): self.ctrl.BackColor = color def SetBackImage(self,filename): self.ctrl.BackgroundImage = Bitmap(filename) def SetBounds(self,bounds): self.ctrl.Bounds = bounds def Invalidate(self): self.ctrl.Invalidate() def SetTabIndex(self,i): self.ctrl.TabIndex = i def SetFontSize(self,size): self.ctrl.Font = Font(self.ctrl.Font.Name,size,self.ctrl.Font.Style,self.ctrl.Font.Unit) def GetFontSize(self,size): return ctrl.Font.Size def SetToolTip(self,tip): toolTip = ToolTip() toolTip.AutoPopDelay = 5000 toolTip.InitialDelay = 1000 toolTip.ReshowDelay = 500 toolTip.ShowAlways = True toolTip.IsBalloon = True toolTip.SetToolTip(self.ctrl, tip) class IpyButton(IpyCtrl): def __init__(self, text=None, icon=None, handler=None, x=None, y=None, w=None, h=None ): self.ctrl = Button() if text is not None: self.ctrl.Text = text; if icon is not None: self.ctrl.Image = icon if handler is not None: self.ctrl.Click += handler self.ctrl.Left = x if x is not None else 0 self.ctrl.Top = y if y is not None else 0 self.ctrl.Width = w if w is not None else -1 self.ctrl.Height = h if h is not None else -1 #self.ctrl.MinimumSize = Size(80, 22) self.ctrl.Dock = System.Windows.Forms.DockStyle.Fill class IpyComboBox(IpyCtrl): def __init__(self, items=None, select=0, handler=None, x=None, y=None, w=None, h=None ): self.ctrl = ComboBox() if items is not None: for i in items: self.ctrl.Items.Add( i ) if select is not None: self.SelectFirstItem() if handler is not None: self.ctrl.SelectedIndexChanged += handler; self.ctrl.Dock = System.Windows.Forms.DockStyle.Fill self.ctrl.Show() def AddItem(text): self.ctrl.Items.Add(text) def GetSelectedIndex(self): return self.ctrl.SelectedIndex def GetSelectedText(self): return self.ctrl.Items[self.ctrl.SelectedIndex].ToString() def SelectFirstItem(self): if self.ctrl.Items.Count > 0: self.ctrl.SelectedIndex = 0 class IpyListBox(IpyCtrl): def __init__(self, items=None, select=0, handler=None, height=None, fontsize=None): self.ctrl = ListBox() self.ctrl.ScrollAlwaysVisible = True if fontsize is not None: SetFontSize(fontsize); self.ctrl.Dock = System.Windows.Forms.DockStyle.Fill if items is not None: for i in items: self.ctrl.Items.Add( i ) if handler is not None: self.ctrl.SelectedIndexChanged += handler; if height is not None: self.SetHeight(height) def AddItem(self, text): self.ctrl.Items.Add(text) def getSelectedIndex(self): return self.ctrl.SelectedIndex def getSelectedText(self): return self.ctrl.Items[self.ctrl.SelectedIndex].ToString(); def selectFirstItem(self): if listbox.Items.Count > 0: listbox.SelectedIndex = 0 def SetEventHandler(self, handler): if handler is not None: listbox.Click += handler class IpyImageBox(IpyCtrl): def __init__(self,image=None,file=None): self.ctrl = PictureBox() self.ctrl.BorderStyle = BorderStyle.Fixed3D self.ctrl.SizeMode = PictureBoxSizeMode.StretchImage if file is not None: self.ctrl.Image = System.Drawing.Image.FromFile(file) if image is not None: self.ctrl.Image = image def SetImage(self,image): self.ctrl.Image = image class IpyStc(IpyCtrl): def __init__(self,parent=None): self.ctrl = ScintillaNET.Scintilla() self.ctrl.Text = "StyledText" self.ctrl.Parent = parent self.ctrl.Location = Point(0, 0) #self.ctrl.Size = self.Size self.ctrl.Dock = System.Windows.Forms.DockStyle.Fill self.ctrl.WrapMode = WrapMode.None; self.ctrl.IndentationGuides = IndentView.LookBoth nums = self.ctrl.Margins[0] nums.Width = 36 nums.Type = MarginType.Number nums.Sensitive = True nums.Mask = 0 class IpyTextBox(IpyCtrl): def __init__(self,parent=None,size=None): self.ctrl = TextBox() if size is not None: SetFontSize(size) self.ctrl.Dock = System.Windows.Forms.DockStyle.Fill #self.ctrl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right self.ctrl.Multiline = False self.ctrl.ScrollBars = ScrollBars.Both self.ctrl.WordWrap = False self.ctrl.AcceptsReturn = True self.ctrl.AcceptsTab = True self.ctrl.Show() def ClearText(self): self.ctrl.Text = "" def AddText(self,text): self.ctrl.Text += text def EnableMultiLine(): self.ctrl.Multiline = True def EnableWordWrap(): self.ctrl.WordWrap = True def EnableScrollBar(): self.ctrl.ScrollBars = ScrollBars.Both def EnableDrop(): self.ctrl.AllowDrop = True # Container class IpyBorder(IpyCtrl): def __init__(self,parent=None): self.ctrl = ToolStripContainer() self.dockFill() if parent: parent.Controls.Add(self.ctrl) self.top = ToolStrip() self.right = ToolStrip() self.bottom = ToolStrip() self.left = ToolStrip() self.center = Panel() self.ctrl.ContentPanel.Controls.Add(self.center) self.ctrl.ContentPanel.Padding = Padding(10) self.ctrl.TopToolStripPanelVisible = False self.ctrl.RightToolStripPanelVisible = False self.ctrl.BottomToolStripPanelVisible = False self.ctrl.LeftToolStripPanelVisible = False self.ctrl.TopToolStripPanel.Controls.Add(self.top) self.ctrl.RightToolStripPanel.Controls.Add(self.right) self.ctrl.BottomToolStripPanel.Controls.Add(self.bottom) self.ctrl.LeftToolStripPanel.Controls.Add(self.left) def add_top(self,item): self.ctrl.TopToolStripPanelVisible = True self.top.Items.Add(item) def add_right(self,item): self.ctrl.RightToolStripPanelVisible = True self.right.Items.Add(item) def add_bottom(self,item): self.ctrl.BottomToolStripPanelVisible = True self.bottom.Items.Add(item) def add_left(self,item): self.ctrl.LeftToolStripPanelVisible = True self.left.Items.Add(item) def add_center(self,item): self.center.Controls.Add(item) class IpySplit(IpyCtrl): def __init__(self,parent=None,vertical=True,ratio=0.5): self.ctrl = SplitContainer() self.ctrl.Orientation = Orientation.Vertical if vertical else Orientation.Horizontal self.ctrl.SplitterDistance = self.ctrl.ClientSize.Width * ratio self.dockFill(); if parent: parent.Controls.Add(self.ctrl) self.items = [ self.ctrl.Panel1, self.ctrl.Panel2 ] def add_item(self,index,ctrl=None): self.items[index].Controls.Add(ctrl) def add_item1(self,ctrl): self.ctrl.Panel1.Controls.Add(ctrl) def add_item2(self,ctrl): self.ctrl.Panel2.Controls.Add(ctrl) class IpyTab(IpyCtrl): def __init__(self,parent=None): self.ctrl = TabControl() self.dockFill(); if parent: parent.Controls.Add(self.ctrl) def add_item(self,text,ctrl=None): tab = TabPage() tab.Text = text; tab.Padding = Padding(10); if ctrl: tab.Controls.Add(ctrl); self.ctrl.Controls.Add(tab); class IpyTable(IpyCtrl): def __init__(self,row,col,parent=None): self.ctrl = TableLayoutPanel() self.table = self.ctrl self.table.Name = "" self.table.RowCount = row self.table.ColumnCount = col self.table.Location = Point(10, 10) self.ctrl.Dock = System.Windows.Forms.DockStyle.Fill def SetColumnSize( self, widths ): for i in range(self.table.ColumnCount): length = len(widths) if i < widths[i] else 0 if length == 0: style = ColumnStyle(SizeType.AutoSize) elif length > 0: style = ColumnStyle(SizeType.Percent, length) elif length < 0: style = ColumnStyle(SizeType.Absolute, -length) self.table.ColumnStyles.Add(style) def SetRowSize( self, heights ): for i in range(self.table.RowCount): length = len(heights) if i < heights[i] else 0 if length == 0: style = RowStyle(SizeType.AutoSize) elif length > 0: style = RowStyle(SizeType.Percent, length) elif length < 0: style = RowStyle(SizeType.Absolute, -length) self.table.RowStyles.Add(style) def Add( self, row, col, ctrl ): self.table.Controls.Add( ctrl, col, row ) def SetColumnSpan( self, row, col, num ): ctrl = self.table.GetControlFromPosition( col, row ) if ctrl != None: self.table.SetColumnSpan(ctl, num) def SetRowSpan( row, col, num ): ctrl = self.table.GetControlFromPosition( col, row ) if ctrl != None: sekf,table.SetRowSpan(ctl, num) class IpyVBox(IpyCtrl): def __init__(self,parent=None): self.ctrl = TableLayoutPanel() self.table = self.ctrl self.table.Name = "" self.table.RowCount = 0 self.table.ColumnCount = 1 self.table.Location = Point(10, 10) self.table.Dock = System.Windows.Forms.DockStyle.Fill def Add( self, ctrl, height=0): self.table.RowCount += 1 self.table.Controls.Add( ctrl, 0, self.table.RowCount-1 ) if height == 0: style = RowStyle(SizeType.Percent, 100) elif height < 0: style = ColumnStyle(SizeType.AutoSize) else: style = RowStyle(SizeType.Absolute, height) ''' if height == 0: style = RowStyle(SizeType.AutoSize) elif height > 0: style = RowStyle(SizeType.Percent, height) else: style = RowStyle(SizeType.Absolute, -height) ''' self.table.RowStyles.Add(style) class IpyHBox(IpyCtrl): def __init__(self,parent=None): self.ctrl = TableLayoutPanel() self.table = self.ctrl self.table.Name = "" self.table.RowCount = 1 self.table.ColumnCount = 0 self.table.Location = Point(10, 10) self.table.Dock = System.Windows.Forms.DockStyle.Fill def Add( self, ctrl, width=0 ): self.table.ColumnCount += 1 self.table.Controls.Add( ctrl, self.table.ColumnCount-1, 0 ) if width == 0: style = ColumnStyle(SizeType.Percent, 100) elif width < 0: style = ColumnStyle(SizeType.AutoSize) else: style = ColumnStyle(SizeType.Absolute, width) ''' if width == 0: style = ColumnStyle(SizeType.AutoSize) elif width > 0: style = ColumnStyle(SizeType.Percent, width) else: style = ColumnStyle(SizeType.Absolute, -width) ''' self.table.ColumnStyles.Add(style) # Windows Frame class IpyMenuBar(IpyCtrl): def __init__(self,parent=None): self.menubar = MenuStrip() if parent: parent.Controls.Add(self.menubar) def add_menu(self,name,parent=None): self.menu = ToolStripMenuItem() self.menu.Name = name self.menu.Text = name if not parent: parent = self.menubar parent.Items.Add(self.menu) return self.menu def add_item(self,name,handler=None,icon=None,parent=None): item = ToolStripMenuItem() item.Name = name item.Text = name if handler: item.Click += handler if icon: item.Image = icon if not parent: parent = self.menu parent.DropDownItems.Add(item) return item class IpyToolBar(IpyCtrl): def __init__(self,parent=None,size=16): self.toolbar = ToolStrip() self.toolbar.ImageScalingSize = Size(size, size); if parent: parent.Controls.Add(self.toolbar) def add_label(self,text): self.toolbar.Items.Add(ToolStripLabel(text)) def add_separater(self): self.toolbar.Items.Add(ToolStripSeparator()) def add_button(self,text=None,handler=None,icon=None,): button = ToolStripButton() if text: button.Text = text if icon: button.Image = icon if handler: button.Click += handler button.TextImageRelation = TextImageRelation.ImageAboveText self.toolbar.Items.Add(button) class IpyStatusBar(IpyCtrl): def __init__(self,parent=None,size=32): self.status = StatusBar() self.status.ShowPanels = True self.panels = 0 if parent: parent.Controls.Add(self.status) def add_panel(self,text): self.status.Panels.Add(text); self.status.Panels[self.panels].AutoSize = StatusBarPanelAutoSize.Spring self.status.Panels[self.panels].BorderStyle = StatusBarPanelBorderStyle.Raised self.panels += 1 def set_text(self,index,text): self.status.Panels[index].Text = text def set_icon(self,index,icon): self.status.Panels[index].Icon = icon if __name__ == "__main__": import wf_icon class IpyForm(Form): def __init__(self): import wf_icon self.Text = 'Text to Pcap' self.Size = Size(480,320) self.CenterToScreen() self.FormClosing += FormClosingEventHandler(self.on_close) layout = IpyVBox() tool = IpyHBox() tool.Add(IpyListBox(("apple","grape","pear","melon"),handler=self.on_combo,height=48).ctrl,-1) tool.Add(IpyComboBox(("apple","grape"),handler=self.on_combo).ctrl,-1) tool.Add(IpyTextBox().ctrl) tool.Add(IpyButton(icon=wf_icon.GetExitImage(),handler=self.on_exit).ctrl,48) tool.Add(IpyImageBox(file='D:/Lenna.png').ctrl) layout.Add(tool.ctrl,48) layout.Add(IpyStc().ctrl) self.Controls.Add( layout.ctrl ) def on_close(self,sender,event): rv = MessageBox.Show("Do you want to close ?", "Warning", MessageBoxButtons.YesNo ) if rv == System.Windows.Forms.DialogResult.Yes: event.Cancel = False else: event.Cancel = True def on_exit(self,sender,event): self.Close() def on_combo(self,sender,event): print(sender.Items[sender.SelectedIndex].ToString()) Application.Run(IpyForm())