图形化界面设计—Tkinter模块学习

一、根窗体的创建

通过导入的tkinter模块,调用Tk()方法,创建个root根窗口;使用title()方法为我们创建的窗口命名;geometry()方法设置窗口的初始化大小,展示代码如下:

import tkinter as tk
#实例化窗口
root = tk.Tk()
root.title('我的第一个窗口')
#初始化的窗口大小宽460高240(单位都是像素)
root.geometry('460x240') #也可以在加一个初始化时窗口的具体位置如 '+400+560'分别代表左/上边距
root.mainloop()

效果如图:
在这里插入图片描述

注意:root.mainloop()方法很重要,如果没有这个方法的话,代码一运行结束,我们的窗口就会关闭。所以这个方法的作用就相当于一个”大循环”,使我们的窗口一直处于打开状态,除非我们手动关闭。

二、 文本标签Label

Label控件用于单行文本内容显示,引入模块调用Label()方法直接创建,实列化于根窗口,一些常见属性,text(文本内容)、bg(背景颜色)、fg(前景色设置字体颜色)、font(字体号,字体大小)、width(宽,单位默认字符)、height(高,单位默认字符)、relief(3D浮雕样式)有五个可选项FLAT(平的),RAISED(凸起),SUNKEN(凹陷),GROOVE(沟槽状边缘),RIDGE(脊状边缘),当然Label也还有其他属性。相关展示代码如下:

import tkinter as tk
#实例化窗口
root = tk.Tk()
root.geometry('460x240') 
root.title('Label控件')
#创建一个Label控件实例
label = tk.Label(root,text='这是个Label标签')
label.pack()
root.mainloop()

效果如图:在这里插入图片描述

三、控件实例布局方法

pack()布局:一种较为简单的布局方法,有fill,side两个参数可以选,fill有三个值可以取 X\Y\BOTH,分别表示控件实例水平方向、垂直方向、左右伸展,如果不加参数,默认排序顺序是代码语句的顺序,按自上而下排列。

place()布局:可以使用详细的参数具体布局,常用的参数有这些:x、y,控件实例在水平和垂直方向的位置(注意:根窗体的左上角位置为0,0);relx、rely,控件实例在根窗体水平和垂直方向的相对位置(取值在0.0~1.0);height、width,设置控件实例的高和宽。 relwidth、relheight,控件实例相对于根窗体的宽度和高度取值在(0.0~1.0),place()方法配合relx、rely、relwidth、relheight参数使用可以让得到的实例控件根据根窗体自适应。

grid()布局:基于一种网格布局,常用的参数有,column控件实列的列(最左边为0列);columnspan设置控件实例可以跨越的列数(默认为1列);row控件实例的行(最上面为0行);rowspan设置控件实例可以跨越的行数(默认为1行)。

四、 Message多行文本标签

Message多行文本标签,属性与用法和Label标签类似。首先,调用Message ()方法创建了一个多行文本标签,然后可以设置一些参数,text(文本内容)、bg(背景颜色)、fg(前景色设置字体颜色)、font(字体号,大小)、width(宽,单位默认字符)、height(高,单位默认字符)、relief(3D浮雕样式)有五个可选项FLAT(平的),RAISED(凸起),SUNKEN(凹陷),GROOVE(沟槽状边缘),RIDGE(脊状边缘)等其它属性。相关代码展示如下:

import tkinter as tk
#实例化窗口
root = tk.Tk()
root.geometry('460x240')
root.title('Message控件')
#创建一个Message控件实例
message= tk.Message(root,text='Message标签的第一行内容\
                              Message标签的第二行内容\
                              Message标签的第三行内容')
message.pack()
root.mainloop()

效果如图:在这里插入图片描述
值得注意的是属性text()在创建实例时定义的文本内容是固定的,我们当然也可以改变,这里有两种方法:
① 控件实例的configure()或config()方法
② 定义一个tkinter内部类型变量var=StringVar(),在使用textvariable连接变量var,如textvariable=var,然后var.set()方法改变var的值也可以改变文本内容。
方法一:使用configure()或config()方法

import tkinter as tk
import time

