热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythongui图形界面设计,Tkinter图形界面设计(GUI)

【因为这是我第一个接触的GUI图形界面python库,现在也不用了,所以大多数内容都来自之前花钱买的一些快速入门的内容,可以当作简单的知识

【因为这是我第一个接触的GUI图形界面python库,现在也不用了,所以大多数内容都来自之前花

钱买的一些快速入门的内容,可以当作简单的知识点查询使用】

在此声明:内容来自微信公众号GitChat,付费内容

目录

简介

作为 Python 开发者,图形用户界面(GUI)开发是必备技能之一。目前,市面上支持

Python 的“GUI 工具包”很多,各有特点,虽然大多数工具包的基础类似,但要学习一个

新包并掌握其细节还是非常耗时的,因此,在选用工具包时应仔细权衡。本文将介绍

Python 自带的 GUI 工具包 TKinter。

TKinter

Python 的 GUI 库非常多,之所以选择 Tkinter,一是最为简单,二是自带库,不需下载

安装,随时使用,跨平台兼容性非常好,三则是从需求出发的,Python 在实际应用中极

少用于开发复杂的桌面应用,毕竟,Python 的各种 GUI 工具包都“一般得很”,不具备优

势。

关于 GUI,泛泛而谈难免枯燥,鉴于此,本文将基于一系列实例来介绍 Tkinter 控件。

窗口创建与布局

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

from tkinter import *

#初始化Tk()

myWindow =Tk()#进入消息循环

myWindow.mainloop()

上述程序创建的窗口是非常简陋的,有待进一步美化,设置标题、窗口大小、窗口是否

可变等,涉及属性有:title(设置窗口标题)、 geometry(设置窗口大小)、

resizable(设置窗口是否可以变化长 宽)。请看如下实例:

48304ba5e6f9fe08f3fa1abda7d326ab.png

from tkinter importTk#初始化Tk()

myWindow =Tk()#设置标题

myWindow.title('Python GUI Learning')#设置窗口大小

myWindow.geometry('380x300')#设置窗口是否可变长、宽,True:可变,False:不可变

myWindow.resizable(width=False, height=True)#进入消息循环

myWindow.mainloop()

48304ba5e6f9fe08f3fa1abda7d326ab.png

进一步,将窗口放置于屏幕中央,如下实例:

48304ba5e6f9fe08f3fa1abda7d326ab.png

from tkinter importTk#初始化Tk()

myWindow =Tk()#设置标题

myWindow.title('Python GUI Learning')#设置窗口大小

width = 380height= 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()

48304ba5e6f9fe08f3fa1abda7d326ab.png

常用控件

仅有窗口并不能实现交互,还需要控件,Tkinter 提供了各种控件,如按钮、标签和文本

框。在一个 GUI 应用程序中使用,这些控件通常被称为控件或者部件,目前有15种

Tkinter 部件,如下列表:

37c29f1776b0eb9b6c6efa0dd039d72e.png

几何管理

Tkinter 控件有特定的几何状态管理方法,管理整个控件区域组织,以下是 Tkinter 公开

的几何管理类:包、网格、位置。

003a92c70a7c4068e182fa3d366f541e.png

Lable控件标签控件,基本用法为:  Lable(root, option...) ,即:Label(根对象, [属性列表]),

其中属性列表如下:

7c8bbd59a0d0ae3f962efa5b4fa81f2b.png

Lable 控件实例

实例1:标签展示文本,代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

from tkinter import*

#初始化Tk()

myWindow =Tk()#设置标题

myWindow.title('Python GUI Learning')#创建一个标签,显示文本

Label(myWindow, text="user-name",bg='red',font=('Arial 12 bold'),width=20,height=5).pack()

Label(myWindow, text="password",bg='green',width=20,height=5).pack()#进入消息循环

myWindow.mainloop()

48304ba5e6f9fe08f3fa1abda7d326ab.png

执行结果:

c0ecbda9a7ab5163e112ce298d50f0ac.png

实例2:标签展示图标,代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

from tkinter import*

#初始化Tk()

myWindow =Tk()#设置标题

myWindow.title('Python GUI Learning')#创建一个标签,显示图标

logo = PhotoImage(file="/Users/guojin/book/temp.gif")

Label(myWindow, image=logo).pack(side='left')#进入消息循环

myWindow.mainloop()

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果:

c35734819dddb8de50d7810a3742f144.png

实例3:标签图文混叠,边距控制,代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

from tkinter import*

#初始化Tk()

myWindow =Tk()#设置标题

myWindow.title('Python GUI Learning')#创建一个标签,显示文本

logo = PhotoImage(file="/Users/guojin/book/temp.gif")

explanation= """At present, only GIF and PPM/PGM

formats are supported, but an interface

exists to allow additional image file

formats to be added easily."""Label(myWindow,compound=CENTER,text=explanation,image=logo).pack(side="right")

#进入消息循环

myWindow.mainloop()

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果:

64a800482fb8342236242dd8082e3859.png

Button控件

