python从入门到实践————图形界面(上)

简介: python从入门到实践————图形界面(上)

前言


图形用户接口(Graphical User Interface,GUI)是人机交互的重要技术手段,在Python中利用tkinter模块就可以方便地实现图形界面。

在你python中,除了本次要讲的tkinter模块,还有wxPython,PyQt5模块,以及与Java图形界面组件衔接的Jpython模块。由于图形编程一般都是单机版程序,而Python技术的发展重点并不在此,所以这里就只简单的介绍tkinter模块。


窗体组件


序号

组件

描述

1

Button

按钮组件,在界面中显示一个按钮

2

Canvas

画布组件,在界面中显示一个画布,而后在此画布上进行绘画

3

Checkbutton

多选框组件,可以实现多个选项的选定

4

Entry

输入控件,用于显示简单的文本内容

5

Frame

框架控件,在进行排版时实现子排版模型

6

Label

标签组件,可以显示文字或图片信息

7

Listbox

列表框组件,可以显示多个列表项

8

Menu

菜单组件,在界面上端显示菜单栏,下拉菜单或弹出菜单

9

Menubutton

菜单按钮组件,为菜单定义菜单项

10

Message

消息组件,用来显示提示信息

11

Radiobutton

单选按钮组件,可以实现单个菜单项的选定

12

Scale

滑动组件,设置数值的可用范围,通过滑动切换数值

13

Scrollbar

滑动条组件,为外部包装组件,当有多个内容显示不下时,可以出现滚动条

14

Text

文本组件,可以实现文本或图片信息的提示

15

Toplevel

容器组件,可以实现对话框

16

Spinbox

输入组件,与Entry对应,可以设置数据输入访问

17

PanedEindow

窗口布局组件,可以在内部提供一个子容器实现子窗口定义

18

LabelFrame

容器组件,实现复杂组件布局

19

tkMessageBox

消息组件,可以进行提示框的显示


窗体显示


任何一个图形界面都会包含有一个主窗体,在主窗体内可以设置不同的组件,在tkinter模块中提供了Tk类,该类可以负责窗体的创建以及相关的属性定义。tkinter.Tk类中提供的常用方法如表


序号

方法

描述

1

def title(self,string=None)

设置窗体显示标题

2

def iconbitmap(self,bitmap=None,default=None)

设置窗体LOGO

3

def geometry(self,newGeometry=None)

设置窗体大小

4

def minsize(self,width=None,height=None)

设置窗体最小化尺寸

5

def maxsize(self,width=None,height=None)

设置窗体最大化尺寸

6

def mainloop(self,n=0)

界面循环及时显示窗体变化


显示窗体


import tkinter
import os
LOGO_PATH='./123.png'
IMAGE_PATH='./123.png'
class MainForm:
    def __init__(self) -> None:
        root=tkinter.Tk() #创建窗体;
        root.title('one.py')
        root.iconbitmap(LOGO_PATH) #设置窗体图标
        root.geometry("500x600")  #设置窗体大小,这里的x是小写的x,不是乘号;
        root.maxsize(1000,400)
        root.minsize(200,50)
        root['background']='LightSlateGray' #设置背景颜色;
        label_text=tkinter.Label(root,text='2023继续加油;',width=200,height=100,bg='#223011',
            font=('宋体',20),justify='right')
        photo=tkinter.PhotoImage(file=IMAGE_PATH)
        label_photo=tkinter.Label(root,image=photo)
        label_photo.pack()#图片标签展示;
        label_text.pack()
        root.mainloop()  #界面循环监听;
def main():
    MainForm()
if __name__=='__main__':
    main()


 


结果显示:


e16b9ad3433816e434a1e37e08998712_deffa0931173420a831b284e7602128a.png



文本显示


