wxPython:一套Python语言的GUI工具箱_wxpython setsizerandfit

81 阅读3分钟

 


**基本组件**


![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9e531c7841034655a80594dcae09a661~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1770802558&x-signature=QCNrTAZ2JvZFBcGJXN%2Fd%2FGN8mZs%3D)


 


面板(Panel)


所有组件都要放在面板上。(每个控件都有一个参数parent,就是给它留的。当然它自己的parent是wx.Frame实例)



wx.Panel(parent, id=ID_ANY, pos=DefaultPosition,      size=DefaultSize, style=TAB_TRAVERSAL, name=PanelNameStr)


 


 


静态文本(StaticText)



wx.StaticText(parent, id=ID_ANY,label="", pos=DefaultPosition,      size=DefaultSize, style=0, name=StaticTextNameStr)


 


文本输入框(TextCtrl)



wx.TextCtrl(parent, id=ID_ANY, value="", pos=DefaultPosition,size=DefaultSize,     style=0, validator=DefaultValidator, name=TextCtrlNameStr)


 


 


按钮(Button)


基础按钮控件。



wx.Button(parent, id=ID_ANY, label="", pos=DefaultPosition, size=DefaultSize,     style=0, validator=DefaultValidator, name=ButtonNameStr)


 


 


列表框(ListCtrl)


展示完整的表格文本。



wx.ListCtrl(parent, id=ID_ANY, pos=DefaultPosition, size=DefaultSize, style=LC_ICON,     validator=DefaultValidator, name=ListCtrlNameStr)


 


 


下拉选择框(Choice)


创建选项,用于选择其中之一。



wx.Choice(parent, id=ID_ANY, pos=DefaultPosition, size=DefaultSize, choices=[ ],      style=0, validator=DefaultValidator, name=ChoiceNameStr)


 


 


 


字体控制(Font)


创建字体,为其它控件的文字服务。



wx.Font(pointSize, family, style, weight, underline=False ,      faceName="", encoding=FONTENCODING_DEFAULT)


 


 


容器(Boxsizer)


一个为其他组件合理分配空间以使界面看起来更整洁的容器组件。



wx.BoxSizer(orient=HORIZONTAL)


常用方法:boxSizer.Add()、


                   panel.SetSizerAndFit(boxSizer)


 


 


图标(Icon)


给应用程序设定一个图标Logo。



wx.Icon(name, type=BITMAP_TYPE_ANY, desiredWidth=-1, desiredHeight=-1)


 


 


上述所述组件的简单代码实现


 



import wx

class Frame(wx.Frame):     def init(self):         wx.Frame.init(self, None, title='wxpython基本组件介绍')         self.InitUI()

    def InitUI(self):         #面板         panel = wx.Panel(self)

        #文本         staticText = wx.StaticText(panel, label='静态文本控件')         dynamicText = wx.TextCtrl(panel, value='动态文本输入框')         #按钮         button = wx.Button(panel, label='单击按钮')         #列表         listText = wx.ListCtrl(panel); listText.InsertItem(0, '列表控件')         #下拉列表选择         choiceList = wx.Choice(panel, choices=['下拉列表选择控件', '选项2', '选项3']); choiceList.SetSelection(0)         #图标         icon = wx.Icon('icon_demo.ico'); self.SetIcon(icon)         #字体改变         font = wx.Font(20, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False, 'SimHei')         demo = wx.StaticText(panel, label='字体变为黑体'); demo.SetFont(font)         #容器         boxsizer = wx.BoxSizer(wx.VERTICAL)         boxsizer.Add(staticText, wx.ALL); boxsizer.Add(dynamicText, wx.ALL); boxsizer.Add(button, wx.ALL);          boxsizer.Add(listText, wx.ALL); boxsizer.Add(choiceList, wx.ALL); boxsizer.Add(demo, wx.ALL)         panel.SetSizerAndFit(boxsizer)

class App(wx.App):     def OnInit(self):         frame = Frame()         frame.Show()         return True

if name == 'main':     app = App()     app.MainLoop()


 


 


**一个实用的窗体跳转模式**


![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/3b80bd99d3c741ee97737a9107d5fa0a~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1770802558&x-signature=3CwCLChUwCR3PngK4pTDDeRTBNc%3D)


这种模式会经常用到,譬如确认窗口、警告、温馨提示等等,用它就对了。


它包含简单的三个文件:Main.py、GUImanager.py、Frame.py。


Main.py负责重要的App类的创建以及应用程序的主循环。



import wx from guimanager import Manager

class MainApp(wx.App):

    def OnInit(self):         self.guimanager = Manager(self.UpdateUI)         self.frame = self.guimanager.GetFrame(number=1)         self.frame.Show()         return True

    def UpdateUI(self,number):         self.frame = self.guimanager.GetFrame(number)         self.frame.Show(True)

def main():     app = MainApp()     app.MainLoop()

if name == 'main':     main()


 


GUImanager.py负责两个(多者不限)窗体之间切换。



import wx

import frame

class Manager():

    def init(self,UpdateUI):         self.UpdateUI = UpdateUI         self.frameDict = {} # 用来装载已经创建的Frame对象

    def GetFrame(self,number):         frame = self.frameDict.get(number)

        if frame:             pass         else:             frame = self.CreateFrame(number)             self.frameDict[number] = frame

        return frame

    def CreateFrame(self,number):         if number == 1:             return frame.My_First_Frame(id=number, UpdateUI=self.UpdateUI)         elif number == 2:             return frame.My_Second_Frame(id=number, UpdateUI=self.UpdateUI)


 


![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/77991be0fa0a4895bc93528233998a9d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3NTc5MjMwMTY3MDI=:q75.awebp?rk3s=f64ab15b&x-expires=1770802558&x-signature=JXJ8MSrBrjOR0QmtWEe27%2Fwugmw%3D)


Frame.py 顾名思义,就是窗体框架在这个文件中。



import wx

收集整理了一份《2024年最新Python全套学习资料》免费送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。 img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

了解详情:docs.qq.com/doc/DSnl3ZG…