Button 控件是一个标准的 Tkinter 部件,用于实现各种按钮。按钮可以包含文本或图

像,还可以关联 Python 函数。

Tkinter 的按钮被按下时,会自动调用该函数。

按钮文本可跨越一个以上的行。此外,文本字符可以有下划线,例如标记的键盘快捷

键。默认情况下,使用 Tab 键可以移动到一个按钮部件,用法如下:

Entry(根对象, [属性列表]),即Entry(root, option...)

常用的属性列表如下:

10bbb9820b19bdbc7a1f14456f54c082.png

Button 实例:

实例1:创建按钮,代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

from tkinter import*

#初始化Tk()

myWindow =Tk()#设置标题

myWindow.title('Python GUI Learning')#创建两个按钮

b1=Button(myWindow, text='button1',bg="red", relief='raised', width=8, height=2)

b1.grid(row=0, column=0, sticky=W, padx=5,pady=5)

b2=Button(myWindow, text='button2', font=('Helvetica 10 bold'),width=8, height=2)

b2.grid(row=0, column=1, sticky=W, padx=5, pady=5)#进入消息循环

myWindow.mainloop()

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果:

be7e24e6415683e807a66c037ea4b7a3.png

实例2:创建按钮并绑定响应函数,输入半径,计算圆面积并输出,代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

from tkinter import*

defprintInfo():#清理entry2

entry2.delete(0, END)#根据输入半径计算面积

R=int(entry1.get())

S= 3.1415926*R*R

entry2.insert(10, S)#清空entry2控件

entry1.delete(0, END)#初始化Tk()

myWindow =Tk()#设置标题

myWindow.title('Python GUI Learning')#标签控件布局

Label(myWindow, text="input").grid(row=0)

Label(myWindow, text="output").grid(row=1)#Entry控件布局

entry1=Entry(myWindow)

entry2=Entry(myWindow)

entry1.grid(row=0, column=1)

entry2.grid(row=1, column=1)#Quit按钮退出;Run按钮打印计算结果

Button(myWindow, text='Quit', command=myWindow.quit).grid(row=2, column=0,sticky=W, padx=5, pady=5)

Button(myWindow, text='Run', command=printInfo).grid(row=2, column=1, sticky=W, padx=5, pady=5)#进入消息循环

myWindow.mainloop()

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果:

23d5a93944f52d543f562d3489e75834.png

输入半径:

533ae250f9cda15caa2abb433b2128f6.png

点击‘Run’计算面积:

aadb8bfdc21c8c4caa1a2a376420a3d3.png

Checkbutton控件Checkbutton 是复选框,又称为多选按钮,可以表示两种状态。用法为: Checkbutton

( root, option, ... ), 其中可选属性 option 有很多,如下表所示:

0d52df82322ab5db0be6b1f0d59e527a.png

以下是这个小工具的常用方法:

867631fa6f7256f1b6b786f19f385921.png

实例1:创建一组复选框,代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

from tkinter import*

#初始化Tk()

myWindow =Tk()#设置标题

myWindow.title('Python GUI Learning')#用来获取复选框是否被勾选,通过chVarDis.get()来获取其的状态,其状态值为int类型 勾选为1

chVarDis =IntVar()#text为该复选框后面显示的名称, variable将该复选框的状态赋值给一个变量,当state='disa

check1 = Checkbutton(myWindow, text="Disabled", variable=chVarDis, state='disabled')

#该复选框是否勾选,select为勾选, deselect为不勾选

check1.select()#sticky=tk.W 当该列中其他行或该行中的其他列的某一个功能拉长这列的宽度或高度时,#设定该值可以保证本行保持左对齐,N:北/上对齐 S:南/下对齐 W:西/左对齐 E:东/右对齐

check1.grid(column=0, row=0, sticky=W)

chvarUn=IntVar()

check2= Checkbutton(myWindow, text="UnChecked", variable=chvarUn)

check2.deselect()

check2.grid(column=1, row=0, sticky=W)

chvarEn=IntVar()

check3= Checkbutton(myWindow, text="Enabled", variable=chvarEn)

check3.select()

check3.grid(column=2, row=0, sticky=W)#进入消息循环

myWindow.mainloop()

48304ba5e6f9fe08f3fa1abda7d326ab.png

实例2:绑定响应函数,代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

from tkinter import*

defcallCheckbutton():#改变v的值,即改变Checkbutton的显示值

v.set('check CheckButton')#初始化Tk()

myWindow =Tk()#设置标题

myWindow.title('Python GUI Learning')

v=StringVar()

v.set('check python')#绑定v到Checkbutton的属性textvariable

Checkbutton(myWindow,textvariable = v,command =callCheckbutton).pack()#进入消息循环

myWindow.mainloop()

48304ba5e6f9fe08f3fa1abda7d326ab.png

Radiobutton控件

单选按钮是一种可在多个预先定义的选项中选择出一项的 Tkinter 控件 。单选按钮可显

示文字或图片,显示文字时只能使用预设字体,该控件可以绑定一个 Python 函数或方

