wxpython新手向教程

∥☆過路亽.° 提交于 2020-10-22 11:22:52

wxpython教程

  1. 手写wxpython会有各种问题,可以去下载wxformbuilder布局管理器
    然后去百度一下这个布局管理器的教程,这里太多了不多赘述。
  2. 两种创建窗口方式:class MyFrame(wx.Frame)和class MyPanel(wx.Panel)来继承wx.Frame和wx.Panel,但是用wxformbuilder来创建布局和窗口会自动帮忙写好。
    继承wx.Frame的结尾是app=wx.App() frm=MyFrame() frm.Show() app.MainLoop()Show中的参数为True/False,False则不可见窗口
    继承wx.Panel的结尾是app = wx.App() frame = wx.Frame(None) panel = MyPanel(frame) frame.Show() app.MainLoop()
    MainLoop为每个继承类都要填写,否则无法运行


基本的控件TextCtrl,Button,StaticText

TextCtrl

基本的属性Clear()(清空TextCtrl中的内容),AppendText()(在末尾添加文本)
排列布局在wxformbuilder中都有举几个列子(wx.TE_MULTILNE为可以进行多行输入,wx.TE_LEFT为左对齐,可以用 | 来进行多种styel组合的方式)

Button

wx.Button来创建按钮
按钮调用函数
可以这么写self.Button.Bind(self,self.func)但是在wxformbuilder进行设置事件,它会写好的

StaticText

可以利用self.tc = wx.StaticText(self, 0,’ str ')
第三个参数为标签内容

以上都是在 class MyPanel(wx.Panel):的理论上进行的,控件最好都是在Panel上进行控制和编写!!

panel的创建方式wx.Panel.init(self, parent)

frame的创建方式 wx.Frame.init(self,None,title=“str”)

以上都可以用wxformbuilder来完成!

下面插入我的一段作业代码``
#-- coding: utf-8 --
import wx
import wx.xrc
import time
import random
import threading
‘’‘利用threading解决while死循环会卡死程序的问题,’’’






###########################################################################
Class MyPanel1
###########################################################################
dict = {1: ‘name’,
2: ‘name’,
3: ‘name’,
4: ‘name’,
5: 'name‘,
6: ‘name’,
7: ‘name’,
8: ‘name’,
9: ‘name’,
10: ‘name’,
11: 'name’,
12: ‘name’,
13: ‘name’,
14: ‘name’,
15: ‘name’,
16: ‘name’,
17: ‘name’,
18: ‘name’,
19: ‘name’,
20: ‘name’,
21: ‘name’,
22: ‘name’,
23: ‘name’,
24: ‘name’,
25: ‘name’,
26: ‘name’,
27: ‘name’,
28: ‘name’}





























class MyPanel(wx.Panel):

def __init__(self, parent):
    wx.Panel.__init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 300),
                      style=wx.TAB_TRAVERSAL)
    self.Sure = False
    bSizer1 = wx.BoxSizer(wx.VERTICAL)

    self.m_staticText1 = wx.StaticText(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
    self.m_staticText1.Wrap(-1)
    bSizer1.Add(self.m_staticText1, 1, wx.ALL | wx.EXPAND, 5)

    gSizer1 = wx.GridSizer(0, 2, 0, 0)

    self.StartButton = wx.Button(self, wx.ID_ANY, u"Start", wx.DefaultPosition, wx.DefaultSize, 0)
    gSizer1.Add(self.StartButton, 0, wx.ALL, 5)

    self.StopButton = wx.Button(self, wx.ID_ANY, u"Stop", wx.DefaultPosition, wx.DefaultSize, 0)
    gSizer1.Add(self.StopButton, 0, wx.ALL | wx.ALIGN_RIGHT, 5)

    bSizer1.Add(gSizer1, 1, wx.EXPAND, 5)

    self.SetSizer(bSizer1)
    self.Layout()

    # Connect Events
    self.StartButton.Bind(wx.EVT_BUTTON, self.StartButtonOnButtonClick)
    self.StopButton.Bind(wx.EVT_BUTTON, self.StopButtonOnButtonClick)

def __del__(self):
    pass

# Virtual event handlers, overide them in your derived class
def StartButtonOnButtonClick(self, event):
    self.Sure = True

def StopButtonOnButtonClick(self, event):
    self.Sure = False

def Round(self):
    self.m_staticText1.SetLabel('现在开始抽取')
    while True:
        if self.Sure == True:
            self.m_staticText1.SetLabel('{0}'.format(dict[random.randint(1,28)]))
            time.sleep(0.1)

app = wx.App()
frame = wx.Frame(None)
panel = MyPanel(frame)
frame.Show()
task=threading.Thread(target=panel.Round)
task.start()
app.MainLoop()`





易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!