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()

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