python---基础知识回顾(九)图形用户界面,,主要使用wxPyth
python---基础知识回顾(九)图形用户界面,,主要使用wxPyth
主要使用wxPython(最成熟的跨平台python GUI工具包)
前戏:老牌python GUI程序(Tkinter)
import tkinter.messagebox as messageboxclass Application(Frame): def __init__(self,master=None): Frame.__init__(self,master,bg="red") #设置框架类的父类(基于master<主窗体>),frame可以是看做控件的父容器 self.pack() #显示frame控件 self.createWidgets() def createWidgets(self): #用于创建控件(是frame的子) self.nameInput = Entry(self) self.nameInput.pack() self.alertButton = Button(self,text="Hello",command=self.hello) self.alertButton.pack() def hello(self): name = self.nameInput.get() messagebox.showinfo("Message","Hello, %s"%name)root = Tk()root.title("标题")root.wm_minsize(200,200)app = Application(root)app.mainloop()
def callback(): var.set("hhhhhhh")root = Tk()var = StringVar()var.set("66666")frame1 = Frame(root)frame2 = Frame(root)lb = Label(frame1,textvariable=var,padx=20)lb.pack(side=LEFT)# img = Image(file="1.gif",imgtype="photo")img = PhotoImage(file="1.gif")lb2 = Label(frame1,image=img)lb2.pack(side=RIGHT)btnCm = Button(frame2,text="下一步",command=callback)btnCm.pack()frame1.pack()frame2.pack()root.mainloop()label标签的使用(使用图片)
from tkinter import *root =Tk()v = IntVar() #选中为1,未选中为0c = Checkbutton(root,text="Test",variable=v)c.pack()l = Label(root,textvariable=v)l.pack()root.mainloop()Checkbutton使用(1)
from tkinter import *root =Tk()GIRLS = ["asd",‘dsa‘,‘fef‘,‘fwaf‘]v = []def change(): for i in v: print(i.get())for girl in GIRLS: v.append(IntVar()) b = Checkbutton(root,text=girl,variable=v[-1],command=change) #使用一个固有变量来记录状态 b.pack(anchor=W) #控件相对主窗口在左边root.mainloop()Checkbutton的使用(2)
#对于单选框,多个按钮只对应一个变量,复选框,多个按钮对应多个值from tkinter import *def change(): print(v.get())root = Tk()v = IntVar()Radiobutton(root,text="one",variable=v,value=1,command=change).pack(anchor=W)Radiobutton(root,text="two",variable=v,value=2,command=change).pack(anchor=W)Radiobutton(root,text="three",variable=v,value=3,command=change).pack(anchor=W)root.mainloop()Radiobutton的使用(1)
from tkinter import *def change(): print(v.get())root = Tk()v = IntVar()Langes = [ ("python",1), ("javascript",2), ("Lua",3), ("Ruby",4)]for key,val in Langes: Radiobutton(root,text=key,variable=v,value=val,command=change).pack(anchor=W)root.mainloop()Radiobutton的使用(2)
#对于单选框,多个按钮只对应一个变量,对于复选框,多个按钮对应多个值(使用列表获取)
注意:root = Tk()v = IntVar()这里我们声明的变量全部应该写在主窗口生成后,才可以
不然当我们将变量写在主窗口生成前v = IntVar()root = Tk()会报错AttributeError: ‘NoneType‘ object has no attribute ‘_root‘
1.首先进入IntVar类class IntVar(Variable): def __init__(self, master=None, value=None, name=None): Variable.__init__(self, master, value, name)2.进入父类class Variable: def __init__(self, master=None, value=None, name=None): ... if not master: #看此处(master是主窗口,是传参,但是我们使用的时候并没有传入,所以为空,进入下面代码) master = _default_root #_default_root是什么 self._root = master._root() self._tk = master.tk ...3._default_root查找_support_default_root = 1 #也有用,后面看_default_root = None #是一个全局变量,代表主窗口但是他也为空,所以出现了上面的属性错误,None没有_root()方法------------------------------------------------------------------开始查看Tk()root = Tk()1.查看源码class Tk(Misc, Wm): def __init__(self, screenName=None, baseName=None, className=‘Tk‘, useTk=1, sync=0, use=None): ... if useTk: #这里默认传入1,进入下面逻辑 self._loadtk() ...2.查看self._loadtk()方法 def _loadtk(self): self._tkloaded = 1 global _default_root # Version sanity checks ...... # Create and register the tkerror and exit commands # We need to inline parts of _register here, _ register # would register differently-named commands. ...... if _support_default_root and not _default_root: #查看上面的全局变量,发现可以进入下面的逻辑代码中 _default_root = self #所以_default_root就是主窗口 ......------------------------------------------------------------------结论:由上面发现可以知道:IntVar等变量的使用需要_default_root(当我们没有传入master时),而主窗口生成root=Tk()时,内部代码将_default_root实现了。所以两者顺序需要保证先后原因:源码分析
还有其他工具包PyQT和PyGTK也是使用十分广泛的。
python---基础知识回顾(九)图形用户界面
相关内容
- python+robot framework接口自动化测试,,python+req
- 为什么python运行效率低?原来因为它!,,在大家的记忆中
- Python基础知识,,Python2与Py
- 4.1 字符串常量(python),,《Python Li
- Python迷宫游戏(基础版),,# 画地图map_
- python执行lua代码,,楔子下面我们来看看如
- python实现“跳跃的恐龙”这款游戏,,看到python头疼
- python folium 库学习,,一、简介 foli
- Python 图像处理 OpenCV (14):图像金字塔,,前文传送门
- Python3---常见函数---type(),,0X01;功能描述
评论关闭