Python 图形用户界面详解(GUI,Tkinter)

文章目录

  • 1 概述
    • 1.1 TK:窗口
    • 1.2 官方文档
  • 2 组件
    • 2.1 Label:标签
    • 2.2 Button:按钮
    • 2.3 Entry:输入
    • 2.4 Text:文本
    • 2.5 Radiobutton:单选框
    • 2.6 Checkbutton:复选框
    • 2.7 Canvas:画布
    • 2.10 Menu:菜单
  • 3 布局管理器
    • 3.1 pack:包
    • 3.2 grid:网格
    • 3.3 place:位置

1 概述

1.1 TK:窗口

import tkinter# 定义窗口对象
window = tkinter.Tk()# 设置窗口属性
window.title('我的第一个 GUI 程序')  # 标题
window.geometry('300x100+300+200')  # 位置及大小
# 格式:'wxh +-x +-y',其中
# wxh:表示 宽x高(字母 xyz 的 x)
#  +x:表示距屏幕左边的距离;-x 表示距屏幕右边的距离
#  +y: 表示距屏幕上边的距离;-y 表示距屏幕下边的距离# 主循环:窗口一直存在(除非被关闭)
window.mainloop()

1.2 官方文档

  • 官方文档:https://docs.python.org/3.9/library/tk.html

2 组件

2.1 Label:标签

菜单结构:
在这里插入图片描述

from tkinter import *class Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""self.label01 = Label(self, text="标签1", width=10, height=2, bg="black", fg="white")self.label01.pack()self.label02 = Label(self, text="标签2", width=10, height=2, bg="blue", fg="white", font=("黑体", 20))self.label02.pack()# 显示文本self.label03 = Label(self, text="段落1\n段落段落2\n段落段落段落3", borderwidth=1, relief="solid", justify="right")self.label03.pack()# 显示图片global photophoto = PhotoImage(file="images/1.gif")  # 暂支持的图片格式:png、gifself.label04 = Label(self, image=photo)self.label04.pack()if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x300+200+300")app = Application(master=window)window.mainloop()

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

2.2 Button:按钮

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""# 常规按钮self.btn01 = Button(self, text="登录", command=self.login)self.btn01.pack()self.btn02 = Button(self, text="登录2", command=self.login)self.btn02.config(state="disabled")  # 禁止登录self.btn02.pack()# 图片按钮global photophoto = PhotoImage(file="images/1.gif")self.btn03 = Button(self, image=photo, command=self.login)self.btn03.pack()def login(self):messagebox.showinfo("提示", "登录成功!")if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

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

2.3 Entry:输入

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""self.label01 = Label(self, text="用户名")self.label01.pack()user_name = StringVar()self.entry01 = Entry(self, textvariable=user_name)self.entry01.pack()self.label02 = Label(self, text="密码")self.label02.pack()password = StringVar()self.entry02 = Entry(self, textvariable=password, show="*")self.entry02.pack()Button(self, text="登录", command=self.login).pack()def login(self):user_name = self.entry01.get()password = self.entry02.get()if user_name == 'admin' and password == '123456':messagebox.showinfo("提示", "登录成功!")else:messagebox.showinfo("提示", "登录失败,请检查用户名或密码!")if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

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

2.4 Text:文本

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""self.text01 = Text(self, width=40, height=10, bg="gray")self.text01.pack()# 插入文本,格式:横坐标.纵坐标self.text01.insert(1.0, 'aaaaaaaaaaaaaaaa\nbbbbbbbbbbbbb')self.text01.insert(2.3, 'cccccccccccccccc\neeeeeeeeeeeee')Button(self, text="重复插入文本", command=self.insert_text).pack(side="left")def insert_text(self):self.text01.insert(INSERT, '鼠标光标处插入')self.text01.insert(END, '文本最后处插入')if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

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

2.5 Radiobutton:单选框

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""self.default = StringVar()self.default.set("F")rb1 = Radiobutton(self, text="男性", value="M", variable=self.default)rb2 = Radiobutton(self, text="女性", value="F", variable=self.default)rb1.pack(side="left")rb2.pack(side="left")Button(self, text="确定", command=self.confirm).pack()def confirm(self):messagebox.showinfo("提示", "选择的性别的是:" + self.default.get())if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

在这里插入图片描述

