Python图形界面开发工具tkinter初步
tkinter中共有16个核心部件,ttk中也有16种,二者都有的组件有有四大按钮:Button, Checkbutton, Menubutton, Radiobutton;三个框架:Frame, LabelFrame, PanedWindow;以及输入框Entry,标签Label,刻度条Scale,滚动条Scrollbar 和数字框Spinbox。tkinter独有的控件有多行文本Text;消息
tkinter系列:
tkinter
tkinter的操作逻辑和其他UI工具差不多,都是在设计好窗口之后,通过一个无限循环的函数将窗口持续不断地呈现给屏幕,所以最简单的tkinter程序为
import tkinter
win = tkinter.Tk()
win.title("test") #窗口标题
win.geometry("600x200+200+20") #窗口尺寸为600x200
win.mainloop() #无限循环的函数

而窗口内容的组织方式也很直观,就是将子控件放在父控件上,test窗口则相当于根控件,是所有控件的祖宗。
接下来实现一个最简单的功能——点击按钮改变标签的颜色。
import tkinter as tk
win = tk.Tk()
win.title("started")
win.geometry("400x150+200+20")
# 设置标签,win为其父控件,text为标签中的文字;bg为背景色
label = tk.Label(win,text="Label",bg="green")
label.pack(side=tk.LEFT)
def click():
label.configure(bg="yellow")
tk.Button(win,text="Button",command=click).pack(side=tk.LEFT)
win.mainloop()

其中,tk.Label是标签组件,用于展示文字,text参数为标签内容,bg为其颜色。
tk.Button是按钮,text是按钮上的文本,command为点击时触发的事件,被定义为click,功能是改变标签颜色。
控件的第一个初始化参数,基本都是父控件,上面的代码中,win就是按钮和标签的父控件,也就是名为started的窗口。
ttk控件
tkinter自带的控件比较古旧,会让人感受到扑面而来的年代感,相比之下,ttk中的控件更加现代一些,就像其名字塔塔开一样,很有战斗力。tk和ttk的部分组件对比如下

所以该选哪个一目了然。
但是另一方面,ttk.Button将诸多外观设置封装在了style参数中,从而tk.Button中的诸如前景色、背景色、边缘设置等参数无法在ttk.Button中使用,可以说是有舍有得吧。
组件类别
tkinter中共有16个核心部件,ttk中也有16种,二者都有的组件有
有四大按钮:Button, Checkbutton, Menubutton, Radiobutton;三个框架:Frame, LabelFrame, PanedWindow;以及输入框Entry,标签Label,刻度条Scale,滚动条Scrollbar 和数字框Spinbox。
tkinter独有的控件有多行文本Text;消息组件Message、Messagebox;菜单Menu;列表框Listbox;画布Canvas以及窗口Toplevel。
ttk另外的6种组件包括两个布局组件Notebook和Separator;下拉选框Combobox;进度条Progressbar;树形列表Treeview以及窗口调整组建Sizegrip。
附上组件对比的绘图代码
import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
root.geometry("600x200+200+20")
tFrm = tk.LabelFrame(root, text="tk组件")
tFrm.pack(side=tk.TOP)
frm = tk.Frame(tFrm)
frm.pack(side=tk.TOP)
tk.Button(frm, width=15, text="Button").pack(side=tk.LEFT)
tk.Checkbutton(frm, width=15, text="CheckButton").pack(side=tk.LEFT)
tk.Menubutton(frm, width=15, text="MenuButton").pack(side=tk.LEFT)
tk.Label(frm, width=15, text="Label").pack(side=tk.LEFT)
frm = tk.Frame(tFrm)
frm.pack(side=tk.TOP)
tk.Radiobutton(frm, width=15, text="Radio1").pack(side=tk.LEFT)
tk.Radiobutton(frm, width=15, text="Radio2").pack(side=tk.LEFT)
tk.Entry(frm, width=15).pack(side=tk.LEFT)
tk.Spinbox(frm, width=15).pack(side=tk.LEFT)
tFrm = ttk.LabelFrame(root, text="ttk组件")
tFrm.pack(side=tk.TOP)
frm = tk.Frame(tFrm)
frm.pack(side=tk.TOP)
ttk.Button(frm, width=15, text="Button").pack(side=tk.LEFT)
ttk.Checkbutton(frm, width=15, text="CheckButton").pack(side=tk.LEFT)
ttk.Menubutton(frm, width=15, text="MenuButton").pack(side=tk.LEFT)
ttk.Label(frm, width=15, text="Label").pack(side=tk.LEFT)
frm = tk.Frame(tFrm)
frm.pack(side=tk.TOP)
ttk.Radiobutton(frm, width=15, text="Radio1").pack(side=tk.LEFT)
ttk.Radiobutton(frm, width=15, text="Radio2").pack(side=tk.LEFT)
ttk.Entry(frm, width=15).pack(side=tk.LEFT)
ttk.Spinbox(frm, width=15).pack(side=tk.LEFT)
frm = tk.Frame(tFrm)
frm.pack(side=tk.TOP, fill=tk.X)
ttk.Combobox(frm, width=15, text="Combobox").pack(side=tk.LEFT)
ttk.Progressbar(frm, width=30).pack(side=tk.LEFT)
root.mainloop()
更多推荐
所有评论(0)