python GUI(Tkinter)

news/2024/11/25 5:36:05/

Tkinter简介

是python内置的标准GUI库,在安装python后,导入模块即可正常使用,Tk和Tkinter可在大多数的Unix,以及Windows和Macintosh系统上运行。

关于Tkinter的导入(注意大小写)

在2.x版本上,编写为:from Tkinter import *

在3.x版本上,编写为:from tkinter import *


Tkinter组件

控件描述
Button按钮控件
Canvas画布控件,显示图形元素如线条或文本
Checkbutton多选框控件,不存在互斥,可多个选择
Entry输入控件,用于输入或者显示文本内容
Frame框架控件,在屏幕上显示一个矩形区,多用于作为容器
Label标签控件,可用于显示文本和位图
Listbox列表控件
Menubutton菜单项按钮控件
Menu菜单控件,显示菜单栏,下拉菜单和弹出菜单等
Message消息控件,用于显示多行文本,与Label类似
Radiobutton多选框控件,存在互斥,多个只能选择一个
Scale范围控件,显示一个数值刻度并设定范围
Scrollbar滚动条控件,当内容超过可视化区域的时候使用,比如列表框
Text文本控件,用于显示多行文本
Toplevel容器控件,用来提供一个单独的对话框,和Frame类似
Spinbox输入控件,与Entry类似,但是可以指定输入范围值
PanedWindow窗口布局管理的插件,可以包含一个或多个子控件
LabelFrame容器控件,常用于负责的窗口布局
tkMessageBox用于显示你应用程序的消息框

Tkinter组件的共同属性

属性描述
Dimension控件大小
Color控件颜色
Font控件字体
Anchor锚点
Relief控件样式
Bitmap位图
Cursor光标

Tkinter组件的布局管理,有三种:pack, grid,place

关于布局管理的,推荐网友博客(感谢分享):https://blog.csdn.net/liuxu0703/article/details/54428405

关于Grid讲解的,推荐网友博客:https://blog.csdn.net/ligou8000/article/details/46331075

我只简单的说明grid的几种属性,用于大家对下面控件示例代码的理解。

option说明
row控件摆放的行数值,从0开始,
column控件摆放的列数值,从0开始
rowspan可指定控件跨越多行显示,
column可指定控件跨越多列显示,
padxx轴方向的填充,在控件外部的左右部分填充指定长度,数值必须大于0
padyy轴方向的填充,在控件外部的上下部分填充指定长度,数值必须大于0
sticky控件的对齐方式,默认会居中显示,可以使用的值有:N/S/E/W,分别代表上,下,左,右。如果你希望控件左对齐的话,可以编写程序: sticky=E如果你希望控件左上对齐的话,可以编写程序: sticky=E+N

Tkinter的使用示例:首先搭建框架相关

# -*- coding:utf-8 -*-
# __author__ = 'Code~'import Tkinter                  # 引用Tkinter库
from Tkinter import *           # 导入Tkinter库方法DEF_PATH = 'C:\Python27'
# 消息框模块
class MsgBox:def __init__(self):# 创建Tkinter对象self.root = Tkinter.Tk()# 标题self.root.title('Tkinter Demo')# 设定窗口大小,注意‘x’一定要小写,否则TclError: bad geometry specifier "500X400"self.root.geometry('500x400')# 初始化UI相关self.initUI()# 消息循环self.root.mainloop()# 初始化控件def initUI(self):root = self.root   if __name__  == "__main__":messageBox = MsgBox()

img

接下来我们会将UI控件的示例编写在方法initUI中,为了查看方便,会分块展示:


Button

# text:按钮标题
# command: 事件绑定,当按钮被点击时,会执行
Button(self.root, text='按钮', command=self.BtnEvent).grid(row=0, column=0)def BtnEvent(self):print(u'您点击了按钮')

img


Checkbutton

self.chkVar = []                    
for i in range(4):_str = 'CheckBtn' + str(i)  # 标题# 注意,此处不可编写为self.chkVar[i] = IntVar()# 否则报错:IndexError: list assignment index out of rangeself.chkVar.append(IntVar())# text: 标题# variable: 对象整型变量# command: 关联事件chkBtn = Checkbutton(self.root,text=_str,variable=self.chkVar[i],command=self.chkEvt)chkBtn.grid(row=1, column=(i+1))# 事件
def chkEvt(self):for i in range(4):# 获取选中状态,如果选中为1,否则为0index = self.chkVar[i].get()     if index > 0:print(u'你选择的按钮为:CheckBtn' + str(i)) 

img


Radiobutton

# 注意此处,可不用使用列表
self.radioVar = IntVar()    
for i in range(1,4):_str = 'RaidoBtn' + str(i)# text: 标题# variable: 对象的整型变量# value: 获取选择对象的索引radioBtn = Radiobutton(self.root,text=_str,variable=self.radioVar,value=i,command=self.radioEvt)radioBtn.grid(row=2, column=(i+1))def radioEvt(self):index = self.radioVar.get()print(u'你选择的radioButton的索引为:' + str(index))