2.6 Checkbutton:复选框

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""self.code = IntVar()self.video = IntVar()print(self.code.get())  # 整数默认值是 0# onvalue=1, offvalue=0 表示:选中=1,未选中=0cb1 = Checkbutton(self, text="敲代码", variable=self.code, onvalue=1, offvalue=0)cb2 = Checkbutton(self, text="看视频", variable=self.video, onvalue=1, offvalue=0)cb1.pack(side="left")cb2.pack(side="left")Button(self, text="确定", command=self.confirm).pack()def confirm(self):if self.code.get() == 1:messagebox.showinfo("提示", f"已选中【敲代码】")if self.video.get() == 1:messagebox.showinfo("提示", f"已选中【看视频】")if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

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

2.7 Canvas:画布

from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""canvas = Canvas(self, width=300, height=200)canvas.pack()# 画一条直线。以 横坐标,纵坐标 两个为一组canvas.create_line(10, 10, 30, 20, 40, 50)# 画一个矩形。canvas.create_rectangle(50, 50, 100, 100)# 画一个椭圆canvas.create_oval(50, 50, 100, 100)if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

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

2.10 Menu:菜单

from tkinter import *class Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""menubar = Menu(self.master)# 创建一级菜单file_menu = Menu(menubar, tearoff=0)file_menu.add_command(label='打开')file_menu.add_command(label='新建')menubar.add_cascade(label="文件", menu=file_menu)# 创建二级菜单(三级菜单同理)edit_menu = Menu(file_menu, tearoff=0)edit_menu.add_command(label="修改")edit_menu.add_command(label="保存")file_menu.add_cascade(label="编辑", menu=edit_menu)# 将菜单加至主窗体中self.master.config(menu=menubar)if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x300+200+300")app = Application(master=window)window.mainloop()

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

3 布局管理器

布局管理器布局方式
pack水平、竖直
grid表格
place位置

3.1 pack:包

选项说明取值范围
side停靠方向top(上)、botton(下)、left(左)、right(右)
fill填充方式x(水平)、y(垂直)、both(水平+垂直)、none(不填充)
expand扩大方式True(随主窗体的大小变化)、False(不随主窗体变化)
anchor方向N(北)、S(南)、W(西)、E(东)、Center(中心) 等
ipandx、ipandy内边距非负整数
padx、pady外边距非负整数
from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""Button(self, text='A').pack(side=LEFT, expand=YES, fill=Y)Button(self, text='B').pack(side=TOP, expand=YES, fill=BOTH)Button(self, text='C').pack(side=RIGHT, expand=YES, fill=NONE)Button(self, text='D').pack(side=LEFT, expand=NO, fill=Y)Button(self, text='E').pack(side=TOP, expand=YES, fill=BOTH)Button(self, text='F').pack(side=BOTTOM, expand=YES)Button(self, text='G').pack(anchor=SE)if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

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

3.2 grid:网格

选项说明取值范围
row单元格的行数从 0 开始的正整数
rowspan跨行,跨越的行数正整数
column单元格的列号从 0 开始的正整数
columnspan跨列,跨越的列数正整数
ipandx,ipandy子组件之间的间隔,按x、y 方向非负浮点数,默认 0.0
pandx,pandy并列组件之间的间隔,按x、y 方向非负浮点数,默认 0.0
sticky组件紧贴所在单元格的某一个角,如:东西南北等n、s、w、e、nw、sw、se、ne、center(默认)
from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""self.label01 = Label(self, text="用户名")self.label01.grid(row=0, column=0)self.entry01 = Entry(self)self.entry01.grid(row=0, column=1)Label(self, text="密码").grid(row=1, column=0)Entry(self, show="*").grid(row=1, column=1)if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

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

3.3 place:位置

选项说明取值范围
x,y组件左上角的绝对坐标(相对于窗口)非负整数
relx,rely组件左上角的相对坐标(相对于父容器)0=最左边,0.5=正中间,1=最右边
width,height组件的宽度和高度(相对于窗口)
relwidth,relheight组件的宽度和高度(相对于父容器)
anchor对齐方式n、s、w、e、nw、ne、sw、se、center(默认)
from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)  # 父类的定义self.master = masterself.pack()self.create_widget()def create_widget(self):"""创建组件"""Button(self.master, text='A').place(x=0, y=0)Button(self.master, text='B').place(x=100, y=100, width=100, height=50)if __name__ == '__main__':window = Tk()window.title("一个经典的GUI程序类的测试")window.geometry("400x200+200+300")app = Application(master=window)window.mainloop()

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/229069.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【100个Cocos实例】完蛋,你看我在刮刮乐中刮到了什么?

