Python GUI布局工具Tkinter入门之旅

目录
  • 图形用户界面 (GUI)
  • 用于创建GUI的 Python 库
  • Tkinter 基础
  • Tkinter Widgets
    • Label
    • Button
    • Entry
    • Combobox
    • Checkbutton
    • Radio Button
    • Scrolled Text
    • Message Box
    • SpinBox
    • Geometry
  • 组织布局
  • binding 函数
  • Images 和 Icons
  • 计算器 APP

图形用户界面 (GUI)

图形用户界面 (GUI) 只不过是一个桌面应用程序,可帮助我们与计算机进行交互

  • 像文本编辑器这样的 GUI 应用程序可以创建、读取、更新和删除不同类型的文件
  • 数独、国际象棋和纸牌等应用程序则是游戏版的GUI程序
  • 还有 Google Chrome、Firefox 和 Microsoft Edge 之类的 GUI 应用程序是用来浏览 Internet 的

这些都是我们日常在电脑上使用的一些不同类型的 GUI 应用程序,其实我们通过 Tkinter 也是可以构建简单的类似应用程序的

今天我们作为 GUI 的入门,将创建一个非常简单且漂亮的 GUI 应用程序

用于创建GUI的 Python 库

Python 有大量的第三方类库,对于 GUI 库,主要有以下几种:

  • Kivy
  • Python QT
  • wxPython
  • Tkinter

其中,Tkinter 是很多学习者和开发者的首选,因为它简单易用而且随 Python 安装自带

Tkinter 基础

下面的图片显示了应用程序是如何在 Tkinter 中实际执行

我们首先导入 Tkinter 模型,接着,我们创建主窗口,在这个窗口中,我们将要执行操作并显示一切视觉效果,接下来我们添加 Widgets,最后我们进入 Main Event Loop

这里有 2 个重要的关键字

  • Widgets
  • Main Event Loop

事件循环基本上是告诉代码继续显示窗口,直到我们手动关闭它,是在后台无限循环运行的

对于 Widgets 我们后面单独学习

下面一个代码例子,来深入理解下

import tkinter
window = tkinter.Tk()
# to rename the title of the window window.title("GUI")
# pack is used to show the object in the window
label = tkinter.Label(window, text = "Hello World!").pack()
window.mainloop()

我们导入 Tkinter 包并定义一个窗口,接着我们可以修改一个窗口标题,每当打开应用程序时,该标题都会显示在标题选项卡上

最后,我们还定义了一个标签,标签只不过是需要在窗口上显示的输出,在例子中是 hello world

Tkinter Widgets

那么到底什么是 Widgets 呢

Widgets 类似于 HTML 中的元素,我们可以在 Tkinter 中找到针对不同类型元素的不同类型的 Widgets

让我们看看 Tkinter 中所有这些 Widgets 的简要介绍

  • Canvas - Canvas 用于在 GUI 中绘制形状
  • Button – Button 用于在 Tkinter 中放置按钮
  • Checkbutton – Checkbutton 用于在应用程序中创建复选按钮
  • Entry - Entry 用于在 GUI 中创建输入字段
  • Frame – Frame 在 Tkinter 中用作容器
  • Label - Label 用于创建单行 Widgets,如文本、图像等
  • Menu - Menu 用于在 GUI 中创建菜单

下面让我们逐一看一下每个 Widgets 的用法

Label

标签用于创建文本和图像以及所有相关的,而且要注意的是,它只能是单行定义

l1 = Label(window, text="萝卜大杂烩!", font=("ArialBold", 50))
l1.grid(column=0, row=0)

还有一个函数 geometry,它基本上用于更改窗口大小并根据我们的要求进行设置

l1 = Label(window, text="萝卜大杂烩!", font=("ArialBold", 50))
window.geometry('350x200')

在这种情况下,我们将其设置为宽 350 像素和高 200 像素

接下来是 button

Button

按钮与标签非常相似,我们创建一个变量并使用 Widgets 语法来定义按钮要表达的内容

window.geometry('350x200')
bt = Button(window, text="Enter")

我们还可以更改按钮或任何其他 Widgets 的前景颜色,使用代码中所示的参数 FG。 同样,也可以使用 BG 属性更改背景颜色

bt = Button(window, text="Enter", bg="orange", fg="red")
bt.grid(column=1, row=0)

