tkinter界面设置

图形化界面设计(GUI)

当前流行的计算机桌面应用程序大多数为图形化用户界面(Graphic User Interface,GUI),即通过鼠标对菜单、按钮等图形化元素触发指令,并从标签、对话框等图型化显示容器中获取人机对话信息。
Python自带了tkinter 模块,实质上是一种流行的面向对象的GUI工具包 TK 的Python编程接口,提供了快速便利地创建GUI应用程序的方法。其图像化编程的基本步骤通常包括:

  • 导入 tkinter 模块
  • 创建 GUI 根窗体
  • 添加人机交互控件并编写相应的函数。
  • 在主事件循环中等待用户触发事件响应。

窗口创建及布局

做界面,首先需要创建一个窗口,Python Tkinter 创建窗口很简单,代码如下:

from tkinter import *
#初始化Tk()
myWindow = Tk()
#进入消息循环
myWindow.mainloop()

上述程序创建的窗口是非常简陋的,有待进一步美化,设置标题、窗口大小、窗口是否可变等,涉及属性有:title(设置窗口标题)、 geometry(设置窗口大小)、resizable(设置窗口是否可以变化长 宽)。请看如下实例:

from tkinter import Tk
#初始化Tk()
myWindow = Tk()
#设置标题
myWindow.title('Python GUI')
#设置窗口大小
myWindow.geometry('500x300')
#设置窗口是否可变长、宽,True:可变,False:不可变
myWindow.resizable(width=False, height=True)
#进入消息循环
myWindow.mainloop()

紧接着,还可以将窗口放置于屏幕中央,如下实例:

from tkinter import Tk
#初始化Tk()
myWindow = Tk()
#设置标题
myWindow.title('Python GUI')
#设置窗口大小
width = 500
height = 300
#获取屏幕尺寸以计算布局参数,使窗口居屏幕中央
screenwidth = myWindow.winfo_screenwidth()
screenheight = myWindow.winfo_screenheight()
alignstr = '%dx%d+%d+%d' % (width, height, (screenwidth-width)/2, (screenheight-height)/2)
myWindow.geometry(alignstr)
#设置窗口是否可变长、宽,True:可变,False:不可变
myWindow.resizable(width=False, height=True)
#进入消息循环
myWindow.mainloop()

常用控件

仅有窗口并不能实现交互,还需要控件,Tkinter 提供了各种控件,如按钮、标签和文本框。在一个 GUI 应用程序中使用,这些控件通常被称为控件或者部件,目前有15种Tkinter 部件,如下列表:

控件名称作用
Button按钮显示按钮,单击触发事件
Canvas画布绘制图形或特殊控件
Checkbutton复选框多项选择
Entry输入框接受单行文本输入
Frame框架用于控件分组
Label标签单行文本显示
Lisbox列表框显示文本列表
Menu菜单创建菜单命令
Message消息框多行文本标签
Radiobutton单选框从互斥的多选项中做出单个选择
Scale滑块默认垂直方向,拖动鼠标改变数值形成可视化交互
Scorllbar滑动条默认垂直,可与Text,Canvas等控件结合使用形成移动空间
Text文本框接收或输出显示多行文本

控件布局管理

Tkinter 控件有特定的几何状态管理方法,管理整个控件区域组织,以下是 Tkinter 公开的布局管理类:包、网格、位置。

方法描述说明
pack()基于参数进行设置after:放于其他组件后面
before:放于其他组件前面
anchor:文本对齐方式(n:上,s:下,w:左,e:右)
side:控件在窗口的位置(top,bottom,left,right)
fill:填充方式(X:水平,Y: 垂直)
expand:1:可扩展,0:不可扩展
place()位置anchor:文本对齐方式
x:组件左上角的x坐标
y:组件右上角的y坐标
relx:组件相对于窗口的x坐标(0-1的小数)
rely:组件相对于窗口的y坐标(0-1的小数)
width:组件的宽度:
height:组件的高度
relwidth:组件相对于窗口的宽度:
relheight:组件相对于窗口的高度
grid()网格column:组件所在列的起始位置
columnspam:组件的列宽
row:组件所在行的起始位置
rowspam:组件的行宽

综合示例

#coding=utf-8
from tkinter import *
import datetime

window=Tk()
# 初始化窗口
window.title("测试")
# 设置标题
width = 500
height = 300
# 设定窗口大小
screenwidth =window.winfo_screenwidth()
screenheight = window.winfo_screenheight()
alignstr = '%dx%d+%d+%d' % (width, height, (screenwidth-width)/2, (screenheight-height)/2)
window.geometry(alignstr)
#获取屏幕尺寸以计算布局参数,使窗口居屏幕中央

window.resizable(False,False)
#设置窗口是否可变长、宽,True:可变,False:不可变
text=StringVar()
# 存储文本变量
label=Label(window,textvariable=text,font=("黑体",12))
label.pack()
# 创建一个标签显示按钮触发后的结果

def get_time():
    t = str(datetime.datetime.now()) + '\n'
    txt.insert(END, t) # 将t添加到文本显示中
    window.after(1000, get_time)  # 每隔1s调用函数 gettime 自身获取时间
txt = Text(window)
txt.place(x=150,y=150,width=200,height=200)
get_time()
# 创建一个多行文本显示框显示添加的内容
en1=Entry(window,font=("黑体",12))
en1.place(x=200,y=50,width=100,height=30)
# 创建一个输入框
def getWeather():
    """按钮触发事件"""
    print("dangdangdang...")
    text.set("dangdangdang...")

btn=Button(window,text='查询',command=getWeather,bg='red')
btn.place(x=200,y=100,width=100,height=30)
# 创建一个按钮
window.mainloop()
# 循环执行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值