引言 什么?还能刮出这个? 相信大家对刮刮乐都不陌生,昨天听到小伙伴说花了20买了张刮刮乐,结果刮中了20,白忙活一场。 假如我们要在Cocos游戏开发中实现刮刮乐效果,应该怎么做呢? 本文将介绍…

【人工智能】人工智能的技术研究与安全问题的深入讨论

前言 人工智能(Artificial Intelligence),英文缩写为AI。 它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是新一轮科技革命和产业变革的重要驱动力量。 📕作者简介&#x…

React 之 airbnb - 项目实战

一、开发前言 1. 规范 2. 创建项目 node -v > 18.0.0 npm -v > 8.6.0 create-react-app star-airbnb 3. 项目基本配置 配置jsconfig.json {"compilerOptions": {"target": "es5","module": "esnext","ba…

CCFCSP试题编号:202109-2试题名称:非零段划分

用差分法 #include<iostream> #include<algorithm> #include<cstring> using namespace std;const int N 500000; const int M 10000; int a[N 2 ] { 0 }; int d[M 1] { 0 };int main() {int n;cin >> n;for (int i 1; i < n; i){cin >&g…

Ubuntu:安装Powershell

Powershell的安装与使用&#xff1a; 1&#xff09;安装Powershell&#xff1a;在终端依次运行以下命令即可&#xff1a; $ sudo apt-get update $ sudo apt-get install -y wget apt-transport-https software-properties-common $ wget -q "https://packages.microsof…

【2023CANN训练营第二季】——Ascend C自定义算子工程介绍及实验

一、自定义算子工程介绍与创建 自定义算子工程是一个包含用户编写的host侧和kerne|侧算子实现文件的&#xff0c;用于编译和安装自定义算子run包的工程框架。 CANN软件包中提供了工程创建工具msopgen&#xff0c;开发者可以输入算子原型定义文件生成Ascend C算子开发工程。 需…

JSP forEach 标签遍历map集合

之前我们说了 普通list 单纯按数量循环 bean类型list的遍历方式 那么 我们forEach标签 也能循环map语法非常简单&#xff0c;和循环list基本是一样的 我们直接上jsp代码 <% page import"java.util.Map" %> <% page import"java.util.HashMap" %…

Java 基础学习(二)运算符与分支流程控制

1 运算符 1.1 运算符概述 1.1.1 运算符概述 运算符是一种告诉计算机执行特定的数学或逻辑等操作的符号。Java运算符号包括&#xff1a;数学运算符、关系运算符、逻辑运算符、赋值运算符号、字符串连接运算符。计算机本质上只能处理数字&#xff0c;处理数字的最常见的方式就…

Zabbix 6 详细安装部署教程

目录 一、安装 MySQL 数据库 二、安装 zabbix 监控平台 三、编辑配置文件 四、启动服务 五、zabbix-web 安装 zabbix web 出图展示乱码问题解决方案 zabbix 的安装部署非常简单&#xff0c;官方提供了四种安装途径&#xff0c;分别是二进制 rpm 包安装方式、源码安装方…

Linux后台运行jar包

Linux后台运行jar包 方式一 命令如下&#xff1a; java -jar /data/tools/jar/demo.jar注&#xff1a;/data/tools/jar&#xff1a;指定jar包所在位置&#xff0c;否则要在jar包所在位置运行改命令&#xff1b;当前ssh窗口被锁定&#xff0c;可按CTRL C打断程序运行&#xf…

idea下载与安装,以及创建一个项目写HelloWorld

1.idea下载 Download IntelliJ IDEA – The Leading Java and Kotlin IDE (jetbrains.com) Ultimate为旗舰版&#xff0c;功能全面&#xff0c;插件丰富&#xff0c;按年收费。 Community为社区版&#xff0c;免费试用&#xff0c;功能相对而言不是很丰富&#xff0c;但是不影…

全网日志智能聚合及问题根因分析

1 日志关联分析的挑战 随着各行各业数字化转型的不断深入&#xff0c;网络承载了人们日常生活所需的政务、金融、娱乐等多方面的业务系统&#xff0c;已经成为影响社会稳定运行、关系国计民生的重要基础设施资源。哪怕网络发生及其微小的故障&#xff0c;也可能带来难以估量的…