我们的前景是定义为红色的文本,背景为橙色

下面来看一下点击按钮的操作

def clicked():
    l1.configure(text="按钮被点击了!!")
bt = Button(window, text="Enter", bg="orange", fg="red", command=clicked)

这个我们称之为点击事件,我们需要编写有关单击按钮或触发单击事件时应该发生什么的功能

我们定义了一个名为 clicked 的函数,可以显示一条文本消息,我们在按钮定义中添加一个名为 command 的参数,来调用点击事件

Entry

它用于在 GUI 中创建输入字段以接收文本输入

txt = Entry(window, width=10)
txt.grid(column=1, row=0)
def clicked():
    res = "Welcome to " + txt.get()
    l1.configure(text=res)
bt = Button(window, text="Enter", bg="orange", fg="red", command=clicked)

在这里,我们使用 Tkinter Entry 类创建一个文本框,grid 定义我们希望窗口小部件位于何处

同时 clicked 函数接收 Entry 的文本信息

Combobox

这是一个带有某些选项的下拉菜单

from tkinter.ttk import *
combo = Combobox(window)
combo['values']= (1, 2, 3, 4, 5, "Text")
combo.current(3)
combo.grid(column=0, row=0)

这样一个下拉菜单就完成了

Checkbutton

复选按钮是非常常用的组件

chk_state = BooleanVar()
chk_state.set (True)
chk = Checkbutton(window, text="Select", var=chk_state)
chk.grid(column=4, row=0)

我们首先创建一个 booleanvar 类型的变量,这是一个 Tkinter 变量

默认情况下,我们将设置状态保持为 true,这代表按钮已经被选中 接下来,我们将 chk_state 传递给 checkbutton 类来为我们设置检查状态

Radio Button

单选按钮也是非常常用的

