标签:close pre pyqt oop waf ruby play frame 程序
import tkinter.messagebox as messagebox class 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()
from tkinter import * root =Tk() v = IntVar() #选中为1,未选中为0 c = Checkbutton(root,text="Test",variable=v) c.pack() l = Label(root,textvariable=v) l.pack() root.mainloop()
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()
#对于单选框,多个按钮只对应一个变量,复选框,多个按钮对应多个值 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()
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()
#对于单选框,多个按钮只对应一个变量,对于复选框,多个按钮对应多个值(使用列表获取)
注意: 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也是使用十分广泛的。
标签:close pre pyqt oop waf ruby play frame 程序
原文地址:https://www.cnblogs.com/ssyfj/p/8971750.html