# coding:用户界面GUI
import tkinter,os
import time
IMAGE_PATH='./123.png'
class MainForm:
    def __init__(self) -> None:
        root=tkinter.Tk()  #创建窗体;
        root.geometry("500x400")  #窗口的大小
        root.title('用户界面的设计')
        root.maxsize(1000,600)
        root['background']='LightSlateGray'
        Text=tkinter.Text(root,width=20,height=50,font=('宋体',20))
        Text.insert('current',"加油!")#在光标处插入数据;
        Text.insert('end',"追梦人")
        photo=tkinter.PhotoImage(file=IMAGE_PATH) #加载图片;
        Text.image_create("end",image=photo)#图片的设置;
        Text.pack() #循环监听;
        root.mainloop()
def main():
    MainForm()
if __name__=='__main__':
    main()




结果显示:


14821edc5590756dd8c7820803941965_9a98a08408c1406fb9509e6c94754c02.png


由于界面编程主要就是函数的使用,没法过多的介绍,函数的使用已经做了注释。这里就简单的对两个函数的使用作了介绍。


项目实践


由于函数太多,每个都介绍所需篇幅过长,这里以一个项目来对函数使用做介绍。项目已经打包成exe文件放在了资源中。有兴趣可以去尝试。

源代码:


#coding:Frame事件
import tkinter,os,tkinter.messagebox
#在同一个界面中,由于我们可能需要不同的组件,不同的组件需要的页面布局也是不一样的
#Frame可以使页面分成多个子页面,每个子页面都可以使用不同的布局方式
import re
#IMAGE_PATH='./123.png'
class MainForm:
    def __init__(self) -> None:
        self.__root=tkinter.Tk() #创建窗体
        self.__root.title('计算器')
        self.__root.geometry('231x280')
        #self.__photo=tkinter.PhotoImage(file=IMAGE_PATH)
        self.__root['background']='Ligh tSlateGray'
        self.input_frame() #显示输入Frame
        self.button_frame() #显示按钮组件
        self.__root.protocol('WM_DELETE_WINDOW',self.close_handle)
        self.__root.mainloop() #循环监听
    def close_handle(self):
        if tkinter.messagebox.askyesnocancel('计算器关闭确认','确定要关闭计算器'):
            self.__root.destroy()
    def input_frame(self): #输入和回显文本
        self.input_frame=tkinter.Frame(self.__root,width=20) #定义Frame
        self.content=tkinter.StringVar() #修改数据
        self.entry=tkinter.Entry(self.input_frame,width=14,font=('微软雅黑',20),textvariable=self.content)#定义输入框
        self.entry.pack(fill='x',expand=1)#文本显示
        self.clean=False  #设置清除标记
        self.input_frame.pack(side='top') #Frame显示
    def button_frame(self):
        self.button_frame=tkinter.Frame(self.__root,width=50)#创建Frame
        self.button_list=[[],[],[],[]]#定义按钮组件
        self.button_list[0].append(tkinter.Button(self.button_frame,text='1',fg='black',width=3,font=('微软雅黑',20)))#计算器按键1
        self.button_list[0].append(tkinter.Button(self.button_frame,text='2',fg='black',width=3,font=('微软雅黑',20))) #计算器按键2
        self.button_list[0].append(tkinter.Button(self.button_frame,text='3',fg='black',width=3,font=('微软雅黑',20))) #计算器按键3
        self.button_list[0].append(tkinter.Button(self.button_frame,text='+',fg='black',width=3,font=('微软雅黑',20))) #计算器按键+
        self.button_list[1].append(tkinter.Button(self.button_frame,text='4',fg='black',width=3,font=('微软雅黑',20))) #计算器按键4
        self.button_list[1].append(tkinter.Button(self.button_frame,text='5',fg='black',width=3,font=('微软雅黑',20)))
        self.button_list[1].append(tkinter.Button(self.button_frame,text='6',fg='black',width=3,font=('微软雅黑',20)))
        self.button_list[1].append(tkinter.Button(self.button_frame,text='-',fg='black',width=3,font=('微软雅黑',20)))
        self.button_list[2].append(tkinter.Button(self.button_frame,text='7',fg='black',width=3,font=('微软雅黑',20))) 
        self.button_list[2].append(tkinter.Button(self.button_frame,text='8',fg='black',width=3,font=('微软雅黑',20)))
        self.button_list[2].append(tkinter.Button(self.button_frame,text='9',fg='black',width=3,font=('微软雅黑',20)))
        self.button_list[2].append(tkinter.Button(self.button_frame,text='*',fg='black',width=3,font=('微软雅黑',20)))
        self.button_list[3].append(tkinter.Button(self.button_frame,text='0',fg='black',width=3,font=('微软雅黑',20)))
        self.button_list[3].append(tkinter.Button(self.button_frame,text='.',fg='black',width=3,font=('微软雅黑',20)))
        self.button_list[3].append(tkinter.Button(self.button_frame,text='=',fg='black',width=3,font=('微软雅黑',20)))
        self.button_list[3].append(tkinter.Button(self.button_frame,text='/',fg='black',width=3,font=('微软雅黑',20)))
        self.row=0#布局行控制
        for group in self.button_list:
            self.column=0#布局列控制
            for button in group:#获取按钮组中的按钮
                button.bind("<Button-1>",lambda event:self.button_handle(event))  #绑定事件
                button.grid(row=self.row,column=self.column)#grid布局
                self.column+=1 #修改布局列
            self.row+=1 #修改布局行
            self.button_frame.pack(side='bottom') #pack布局
    def button_handle(self,event): 
        oper=event.widget['text'] #获得当前操作符
        if self.clean:
            self.content.set("")#删除输入框数据
            self.clean=False#修改清除标记
        if oper !='=':
            self.entry.insert('end',oper)
        elif oper=='=':
            result=0
            exp=self.entry.get()  #获得输入表达式数据
            nums=re.split(r"\+|\-|\*|\\",exp) #获得输入的两个数据
            pattern=r"\+|\-|\*|\\"  #操作符提取准则
            flag=re.findall(pattern,exp)[0]  #获取操作符
            if flag=='+':
                result=float(nums[0])+float(nums[1]) #加法运算
            elif flag=='-':
                result=float(nums[0])-float(nums[1])
            elif flag=='*':
                result=float(nums[0])*float(nums[1])
            elif flag=='/':
                result=float(nums[0])/float(nums[1])
            self.entry.insert('end',"=%s" % result)
            self.clean=True
