热门标签 | 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



推荐阅读
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
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社区 版权所有