def text_change():
    s = time.strftime('%Y-%m-%d %H:%M:%S')
    label.configure(text = s)
    root.after(1000, text_change)
#实例化窗口
root = tk.Tk()
root.geometry('460x240')
root.title('text文本值变化')
label = tk.Label(root,text='',font=('黑体',16))
label.place(relx=0.2,rely=0.2)

text_change()
root.mainloop()

方法二:定义一个tkinter内部类型变量var=StringVar()

import tkinter as tk
import time

def text_change():
    s = time.strftime('%Y-%m-%d %H:%M:%S')
    var.set(s)
    root.after(1000, text_change)
#实例化窗口
root = tk.Tk()
root.geometry('460x240')
root.title('text文本值变化')
var = tk.StringVar()
label = tk.Label(root,textvariable=var,font=('黑体',16))
label.place(relx=0.2,rely=0.2)

text_change()
root.mainloop()

两种方法运行效果一样:
在这里插入图片描述

五、按钮组件Button

Button控件可以响应鼠标点击按钮事件,通过调用Button()方法创建,常用属性有,text(文本内容)、bg(背景颜色)、fg(前景色设置字体颜色)、font(字体号,大小)、width(宽,单位默认字符)、height(高,单位默认字符)、relief(3D浮雕样式),command等,其中command=函数(点击按钮时调用函数,后面不需要接括号)比较重要,主要有两种用法:
①command=函数名(不需要接括号)
②command=lambda:函数名(参数1,参数2…)
相关代码展示如下:

import tkinter as tk

# 创建Idea1函数,当单击按钮‘方法一’时执行里面的代码块
def Idea1():
    a = float(Entry1.get())
    b = float(Entry2.get())
    # s = '%0.2f+%0.2f=%0.2f\n' %(a,b,a+b)
    s = f'{a}+{b}={a + b}\n'
    text.insert('end', s)
    # Entry的delete方法可以在函数运行一次清除其内容
    Entry1.delete(0, 'end')
    Entry2.delete(0, 'end')


# 创建Idea2函数,当单击按钮‘方法二’时执行里面的代码块
def Idea2(x, y):
    a = float(x)
    b = float(y)
    s = f'{a}+{b}={a + b}\n'
    text.insert('end', s)
    Entry1.delete(0, 'end')
    Entry2.delete(0, 'end')


# 实列化窗口
root = tk.Tk()
root.title('Button控件')
# 初始化窗口大小
root.geometry('460x240')
# resizable禁止改变窗口大小
root.resizable(False, False)

# 创建一个单行文本标签
Label = tk.Label(root, text='输入两个数,从下面两个按钮中选择一个计算')
Label.place(relx=0.2, rely=0.01, relwidth=0.72, relheight=0.1)

#创建Botton点击按钮

btn1 = tk.Button(root,text='方法一',command=Idea1)	#command的第一种调用函数方法 ‘commmand=函数名’
btn1.place(relx=0.08, rely=0.4, relwidth=0.2, relheight=0.15)
btn2 = tk.Button(root,text='方法二',\
                 command=lambda:Idea2(Entry1.get(),Entry2.get()))#command的第二种调用函数方法 'lambda:函数名(控件1.get(),控件2.get())'
btn2.place(relx=0.75, rely=0.4, relwidth=0.2, relheight=0.15)

# 创建Entry输入框
Entry1 = tk.Entry(root)
Entry1.place(relx=0.08, rely=0.15, relwidth=0.2, relheight=0.1)
Entry2 = tk.Entry(root)
Entry2.place(relx=0.75, rely=0.15, relwidth=0.2, relheight=0.1)
# 创建Text文本框并实列化与root窗口上
text = tk.Text(root)
text.place(rely=0.6, relheight=0.45)
root.mainloop()

效果如图所示:
在这里插入图片描述

总结

以上这些是最近刚刚学到的,当然这只是一部分后面还有,因为内容太多了,只能分开发了。这里发个文章记录一下学习过程,因为是第一次使用,文字排版还不会弄,看着也是有点乱,只能后面在慢慢熟悉了,最近也是刚学习Tkinter,是个小白,所以难免有不足之处,希望大家可以指出,我们一起交流学习共同进步。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值