前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3界面开发常用.md

Python3界面开发常用.md

作者头像
全栈工程师修炼指南
发布2020-10-23 16:04:31
2K0
发布2020-10-23 16:04:31
举报

[TOC]

0x00 前言

Python下各种GUI简介、使用优缺点对比:

GUI编程

简介特点

优缺点

PyQt

Python 对跨平台的 GUI 工具集 Qt 的包装实现了 440 个类以及 6000 个函数或者方法 ,PyQt 是作为 Python 的插件实现的。

比较流行的一个 Tkinter 的替代品,功能 非常强大,可以用Qt开发多美漂亮的界面,也就可以用PyQt开发多么漂亮的界面。 跨平台的支持很好,不过在商业授权上似乎存在一些问题。

Tkinter

绑定了 Python 的 Tk GUI 工具集 ,就是Python 包装的Tcl代码,通过内嵌在 Python 解释器内部的 Tcl 解释器实现, Tkinter的调用转换成 Tcl 命令,然后交给 Tcl 解释器进行解释,实现 Python 的 GUI 界面。对比Tk和其它语言的绑定比如 PerlTk 是直接由 Tk 中的 C 库实现的。

历史最悠久Python 事实上的标准 GUI , Python 中使用 Tk GUI 工具集的标准接口,已经包括在标准的 Python Windows 安装中,著名的 IDLE 就是使用 Tkinter 实现 GUI 的创建的 GUI 简单,学起来和用起来也简单。

wxPython

Python 对跨平台的 GUI 工具集 wxWidgets ( C++ 编写)的包装,作为 Python 的一个 扩展模块实现。

比较流行的一个 Tkinter 的替代品,在各种平台下都表现挺好。

PyGTK

一系列的 Python 对 GTK+ GUI 库的包装。

比较流行的一个 Tkinter 的替代品,许多 Gnome 下的著名应用程序的 GUI 都是使用 PyGTK 实现的,比如 BitTorrent , GIMP和 Gedit 都有可选的实现,在 Windows 平台 似乎表现不太好,这点也无可厚非,毕竟使用的是GTK 的 GUI 库。

PySide

另一个 Python 对跨平台的 GUI 工具集 Qt 的包装,捆绑在 Python 当中,最初由 BoostC++ 库实现,后来迁移到 Shiboken。

比较流行的一个 Tkinter 的替代品和上面类似至于两者的区别

easygui

Python 中一个非常简单的 GUI 编程模块,不同于其他的 GUI 生成器,它不是事件驱动的

调用函数实现,并且使用简单;为用户提供了简单的 GUI 交互接口,不需要程序员知道任何有关 tkinter,框架,部件,回调或 lambda 的任何细节。

目录导航

(1) easygui 模块 (2) wxPython 模块

补充来源:

0x01 Easygui 模块
1. EasyGUI介绍

1.1 什么是 EasyGUI? EasyGUI 是 Python 中一个非常简单的 GUI 编程模块,不同于其他的 GUI 生成器,它不是事件驱动的。 相反所有的 GUI 交互都是通过简地函数调用就可以实现,EasyGUI 为用户提供了简单的 GUI 交互接口,不需要程序员知道任何有关 tkinter,框架,部件,回调或 lambda 的任何细节。

EasyGUI 是运行在 Tkinter 上并拥有自身的事件循环,而 IDLE 也是 Tkinter 写的一个应用程序并也拥有自身的事件循环。因此当两者同时运行的时候,有可能会发生冲突,且带来不可预测的结果。因此如果你发现你的 EasyGUI 程序有这样的问题,请尝试在 IDLE 外去运行你的程序。

环境版本:Python 3.7.2,easygui-0.98.1-py3.7.egg 官网:https://github.com/robertlugg/easygui 使用pip进行安装:pip install easygui

1.2 导入EasyGUI模块以及方法介绍 为了使用 EasyGUI 这个模块,你应该先导入它,

导入语句是:

import easygui
from easygui import *
import easygui as g

#在命令行调用 EasyGUI 是这样的,且或者可以从 IDE(例如 IDLE, PythonWin, Wing, 等等)上调用:
Python3/Lib/site-packages/easygui-0.98.1-py3.7.egg/easygui/easygui.py
easygui.egdemo()

模块方法一览表:

(0) easygui.egdemo()  #EasyGUI的演示程序

'''消息对话框'''
msgbox(msg='(Your message goes here)', title=' ', ok_button='OK', image=None, root=None)  #消息框
enterbox(msg='Enter something.', title=' ', default='', strip=True, image=None, root=None)  #输入框,返回值为用户输入的字符串;
integerbox(msg='', title=' ', default=None, lowerbound=0, upperbound=99, image=None, root=None) #数值输入框
#多个简单的输入框,用户输入的值比选项少的话,则返回列表中的值用空字符串填充用户为输入的选项多则截断,用户取消操作返回None
multenterbox(msg='Fill in values for the fields.', title=' ', fields=[], values=[], callback=None, run=True) 
passwordbox(msg='Enter your password.', title=' ', default='', image=None, root=None) #密码输入框(以*号形式显示)


'''按钮对话框'''
#显示一个消息和提供一个 “OK” 按钮,你可以指定任意的消息和标题,重写OK按钮
#当选择 “cancel” 或关闭窗口的时候返回一个布尔类型的值0,否则为1
#注意:“C[o]ntinue” 中的 [o] 表示快捷键,也就是说当用户在键盘上敲一下 o 字符,就相当于点击了 “C[o]ntinue” 按键。
ccbox(msg='Shall I continue?', title=' ', choices=('C[o]ntinue', 'C[a]ncel'), image=None, default_choice='C[o]ntinue', cancel_choice='C[a]ncel')

#跟 ccbox() 一样,只不过这里默认的 choices 参数值不同而已,[<F1>] 表示将键盘上的 F1 功能按键作为 “Yes” 的快捷键使用。
ynbox(msg='Shall I continue?', title=' ', choices=('[<F1>]Yes', '[<F2>]No'), image=None, default_choice='[<F1>]Yes', cancel_choice='[<F2>]No')

#使用 buttonbox() 定义自己的一组按钮,buttonbox() 会显示一组由你自定义的按钮。
#当用户点击任意一个按钮的时候,buttonbox() 返回按钮的文本内容。如果用户点击取消或者关闭窗口,那么会返回默认选项(第一个选项)
buttonbox(msg='', title=' ', choices=('Button[1]', 'Button[2]', 'Button[3]'), image=None, images=None, default_choice=None, cancel_choice=None, callback=None, run=True)

#基本跟 buttonbox() 一样,区别就是当用户选择第一个按钮的时候返回序号 0, 选择第二个按钮的时候返回序号 1
indexbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None, default_choice='Yes', cancel_choice='No')
boolbox(msg='Shall I continue?', title=' ', choices=('[Y]es', '[N]o'), image=None, default_choice='Yes', cancel_choice='No')  #如果第一个按钮被选中则返回 True,否则返回 False。


'''选择/多选框'''
#按钮组件方便提供用户一个简单的按钮选项,但如果有很多选项,或者选项的内容特别长的话,更好的策略是为它们提供一个可选择的列表
choicebox(msg='Pick an item', title='', choices=[], preselect=0, callback=None, run=True) #单选框
multchoicebox(msg='Pick an item', title='', choices=[], preselect=0, callback=None, run=True) #持用户选择 0 个,1 个或者同时选择多个选项


'''显示文本框'''
#注:text 参数设置可编辑文本区域的内容,可以是字符串、列表或者元祖类型。
textbox(msg='', title=' ', text='', codebox=False, callback=None, run=True)
codebox(msg='', title=' ', text='') #以等宽字体显示文本内容(不自动换行),相当于 textbox(codebox=True)


'''文件目录选择框'''
# 函数用于提供一个对话框,返回用户选择的目录名(带完整路径哦),如果用户选择 “Cancel” 则返回 None
diropenbox(msg=None, title=None, default=None)
fileopenbox(msg=None, title=None, default='*', filetypes=None, multiple=False)
filesavebox(msg=None, title=None, default='', filetypes=None) #函数提供一个对话框,让用于选择文件需要保存的路径(带完整路径哦)

#关于 default 参数的设置方法:
default 参数指定一个默认路径,通常包含一个或多个通配符。
如果设置了 default 参数,fileopenbox() 显示默认的文件路径和格式。
default 默认的参数是 '*',即匹配所有格式的文件。