img


Label

#Label文本
strContent = "这是标签控件,属性:bg设置背景颜色,fg设置文本颜色"
label = Label(self.root, text=strContent,bg='red',fg='blue',height=3)
label.grid(row=0, column=0)     

img


Entry

def initUI(self):#Entry# 不可使用text属性来设定en0 = Entry(self.root, text='请输入文本...',width=50, bg='red')en0.grid(row=1, column=0, sticky='E')# 使用StringVar()来绑定Entry,通过set来设定初始化值,通过get来获取,其输入值可改变self.inputVar = StringVar()self.inputVar.set('请输入内容....')en1 = Entry(self.root, textvariable=self.inputVar, width=50,bg='yellow')en1.grid(row=2, column=0, sticky='E')Button(self.root, text='确认1', command=self.sureEvent1).grid(row=2, column=1)# 密码输入框self.inputVar2 = StringVar()self.inputVar2.set('请输入密码')en2 = Entry(self.root, textvariable=self.inputVar2, width=50,show='*')en2.grid(row=3, column=0, sticky='E')Button(self.root, text='确认2', command=self.sureEvent2).grid(row=3, column=1)# 设置输入框属性# 属性值有4个:normal(可写),disabled(不可操作), readonly(只读,不可操作),通过state来设定self.inputVar3 = StringVar()self.inputVar3.set('readonly')en3 = Entry(self.root, textvariable=self.inputVar3, width=50,state='readonly')en3.grid(row=4, column=0, sticky='E')Button(self.root, text='确认3', command=self.sureEvent3).grid(row=4, column=1)def sureEvent1(self):inputStr = self.inputVar.get()print(u'您的第二个输入框内容:' + inputStr)def sureEvent2(self):inputStr = self.inputVar2.get()print(u'您的第三个输入框内容:' + inputStr)def sureEvent3(self):inputStr = self.inputVar3.get()print(u'您的第四个输入框内容:' + inputStr)

img

End


http://www.ppmy.cn/news/22814.html

相关文章

第004天:APP在平板上的UI布局设计

当今是移动设备发展非常迅速的时代,不仅手机已经成为了生活必需品,就连平板电脑也变 得越来越普及。平板电脑和手机最大的区别就在于屏幕的大小,一般手机屏幕的大小会在3英寸 到6英寸之间,而一般平板电脑屏幕的大小会在7英寸到10英…

【青训营】软件开发流程

文章内容总结自:字节跳动青训营 软件开发流程 软件开发模型简介 传统瀑布模型 将流程视作为一条线: 完成需求分析后开发,开发完成后测试,测试完成后发布,发布完成后进行运维。这是最直观的一个模型,其流…

初阶C语言——函数【详解】(重点:函数的递归)

文章目录1.什么是函数2. 函数分类2.1 库函数:2.2 自定义函数3.函数的参数3.1 实际参数(实参)3.2 形式参数(形参)4. 函数的调用:4.1 传值调用4.2 传址调用4.3 练习5. 函数的嵌套调用和链式访问5.1 嵌套调用5…

产品用户手册难写在哪里?

产品手册不仅是一份产品使用说明书,更是企业通过互联网宣传和推销自己产品的一种普遍形式,对产品外观内容进行详细介绍对业务操作流程的详细讲解,通过产品手册对目标客户灌输产品意义和价值观。 生活中总会见到各式各样的产品手册&#xff0…

LaTeX使用graphicx+subfig实现子图合并+标题+子图标题

一、应用场景/需求 今天在LaTeX写论文的时候,发现自己需要使用几个图拼凑在一起,然后合到一张大图中去。也就是一张图包含若干张子图,然后若干张子图的大小可以自己设置,子图下面有子标题,而总的大图也有一个标题。例如…

PythonWeb开发基础(三)类Flask框架请求封装

课程地址:Python 工程师进阶技术图谱 文章目录类Flask框架请求封装HTTP请求解析的python实现1、解析查询字符串2、多值问题使用webob库解析请求Bug记录bug:AttributeError: module cgi has no attribute parse_qs类Flask框架请求封装 Web服务器 本质是…

Vue2与Vue3共存于一台电脑 保姆级教程

文章目录前言一、共存的前置条件二、共存的操作步骤三、最后一步,配置环境变量,实现全局调用四、 使用vue3报错前言 本文讲解了如何在一台电脑上使vue-cli2.x与vue-cli3.x共存,如果本文对你有所帮助请三连支持博主,感谢各位的支持…

正大国际期货:做恒指要懂得顺势而为

做恒指,究竟是应该做长线还是做短线,想必是一个有较大争议的话题。当然,选择短线操作是绝大多数人的选择,长线操作者在这个市场是寥寥无几的。说起恒指期货操作方法,其实很简单,那就是:做恒指要…