PythonGUI图形化界面详解(上)

发布时间 2024-01-01 15:57:50作者: worker2011

0 简介

话说你看到的软件是不是都是用图形化界面(Graphical User Interface, GUI)整出来的?

比如这个:

然鹅,再看看咱的“图形化界面”:

根本不是一个等级的啊!于是,我们来用Python整一个GUI吧!

1 安装环境

Tips:如果您已安装Python和一个另外的IDE,可以忽略此步骤。但如果后续发现有模块运行不了且代码、模块等正常,可以按照此步骤重新安装。

这里

2 easygui

pip install easygui

在你的终端中运行这段代码。如果出现了下面的东西,那么就说明安装easygui成功啦(以后我介绍的模块除了特殊说明外,都要用类似的方法安装,就不在提了)

Looking in indexes: https://mirrors.sustech.edu.cn/pypi/simple
Collecting easygui
  Using cached https://mirrors.sustech.edu.cn/pypi/packages/8e/a7/b276ff776533b423710a285c8168b52551cb2ab0855443131fdc7fd8c16f/easygui-0.98.3-py2.py3-none-any.whl (92 kB)
Installing collected packages: easygui
Successfully installed easygui-0.98.3

然后,在你的IDE中新建个.py文件,输入这段代码,如果出现了下面这幅图,就算成功啦!

import easygui as eg
eg.msgbox("Hello World!")

点掉下面的OK,窗口就会消失。

如果有问题,请核实一下下面的东西:

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

其实就3句话:

不要用自带的IDLE!!!

不要用自带的IDLE!!!

不要用自带的IDLE!!!

如果没问题,那么,恭喜你,再次打开了新世界的大门!

接下来,就是对它的一顿研究了

eg.msgbox(msg="A + B Problem", title="Leo2011", ok_button="I AK IOI!")

不出所料的话,应该是这样的:

看,我们用title="Leo2011"把标题改成了"Leo2011",用ok_button="I AK IOI!"把下面的按钮改成了"I AK IOI!"。

这就msgbox能干的事了。

下面,咱来看另外的几个家伙:

  • enterbox

    s = eg.enterbox("欢迎您随便输入一堆东西", title=tit)
    eg.msgbox(msg="您刚才输入了\n"+s, title=tit, ok_button="我知道了。")
    

    能弹出这么个框:

框中可以随便输东西(只要你打得出来),输完了按回车或点OK(这个不能改)结束。如果你点了Cancel或直接关掉了这个框,会返回None(这不是一个字符串,是Nonetype,意思就是啥也没有)

  • multenterbox

    有一堆enterbox在一个窗口里。

  • passwordbox

    跟enterbox一样,只不过用户视角中输入的字符只能看到“*”,跟输密码似的。

  • multpasswordbox

    有一堆passwordbox在一个窗口里。

  • ccbox

    s = eg.ccbox("欢迎您随便选东西", title=tit, choices=["[D]ebug", "C[t]j"])
    eg.msgbox(msg="您刚才输入了\n"+str(s), title=tit, ok_button="我知道了。")
    

    []里的字符相当于快捷键,你按下这个键就会认为你选了这个选项。ccbox只能有两个选项(否则解释器会炸)。

  • boolbox/ynbox

    同ccbox,不讲。

  • choicebox

    s = eg.choicebox("欢迎您随便选东西", title=tit, choices=["Debug", "Ctj", "AC!"])
    

    UI会变成这样:

    刚才的快捷键就只能是首字母了。choicebox可以有多个选项,但只能选一个(默认是第一个)。

  • buttonbox

    同choicebox,不讲。

  • indexbox

    跟choicebox一样,只不过choicebox会返回你选中的文本,而indexbox会返回你选中的那货在你的选项列表里的下标。

  • multchoicebox

    有一堆choicebox在一个窗口里?
    这次easygui不按套路出牌了,界面长这样:

    Select All就是全选,Clear All就是全不选,剩下两个老朋友了。
    返回值是这样的['Debug', 'AC!']。它会按你选中的选项在选项列表里的相对位置排成一个新列表。

  • integerbox

    s = eg.integerbox(msg="请输入一个数", title=tit, default=5, lowerbound=3, upperbound=7)
    

    指定你输入一个在lowerboundupperbound之间的整数,默认为default。如果不在区间内了会让你重新输入。

  • egdemo

    easygui所有函数的效果演示。

eaysgui确实很easy!

3 turtle