#例如:
default="c:/fishc/*.py" 即显示 C:\fishc 文件夹下所有的 Python 文件。
default="c:/fishc/test*.py" 即显示 C:\fishc 文件夹下所有的名字以 test 开头的 Python 文件。

#关于 filetypes 参数的设置方法:
可以是包含文件掩码的字符串列表,例如:filetypes = ["*.txt"]
可以是字符串列表,列表的最后一项字符串是文件类型的描述,例如:filetypes = ["*.css", ["*.htm", "*.html", "HTML files"]]

1.3 EgStore 存储过程 GUI 编程中一个常见的场景就是要求用户设置一下参数,然后保存下来,以便下次用户使用你的程序的时候可以记住他的设置;为了实现对用户的设置进行存储和恢复这一过程,EasyGUI 提供了一个叫做 EgStore 的类;

案例:

from easygui import EgStore

# 定义一个叫做“Settings”的类,继承自EgStore类
#可以在 settings 对象中通过设定值去实例化变量,从而很简单地记住设置,之后使用 settings.store() 方法在硬盘上持久化保存。
class Settings(EgStore):

    def __init__(self, filename):  # 需要指定文件名
        # 指定要记住的属性名称
        self.author = ""
        self.book = ""

        # 必须执行下面两个语句
        self.filename = filename
        self.restore()

# 创建“Settings”的实例化对象“settings”
settingsFilename = "settings.txt"
settings = Settings(settingsFilename)

author = "WeiyiGEEK"
book = "零基础入门学习Pyhon"

# 将上面两个变量的值保存到“settings”对象中
settings.author = author
settings.book = book
settings.store()
print("\n保存完毕\n")

1.4 捕获异常 通过 exceptionbox() 函数提供了更好的方式去处理异常;使用 EasyGUI 编写 GUI 程序,有时候难免会产生异常,当然这取决于你如何运行你的应用程序,当你的应用程序崩溃的时候,堆栈追踪可能会被抛出,或者被写入到 stdout 标准输出函数中;

当异常出现的时候,exceptionbox() 会将堆栈追踪显示在一个 codebox() 中,并且允许你做进一步的处理。 举个例子:

import easygui
try:
      print('I Love FishC.com!')
      int('FISHC') # 这里会产生异常
except:
      easygui.exceptionbox()  #产生错误进行处理
WeiyiGeek.异常捕获
WeiyiGeek.异常捕获

WeiyiGeek.异常捕获

2. EasyGUI使用案例
#!/usr/bin/python3
#案例:easygui模块的使用

import easygui as g

nickname = input('请输入您的网名:')
love = input("请输入您的爱好:")
age = g.enterbox('请输入您的年龄:','信息输入')
res = g.msgbox('您的输入的个人信息是:'+nickname+', 爱好:'+love+', 年龄:'+age,'个人信息','确认无误')
print("msgbox返回值:",res)  #返回ok_button值  msgbox返回值: 确认无误
sex = g.buttonbox('选择您的性别:','信息录入',('男','女','none'),default_choice='none')
city = g.multchoicebox('城市选择','信息录入',['北京','上海','广州','深圳','重庆'])

#选择建立文件的目录
savedir = g.diropenbox(msg=None, title='', default=None)  
test = g.fileopenbox(msg=None, title=None, default='*', filetypes=None, multiple=False)
savefile = g.filesavebox(msg=None, title='保存文件的目录', default='', filetypes=None) 
# C:\Users\Administrator\Documents 
# C:\Users\Administrator\Desktop\Study-Promgram\README.md 
# C:\Users\Administrator\Desktop\Study-Promgram\test.txt

with open(savefile,'w+',encoding='utf-8') as f:
    f.write(nickname+'\n'+love+'\n'+age+'\n'+res+'\n'+sex+'\n')
    for x in city:
        f.write(x+'\n')

g.textbox(nickname+'\n'+love+'\n'+age+'\n'+res+'\n'+sex+'\n','效率','value')
print("模块测试完成!")
WeiyiGeek.msgbox
WeiyiGeek.msgbox

WeiyiGeek.msgbox

WeiyiGeek.执行完成
WeiyiGeek.执行完成

WeiyiGeek.执行完成

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言
    • 目录导航
    • 0x01 Easygui 模块
      • 1. EasyGUI介绍
        • 2. EasyGUI使用案例
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档