http://www.icourse163.org/learn/NJU-1001571005?tid=1001785013#/learn/content?type=detail&id=1002296504
Day2.
>>> import wx
>>> app = wx.App()
>>> frame =wx.Frame(None, title="nihao")
>>> frame.Show(True)
以上为显示出一个框的最简单方法。
另一种方法:新建一个MyApp类
import wx
class MyApp(wx.App):
def OnInit(self):
frame = wx.Frame(None, title = "Hello, World!")
frame.Show()
return True
if __name__ == "__main__":
app = MyApp()
app.MainLoop()
这里,OnInit不是随便取的名字,和init作用很类似。
import wx
class Frame1(wx.Frame):
def __init__(self, superior):
wx.Frame.__init__(self, parent=superior, title="Example", pos=(100,200), size=(200,100))
panel = wx.Panel(self)
text1 = wx.TextCtrl(panel, value="Hello World!", size=(200,100))
if __name__ == "__main__":
app = wx.App()
frame = Frame1(None)
frame.Show(True)
app.MainLoop()
有 wx.Panel(Containers), wx.StaticText(Static Widgets)
EVT_LEFT_UP——抬起鼠标后产生效果
import wx
class Frame1(wx.Frame):
def __init__(self, superior):
wx.Frame.__init__(self, parent=superior, title="Mouse Event", pos=(100,200), size=(600,600))
self.panel = wx.Panel(self)
self.panel.Bind(wx.EVT_LEFT_UP, self.OnClick)
def OnClick(self, event):
posm = event.GetPosition()
wx.StaticText(parent = self.panel, label="Hello, World", pos=(posm.x, posm.y))
if __name__ == "__main__":
app = wx.App()
frame = Frame1(None)
frame.Show(True)
app.MainLoop()
效果是,点一下出现一行“Hello, World!”
以下代码用到了sizer来布局。
操作步骤:
1.创建容器,如panel
2.创建sizer
3.创建子窗口,如wx.TextCtrl,wx.Button
4.用Add添加3中创建的内容
5.调用SetSizer方法
import wx
class Frame1(wx.Frame):
def __init__(self, superior):
wx.Frame.__init__(self, parent=superior, title="Hello World in wxPython")
panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL)
self.text1=wx.TextCtrl(panel, value="Hello, World!", size=(200,180),style=wx.TE_MULTILINE)
sizer.Add(self.text1,0, wx.ALIGN_TOP|wx.EXPAND)
button = wx.Button(panel, label="Click Me")
sizer.Add(button)
panel.SetSizerAndFit(sizer)
panel.Layout()
self.Bind(wx.EVT_BUTTON, self.OnClick,button)
def OnClick(self, text):
self.text1.AppendText("\nHello, World!")
if __name__ == "__main__":
app = wx.App()
frame = Frame1(None)
frame.Show(True)
app.MainLoop()
常用sizer
wx.BoxSizer:用变量控制方框排列方式,水平还是垂直(wx.VERTICAL)
wx.FlexGridSizer
wx.GridSizer
wx.GridBagSizer:更灵活
wx.StaticBoxSizer
Day1.
注意这里的counter前面是类名Dog.counter+=1
注意这里self放置的位置!因为开始声明的变量teacher和students是对象的属性,所以前面要加上self????
Tkinter, PyQt是其他的库
PyQt要放置内存泄漏问题,要会C++,适合更专业人士。
Tkinter python的IDLE就是用这写的。简洁但是慢。
PyGTK windows下使用不太好。代码行数多。
wx入门文档