实测Python turtle的不同版本在不同平台上可能会有所不同,本文以Windows 11 + Python 3.12.1为准。

turtle库(人送绰号“海龟绘图”)是Python的内置库,安装了Python就可以直接用。

import turtle as t
t.write("Hello World!")
t.done()  # 这一行必须要有,否则你是看不见你的效果的

这就是你的第一个turtle程序了!

下面,还是来介绍几个基本函数的使用:

  • home

    木有参数。回到原点(0, 0),也就是屏幕正中央的起始位置(这在你画图画懵13的时候很有用)。

  • forward/fd

    1个参数 \(k\),表示你想要让这个画笔沿笔头方向前进 \(k\) 个像素。如fd(1000)即让画笔从当前位置前进1000个像素。

  • backward/bk/back

    1个参数 \(k\),相当于fd(-k),即沿笔头方向后退 \(k\) 步。

  • left/lt

    1个参数 \(k\),表示你想让画笔左转 \(k^\circ\)

  • right/rt

    1个参数 \(k\), 表示你想让画笔右转 \(k^\circ\)

  • goto

    2个参数 \(x, y\),表示将画笔直线移动到 \((x, y)\)的位置。如果画笔还没被抬起来,就会把轨迹画下来。

  • circle

    用来画圆的(这是空心的)。参数最多3个:\(r, e, s\)\(r\) 表示要画的圆的半径(必须要写),\(e\) 表示圆心角度数(默认为整个圆),\(s\) 表示要画的正多边形边数(不写会自动确定)。这里解释一下,电脑上画圆不太现实,都是用正 \(n\) 边形(这个 \(n\) 一般不小)模拟出来的,所以这个函数即可用来画圆也可以用来画正多边形。

  • dot

    也是画一个圆。最多两个参数:\(d\) 和 color。 \(d\) 指要画的圆的直径,color是一个字符串,表示要画的圆的颜色。与circle不同,dot画的圆是实心的,而circle默认情况下是空心的。

  • penup/up/pu

    抬起笔,此后在落下笔之前所有的操作都不会留下痕迹。

  • pendown/pd/down

    落下笔。一般可以这么使:

    def move(x, y):
        t.pu()
        t.goto(x, y)
        t.pd()
    
  • speed

    设置速度的,有一个参数 \(v\)。你在用的时候,应保证 \(0 \le v \le 10\)。一般情况下,\(v\) 是个整数,且越大代表越快,但也有例外:

    \(v\) 的值 速度
    0或"fastest" 最快
    10或"fast"
    6或"normal" 正常(默认)
    3或"slow"
    1或"slowest" 最慢
  • pensize/width

    一个参数 \(w\),表示画笔粗细。

  • pencolor

    可以没有参数,此时返回画笔颜色(默认是黑色 ),也可以给出参数,此时是设置颜色。

    有以下几种设置模式:

    t.pencolor("red")  # 设置为红色
    t.pencolor("#abcde")  # 设置为十六进制编码为“abcde”的颜色
    t.pencolor((1, 255, 255))  # 设置为青色。三个数值表示RGB编码
    t.pencolor(1, 255, 255)  # 同上,只不过上面传过去的是一个元组。
    
  • fiilcolor

    填充颜色,同上。

  • color

    两个都设置了,可以填写1~2组参数。1组就是设置成一样的,两组就是先pencolor再fillcolor。

  • bgcolor

    背景颜色,参数同pencolor。

  • bgpic

    背景图片,需要给一个字符串表示背景图片位置。如果是"nopic"就是删除背景图片。

  • begin_fill

    记录一下,准备填充。

  • end_fill

    把上次begin_fill以后画的东西填充成fillcolor。

  • write

    主要有2个参数,文字和设置。可以把文字设置成属性后写上去,如开头的例子。

  • hideturtle/ht

    隐藏画笔,能加速。

  • showturtle/st

    显示画笔。

  • shape

    海龟绘图,海龟在哪儿呢?

    就是这么设置的。

    给定一个参数,它会自动把海龟调整成对应的形状。

    支持以下形状:

    • "arrow"
    • "turtle"
    • "square"
    • "triangle"
    • "classic"

    可以自己去试一试~

  • stamp

    把画笔印在当前位置,即在那个位置留下海龟的形状。

turtle库就先介绍这些,不少了。自个儿试着画几张图去吧!

预告:这是上半部分,后续还会出介绍PYsimpleGUI、pygame、certifi、tkinter的后续,敬请期待!

老规矩,有问题的欢迎私信联系我。