法,当单选按钮被选择时,该函数或方法将被调用。

单选按钮(Radio Button)这个名字来源于收音机(Radio)上的调频按钮, 这些按钮用

来选择特定波段或预设电台,如果一个按钮被按下, 其他同类的按钮就会弹起,即同时

只有一个按钮可被按下。

一组单选按钮控件和同一个变量关联。点击其中一个单选按钮将把这个变量设为某个预

定义的值。一般用法为: Radiobutton(myWindow,options) ,其中 option 与

Checkbutton,Button 大多重合,用法一致。

7f9256d9698e9b0974ba2786f321f844.png

实例:创建单选按钮并绑定响应函数,代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

from tkinter import*

#初始化Tk()

myWindow=Tk()

myWindow.title('Python GUI Learning')

v=IntVar()#列表中存储的是元素是元组

language=[('python',0),('C++',1),('C',2),('Java',3)]#定义单选按钮的响应函数

defcallRB():for i in range(4):if (v.get()==i):

root1=Tk()

Label(root1,text='你的选择是'+language[i][0]+'!',fg='red',width=20, height=6).pack()

Button(root1,text='确定',width=3,height=1,command=root1.destroy).pack(side='bottom')

Label(myWindow,text='选择一门你喜欢的编程语言').pack(anchor=W)#for循环创建单选框

for lan,num inlanguage:

Radiobutton(myWindow, text=lan, value=num, command=callRB, variable=v).pack(anchor=W)#进入消息循环

myWindow.mainloop()

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果:

b256ed6d0c52bfbe4e18174bb165b1a2.png

7b3d5eebffad39e347c80458269b39b3.png

Menu控件

Menu被用来创建一个菜单,创建Menu类的实例,然后使用add方法添加命令或者其他

菜单内容。使用方法如下:

Menu(root,option,…)

其中 option 列表如下:

5e04a9125aa804723a5167a5beb76b20.png

特有函数如下:

fe02250b060948516f16f2e40378af61.png

实例:创建一个菜单组,代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

from tkinter import *

#创建窗口

myWindow=Tk()

myWindow.title("菜单")

myWindow.geometry("400x300+300+100")#创建一个菜单项,类似于导航栏,顶层菜单

menubar=Menu(myWindow)#创建菜单项

fmenu1=Menu(myWindow)for item in ['新建','打开','保存','另存为']:#如果该菜单是顶层菜单的一个菜单项,则它添加的是下拉菜单的菜单项。则他添加的是下拉菜单的菜单项。

fmenu1.add_command(label=item)

fmenu2=Menu(myWindow)for item in ['复制','粘贴','剪切']:

fmenu2.add_command(label=item)

fmenu3=Menu(myWindow)for item in ['大纲视图','web视图']:

fmenu3.add_command(label=item)

fmenu4=Menu(myWindow)for item in ["版权信息","其它说明"]:

fmenu4.add_command(label=item)#add_cascade 的一个很重要的属性就是 menu 属性,它指明了要把那个菜单级联到该菜单项上,#当然,还必不可少的就是 label 属性,用于指定该菜单项的名称

menubar.add_cascade(label="文件",menu=fmenu1)

menubar.add_cascade(label="编辑",menu=fmenu2)

menubar.add_cascade(label="视图",menu=fmenu3)

menubar.add_cascade(label="关于",menu=fmenu4)#最后可以用窗口的 menu 属性指定我们使用哪一个作为它的顶层菜单

myWindow.config(menu=menubar)#进入消息循环

myWindow.mainloop()

48304ba5e6f9fe08f3fa1abda7d326ab.png

运行结果:

b72e76912407ac06a0cf7e60610c8cba.png

3251ca0dc8f29bbed130691f3d0c99e3.png

Message控件

Message 控件用来展示一些文字短消息。Message 和 Label 控件有些类似, 但在展示文

字方面比 Label 要灵活,比如 Message 控件可以改变字体,而 Label 控件只能使用一种

字体,它提供了一个换行对象,以使文字可以断为多行。

它可以支持文字的自动换行及对齐,这里要澄清一下前面提到的 Message 控件可以改变

字体的说法: 这是说我们可以为单个控件设置任意字体, 控件内的文字都将显示为该字

体,但我们不能给单个控件内的文字设置多种字体,如果你需要这么做,可以考虑使用

Text 控件。

创建一个 Message 控件的语法如下:

w = Message ( root, option, ... )

其中 option 列表如下:

30092a033871078d813346937c428414.png

请看下面实例:

48304ba5e6f9fe08f3fa1abda7d326ab.png

from tkinter import *

#初始化Tk()

myWindow=Tk()#创建一个Message

whatever_you_do = "Only those who have the patience to do simple things per

msg = Message(myWindow, text =whatever_you_do)

msg.config(bg='lightgreen', font=('times', 20, 'italic'))

msg.pack( )#进入消息循环

myWindow.mainloop()

48304ba5e6f9fe08f3fa1abda7d326ab.png



推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
author-avatar
手机用户2502896067
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有