Python的tkinter学习

Our tkinter GUI will not become visible until we start the main event loop and, to do that, we use root.mainloop()

分层管理

在这里插入图片描述

win = tk.Tk()
monty = ttk.LabelFrame(win,text = 'Monty Python') 
monty.grid(column = 0,row = 1)
### Tk类型
创建GUI form
tk.Tk()

tkinter types,变量类型

我们可以保存数据从GUI的变量中,以至于我们可以使用这些数据,我们能够设置或者得到它们的值,十分像get或者set方法。

tkinter typesinstruction
strVar = StringVar()holds as
intVar = IntVar()an interger
dbVar = DoubleVar()float
blVar = BooleanVar()boolean
import tkinter as tk

strData = tk.Stringvar()
strData.set('dhshdkas')
varData = strData.get()
print(varData)
  • get data from a widget
    get() method
    widget.get():得到数据

callback function

  • 在GUI中,页面一直在等待事件发生,比如我点击了一个按钮,我们必须把这个按钮与一个事件绑定(handle),如果我们没有创建一个event handler ,点击这个按钮,我们得不到任何的响应。(原理有点类似中断处理函数)
  • 我们称这个event handle为callback function。
  • callback function很被动,like gui 等待唤醒激活。
  • callback function通常实现一些处理,然后将结果返回给GUI
  • 实现方式:command argument(command = self.callback_function)

Ceckbutton组件

Checkbutton widgets:tk.Checkbutton()
传入参数为:gui参数,变量参数,状态参数。

import tkinter as tk
chVarDis = tk.IntVar()
check1 = tk.Checkbutton(monty,text = "Disableed",variable = chVarDis,state = 'disable')
check1.select()
check1.grid(column = 0,row = 4,sticky = tk.W)

menu bars 组件

  • creating menu bar
    先生成menuBar,然后在menuBar.add_cascade(),生成一行的菜单按钮。
    然后在生成一个filemenu,在menuBar上。将这个filemenu.add_command()来添加命令。如下逻辑,其实层次关系。第一层为menuBar,在win生成,用add_cascade来生成第一层的菜单。第二层为filemenu,在menuBar生成,通过add_command来添加子菜单。
    1. add_cascade(label,menu):生成下一级的子菜单;menu为下一级的菜单。下一级的菜单由Menu()实例化生成。
    2. add_command(label,command);通过command回调函数,来实现点击这个菜单之后所执行的动作。
from tkinter import Menu
menubar = Menu(win)
win.config(menu = menuBar)
fileMenu = Menu(menuBar,tearoff  =0)#去掉虚线
helpMenu = Menu(menuBar,tearoff = 0)

fileMenu.add_command(label = "New")
fileMenu.add_separator()
fileMenu.add_command(label ="Exit" )
menuBar.add_cascade(label = "File",menu = fileMenu)

scrolledtext组件

文本输入框,可换行,用于显示

from tkinter import scrolledtext

scr = scrolledtext.ScrolledText(monty,width = scrolW,height = scrolH,wrap = tk.WORD)
scr.grid(column = 0,columnspan = 3,sticky = 'WE',row= 3)

messagebox组件

弹出消息用

messagebox.showinfo('Python Message Info Box', 'A Python GUI created using tkinter:\nThe year is 2015.')
messagebox.showwarning('Python Message Warning Box', 'A Python GUI created using ')
messagebox.showerror('Python Message Error Box', 'A Python GUI created using tkinter')

Radiobutton组件

选项按钮

tk.Radiobutton()
接收的参数,gui参数,变量类型参数,跳转命令参数。

import tkinter as tk

curRad = tk.Radiobutton(monty,text = colors[col],variable = radVar,value = col,command = radCall)
curRad.grid(column = col,row = 5,sticky = tk.W)

Spinbox组件

在这里插入图片描述
上面就是一个Spinbox,点击箭头可以加减数字。

spin = Spinbox(monty,values =(1,2,4,42,100,45), from_=0,to = 10,width = 5,bd = 8,command = _spin)#width是宽度,bd是深度
spin.grid(column = 0,row = 2)

ttk 组件类型(Widgets)

需要说明的,ttk的很多组件同Tkinter都是相同的,在这种情况下,ttk将覆盖Tkinter的组件,将采用ttk的特性。
原文如下
And then severalttk widgets (Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton,PanedWindow, Radiobutton, Scale and Scrollbar) will automatically substitutefor the Tk widgets.

  • Button :ttk.Button( ):按钮菜单
  • Combo box : ttk.Combobox( ):下拉菜单
  • Text box : ttk.Entry( ):输入框
  • Lable :ttk.Label( ):标签框
  • LabelFrame :ttk.LabelFrame( ) 结构框架框
  • Notebook:ttk.Notebook(win):Create a tab control!
  • 例子:
    class Labelframe(Widget):
    Ttk Labelframe widget is a container used to group other widgets together. It has an optional label, which may be a plain text string or another widget.
monty2  =ttk.LabelFrame(tab2,text = "The Snake")
monty2.grid(column = 0,row = 0,padx = 8,pady = 4)
ttk组件的方法

组件都是可以一直在上一层的父类对象上生成的
tab1 = ttk.Frame(tabControl)
monty = ttk.LabelFrame(tab1,text = ‘Monty Python’)
ttk.Label(monty,text = “enter a name:”).grid(column = 0,row = 0,sticky = ‘W’)
逐层生成的。

  • 传入GUI主参数,一个类模块
  • 变量(varible),也是一个类模块
  • 大小
  • 状态
  • 命令(点击之后跳转的函数)

方法

  • config:用于重新设置配件显示的文本信息
  • configure:设置配件的接收状态
  • padx,pady:adding space horizontally and vertically is done by using the built-in properties
    named padx and pady
  • for child in labelsFrame.winfo_children() : The winfo_children() function returns a list of all the children belonging to the labelsFrame variable
  • pick()几何管理器,用来设置部件沿着box的位置
  • grid()管理器,用来设置部件布局的位置,按照行和列来布局,类似于矩阵形式。
    you can’t use both grid and pack with widgets that have a common parent .
    总结:
    you cannot mix grid and pack within the same container
    you can use both grid and pack within a single application. This is very, very common since each has strengths and weaknesses. I use both on a regular basis.

Ownship

  • 每一层的对象比如Tk(),Frame(),LabelFrame(),Label()都可以当做容器来承载下一级的widgets。
  • widget装入容器的模式,是继承父类成,然后调用父类的add方法,自己作为参数传入,建立与父类的联系。
    例如:
    tab3 = ttk.Frame(tabControl)
    tabControl.add(tab3,text = 'Tab 3')
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值