rad1 = Radiobutton(window, text=Python', value=1)
rad2 = Radiobutton(window, text=Java', value=2)
rad3 = Radiobutton(window, text=Scala', value=3)
rad1.grid(column=0, row=0)
rad2.grid(column=1, row=0)
rad3.grid(column=2, row=0)

在这里,我们使用了不同的参数值,1,2和3,如果它们相同,则会导致冲突并出现错误

它们的文本数据是可以相同,在这里,我们使用了 Python、Java 和 Scala

Scrolled Text

滚动文本组件

scro_txt = scrolledtext.ScrolledText(window, width=40,height=10)
scro_txt.grid(column=0, row=4)

我们指定了窗口的高和宽,否则默认会填充整个 Windiws 窗口

Message Box

消息组件可以方便的弹出提醒消息

def clicked():
    messagebox.showinfo('Message title', 'Message content')
btn = Button(window,text=‘ENTER', command=clicked)

SpinBox

Spinbox 也是一个常见的组件,有两个选项卡,存在向上和向下滚动选项卡

pin = Spinbox(window, from_=0, to=100, width=5)

有 3 个参数——from、to 和 width

  • From – 告诉我们范围的开始和默认值
  • to – 给我们范围的上限阈值
  • width 基本上是将 widget 的大小设置为5个字符的空格

Geometry

Tkinter 中的所有 Widgets 都会有一些位置信息,这些度量使得我们可以组织 Widgets 及其父框架、窗口等

Tkinter 具有以下三个布局方式

  • pack():- 它在块中组织 Widgets,这意味着它占据了整个可用宽度,这是在窗口中显示 Widgets 的标准方法
  • grid():- 它以类似表格的结构组织 Widgets
  • place():- 它将 Widgets 放置在我们想要的特定位置

组织布局

为了在窗口中安排布局,我们将使用 Frame 类

  • Frame -- 在窗口中创建分区,我们可以根据需要使用 pack() 方法的侧面参数对齐框架
  • Button -- 在窗口中创建一个按钮,需要传递几个参数,如文本(按钮的值)、fg(文本的颜色)、bg(背景颜色)

在下面的代码中,我们使用 window、top_frame、bottom_frame 来布局

import tkinter
window = tkinter.Tk()
window.title("GUI")
# creating 2 frames TOP and BOTTOM
top_frame = tkinter.Frame(window).pack()
bottom_frame = tkinter.Frame(window).pack(side = "bottom")
# now, create some widgets in the top_frame and bottom_frame
btn1 = tkinter.Button(top_frame, text = "Button1", fg = "red").pack()# 'fg - foreground' is used to color the contents
btn2 = tkinter.Button(top_frame, text = "Button2", fg = "green").pack()# 'text' is used to write the text on the Button
btn3 = tkinter.Button(bottom_frame, text = "Button2", fg = "purple").pack(side = "left")# 'side' is used to align the widgets
btn4 = tkinter.Button(bottom_frame, text = "Button2", fg = "orange").pack(side = "left")
window.mainloop()

再来看一个登录的小栗子

import tkinter
window = tkinter.Tk()
window.title("GUI")
# creating 2 text labels and input labels
tkinter.Label(window, text = "Username").grid(row = 0) # this is placed in 0 0
# 'Entry' is used to display the input-field
tkinter.Entry(window).grid(row = 0, column = 1) # this is placed in 0 1
tkinter.Label(window, text = "Password").grid(row = 1) # this is placed in 1 0
tkinter.Entry(window).grid(row = 1, column = 1) # this is placed in 1 1
# 'Checkbutton' is used to create the check buttons
tkinter.Checkbutton(window, text = "Keep Me Logged In").grid(columnspan = 2) # 'columnspan' tells to take the width of 2 columns
# you can also use 'rowspan' in the similar manner
window.mainloop()

下面我们来了解 binding 函数

binding 函数

每当事件发生时调用函数就是绑定函数

在下面的示例中,当单击按钮时,它会调用一个名为 say_hi 的函数。 函数 say_hi 会创建一个带有文本 Hi 的新标签

import tkinter
window = tkinter.Tk()
window.title("GUI")
# creating a function called say_hi()
def say_hi():
    tkinter.Label(window, text = "Hi").pack()
tkinter.Button(window, text = "Click Me!", command = say_hi).pack() # 'command' is executed when you click the button
# in this above case we're calling the function 'say_hi'.
window.mainloop()

另一种绑定函数的方法是使用事件,事件类似于鼠标移动、鼠标悬停、单击和滚动等等

import tkinter
window = tkinter.Tk()
window.title("GUI")
# creating a function with an arguments 'event'
def say_hi(event): # you can rename 'event' to anything you want
    tkinter.Label(window, text = "Hi").pack()
btn = tkinter.Button(window, text = "Click Me!")
btn.bind("Button-1", say_hi) # 'bind' takes 2 parameters 1st is 'event' 2nd is 'function'
btn.pack()
window.mainloop()

单击事件有 3 种不同的类型,分别是 leftClick、middleClick 和 rightClick

下面的代码将使用对于的文本创建一个新标签

import tkinter
window = tkinter.Tk()
window.title("GUI")
#creating 3 different functions for 3 events
def left_click(event):
    tkinter.Label(window, text = "Left Click!").pack()
def middle_click(event):
    tkinter.Label(window, text = "Middle Click!").pack()
def right_click(event):
    tkinter.Label(window, text = "Right Click!").pack()
window.bind("Button-1", left_click)
window.bind("Button-2", middle_click)
window.bind("Button-3", right_click)
window.mainloop()

Images 和 Icons

我们可以使用 PhotoImage 方法添加图像和图标

import tkinter
window = tkinter.Tk()
window.title("GUI")
# taking image from the directory and storing the source in a variable
icon = tkinter.PhotoImage(file = "4.PNG")
# displaying the picture using a 'Label' by passing the 'picture' variriable to 'image' parameter
label = tkinter.Label(window, image = icon)
label.pack()
window.mainloop()

好了,进步的 Tkinter 知识我们都梳理完毕了,下面就完成一个简单的实战项目吧

计算器 APP

首先初始化页面

window = Tk()
window.geometry("350x380")
window.resizable(0, 0)  # this prevents from resizing the window
window.title("小小计算器")

接下来定义输入数字框

input_text = StringVar()
input_frame = Frame(window, width=312, height=50, bd=0, highlightbackground="black", highlightcolor="black",
                    highlightthickness=1)
input_frame.pack(side=TOP)
input_field = Entry(input_frame, font=('arial', 18, 'bold'), textvariable=input_text, width=50, bg="#eee", bd=0,
                    justify=RIGHT)
input_field.grid(row=0, column=0)
input_field.pack(ipady=10)

然后定义按钮方法,我们以清除按钮和除法按钮为例

clear = Button(btns_frame, text="C", fg="black", width=32, height=3, bd=0, bg="#eee", cursor="hand2",
               command=lambda: btn_clear()).grid(row=0, column=0, columnspan=3, padx=1, pady=1)
divide = Button(btns_frame, text="/", fg="black", width=10, height=3, bd=0, bg="#eee", cursor="hand2",
                command=lambda: btn_click("/")).grid(row=0, column=3, padx=1, pady=1)

最后就是计算equal逻辑

equals = Button(btns_frame, text="=", fg="black", width=10, height=3, bd=0, bg="#eee", cursor="hand2",
               command=lambda: btn_equal()).grid(row=4, column=3, padx=1, pady=1)
def btn_equal():
   global expression
   result = str(eval(expression))
   input_text.set(result)
   expression = ""

好了,让我看下最终的效果吧,虽然页面很简陋,但是加减乘除这些基本运算还是包含了的

以上就是Python GUI布局工具Tkinter入门之旅的详细内容,更多关于Python GUI布局Tkinter的资料请关注我们其它相关文章!

(0)

相关推荐

  • 实现Python图形界面框架TkInter写GUI界面应用简介过程操作

    前言 它的底层是Tcl/Tk,先用起来再说,另外Python毕竟是面向对象语言,所以全文会使用到class和对象,尽量日后能满足开发项目的需求. (备注:Tcl/Tk 是一种简明,高效,可移植性好的编程语言.在信息产业领域具有广泛的应用.) Hello World 从Hello World写起,涉及到一个简单的文本控件Label,当然控件需要显示的容器,此处我们将其显示在一个Window上,也会使用一种布局方式pack() import tkinter as tk class RootWindo

  • Python GUI之tkinter详解

    展示 import tkinter if __name__ == '__main__': win = tkinter.Tk() #设置标题 win.title("我的世界") #设置宽和高 win.geometry('800x600') #创建画布,设置背景色,高,宽 canvas = tkinter.Canvas(win,bg='#EBEBEB',width=800,height=1200,xscrollincrement = 1, yscrollincrement = 1) x0,

  • Python GUI之tkinter布局管理教程

    目录 pack常用属性 pack类提供了下列函数(使用组件实例对象调用) grid属性设置 grid类提供了下列函数(使用组件实例对象调用) place属性设置 place类提供了下列函数(使用组件实例对象调用) 所谓布局,就是指控制窗体容器中各个控件(组件)的位置关系. tkinter 共有三种几何布局管理器,分别是: pack布局 grid布局 place布局 pack布局使用 pack布局,将向容器中添加组件,第一个添加的组件在最上方,然后是依次向下添加. from tkinter imp

  • Python GUI编程学习笔记之tkinter界面布局显示详解

    本文实例讲述了Python GUI编程学习笔记之tkinter界面布局显示.分享给大家供大家参考,具体如下: 相关内容: pack 介绍 常用参数 使用情况 常用函数 grid 介绍 常用参数 使用情况 常用函数 place 介绍 常用参数 使用情况 常用函数 首发时间:2018-03-04 14:20 pack: 介绍: pack几何管理器按行或列打包小部件. 可以使用填充fill,展开expand和靠边side等选项来控制此几何体管理器. pack的排放控件的形式就像将一个个控件按大小从上到

  • python 实现围棋游戏(纯tkinter gui)

    1. 开始前 本程序基于tkinter生成GUI,使用前请确保已经安装好tkinter 对于windows用户,您可能已经安装了tkinter,cmd中输入python -c 'import tkinter',如果没有出错则已安装tkinter 对于linux用户,您可能未安装tkinter,使用包管理工具搜索tkinter,如:apt search tkinter,pacman -Ss tkinter,yum search tkinter,选择符合要求的软件包,然后安装,如果未找到,请自行下载

  • python项目--使用Tkinter的日历GUI应用程序

    目录 第一步:安装 Tkinter 第二步:导入模块 第三步:显示给定年份日历 第四步:设置驱动代码 第五步:输出日历 GUI 总结 第一步:安装 Tkinter 首先使用以下命令安装 Tkinter: pip install tk 我们还需要一个日历包,但我们不必安装它,它是python自带的默认包. 第二步:导入模块 首先导入 calendar 模块和 tkinter 模块 import calendar from tkinter import * 第三步:显示给定年份日历 下面的函数显示给

  • Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解

    目录 1.项目介绍 2.快速上手 3.官方文档介绍 接口文档(APIDocumentation) 主题(Themes) 画廊(Gallery) 1.项目介绍 ttkbootstrap 是一个基于 tkinter 的界面美化库,使用这个工具可以开发出类似前端 bootstrap 风格的 tkinter 桌面程序.如果会 tkinter 学习起来就会非常简单,如果不会的话只要先花两三天的时间系统学习一下 tkinter 之后再来使用 bootstrap 也是一样. ttkbootstrap 不仅有丰

  • Python GUI布局工具Tkinter入门之旅

    目录 图形用户界面 (GUI) 用于创建GUI的 Python 库 Tkinter 基础 Tkinter Widgets Label Button Entry Combobox Checkbutton Radio Button Scrolled Text Message Box SpinBox Geometry 组织布局 binding 函数 Images 和 Icons 计算器 APP 图形用户界面 (GUI) 图形用户界面 (GUI) 只不过是一个桌面应用程序,可帮助我们与计算机进行交互 像

  • 详解Python GUI编程之PyQt5入门到实战

    1. PyQt5基础 1.1 GUI编程学什么 大致了解你所选择的GUI库 基本的程序的结构:使用这个GUI库来运行你的GUI程序 各种控件的特性和如何使用 控件的样式 资源的加载 控件的布局 事件和信号 动画特效 界面跳转 设计工具的使用 1.2 PyQT是什么 QT是跨平台C++库的集合,它实现高级API来访问现代桌面和移动系统的许多方面.这些服务包括定位和定位服务.多媒体.NFC和蓝牙连接.基于Chromium的web浏览器以及传统的UI开发.PyQt5是Qt v5的一组完整的Python

  • Python GUI布局尺寸适配方法

    如下所示: #coding=utf-8 #布局自定义尺寸 from tkinter import * class App: def __init__(self,master): frame=Frame(master) frame.pack(fill=BOTH,expand=1) listbox=Listbox(frame) #listbox=Listbox(frame,height=3,selectmode=BROWSE) #curselection() for item in ['red','

  • 这可能是最好玩的python GUI入门实例(推荐)

    简单的说,GUI编程就是给程序加上图形化界面. python的脚本开发简单,有时候只需几行代码就能实现丰富的功能,而且python本身是跨平台的,所以深受程序员的喜爱. 如果给程序加一个图形化界面,那么普通的用户也就能用上python的脚本,极大提升工作效率,所以给python程序加上图形化界面,把自己写的脚本,提供给普通用户,的确是一件激动人心的事! 如何给python脚本加图形化界面? 作者首先考虑了通过浏览器运行python的图形化界面,为了理想的效果,python需要借助javascri

  • Python GUI之tkinter窗口视窗教程大集合(推荐)

    一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 二.Tkinter是什么 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.作为 python 特定的GUI界面,是一个图像的窗口,tkinter是python 自带的,可以编辑的GUI界面,我们可以用GUI 实现很多直观的功能,比如想开发一个计算器,如果只是一个程序输入,输

  • Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解

    本文实例讲述了Python GUI编程学习笔记之tkinter中messagebox.filedialog控件用法.分享给大家供大家参考,具体如下: 相关内容: messagebox 介绍 使用 filedialog 介绍 使用 首发时间:2018-03-04 22:18 messagebox: 介绍:messagebox是tkinter中的消息框.对话框 使用: 导入模块:import tkinter.messagebox 选择消息框的模式: 提示消息框:[返回"ok"] tkint

  • Python GUI编程学习笔记之tkinter事件绑定操作详解

    本文实例讲述了Python GUI编程学习笔记之tkinter事件绑定操作.分享给大家供大家参考,具体如下: 相关内容: command bind protocol 首发时间:2018-03-04 19:26 command: command是控件中的一个参数,如果使得command=函数,那么点击控件的时候将会触发函数 能够定义command的常见控件有: Button.Menu- 调用函数时,默认是没有参数传入的,如果要强制传入参数,可以考虑使用lambda from tkinter imp

随机推荐