def main():
    MainForm()
if __name__=='__main__':
    main()


14dda9af7b007ae0c3749fb74dda2a84_1667b47f53904ef489aef1e43db4d65c.png



总结


图形界面编程本身就是一个单机程序,不是Python的重点学习项目,所以博主也只对tkinter模块进行了介绍,GUI编程,后面会继续介绍。

相关文章
|
22天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
27天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
15天前
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
63 15
|
23天前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
22天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
37 7
|
21天前
|
存储 缓存 Python
Python中的装饰器深度解析与实践
在Python的世界里,装饰器如同一位神秘的魔法师,它拥有改变函数行为的能力。本文将揭开装饰器的神秘面纱,通过直观的代码示例,引导你理解其工作原理,并掌握如何在实际项目中灵活运用这一强大的工具。从基础到进阶,我们将一起探索装饰器的魅力所在。
|
24天前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
37 5
|
23天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
59 3
|
27天前
|
Python
Python编程入门:从零开始的代码旅程
本文是一篇针对Python编程初学者的入门指南,将介绍Python的基本语法、数据类型、控制结构以及函数等概念。文章旨在帮助读者快速掌握Python编程的基础知识,并能够编写简单的Python程序。通过本文的学习,读者将能够理解Python代码的基本结构和逻辑,为进一步深入学习打下坚实的基础。
|
1月前
|
设计模式 缓存 开发者
Python中的装饰器:从入门到实践####
本文深入探讨了Python中强大的元编程工具——装饰器,它能够以简洁优雅的方式扩展函数或方法的功能。通过具体实例和逐步解析,文章不仅介绍了装饰器的基本原理、常见用法及高级应用,还揭示了其背后的设计理念与实现机制,旨在帮助读者从理论到实战全面掌握这一技术,提升代码的可读性、可维护性和复用性。 ####