python标题的位置_Python 做 UI 超 easy!(2.1)——4 行代码,搞定第一个视窗

f361e760ac205d1da05932a708627fac.png

项目目标

  1. 实现一个 one-shot 窗口,
  2. 使用 Input 组件读取用户姓名,
  3. 使用 Popup 组件提示欢迎信息。

先决知识

已转移到页尾。

回顾

上一节展示了 PySimpleGUI 的强大易用。今天我们再回头看一下上一节的这个程序,是怎么做到的。

8a4172898f47c7e2614efad3e1acdab3.png
上一节用到的案例

万事开头难嘛,第一个任务简单点没问题。

开始

使用 Online IDE

很多人在学习 Python 的时候,迎面第一个问题就是开发环境,复杂的配置过程,吓退了很多 Python 爱好者。

如果你已经可以熟练使用 Python 开发,那么跳过本节,在你的本地环境编写代码即可。

对初学的朋友,推荐大家使用这款在线编辑环境,确保可以得到一致的结果,便于学习。

  • 前往 https://repl.it/,并注册账号,
  • 点击右上角, new repl,
  • 编程语言选择 Tkinter,点击 create repl。

9925ca35dd0bb0b237f749ac032bfb72.png
  • 进入编辑视图

16f0274d92c61e149287cc6e2076c8c6.png

规划蓝图

首先,我们展开想象,绘制一副蓝图,看我们的产品应该是什么样的。你可以用纸笔绘制草图。

cffac92937eac94cc7f5568352ef4e0a.png

这已经是一个典型的现代视窗应用。下面将图中的元素标注出来。

0e0213ea4cd0985129459f5183687d59.png

这个视窗中包含:

  • Text * 1, 一个文本标签,只显示文本。
  • Input * 1,一个输入框,用户可以输入信息。
  • Button * 1,一个按钮
  • Window * 1,最外围的窗口(包含左上角标题、右上角关闭按钮等),上面三个组件都承载在 Window 里.
Tips:Python 中的命名约定:
所有的 “类” 名,首字母大写,比如图中的 Text、Button、Input、Window 都是 PySimpleGUI 中的类。
类中的 “保护成员变量”,是以下划线开头的小写单词,
类中的 “私有成员变量”,是以两个下划线开头的小写单词,
类中的 “meta data”(Python 定义的变量),是以双下划线开头、双下划线结尾的小写单词

4283c011f4bcb78446a5b9feae9076e6.png

如上图所示,PySimpleGUI 将视窗划分为行,在每个行里,从左往右填充组件。整个视窗可以如下表示:

c6541e1ba398be5e15e9eada7a858dcf.png

可以看到整个视窗由两行构成。PySimpleGUI 用二维 list 表示视窗,上面的示意图,转换为 list,保存在变量 layout 中。注意 Text、Input 等等类是 PySimpleGUI 中的类,需要 PySimpleGUI.Text、PySimpleGUI.Input 这样使用。由于我们指定了 PySimpleGUI 的别名是 sg,就可以用 sg.Text、sg.Input 使用这些类:

import 

几个类的初始化

  • sg.Text 接受一个参数,指出它应当显示的文字。
  • sg.Input 不传入参数,保持默认即可。
  • sg.Button 接受一个参数,指出按钮上的文字。

创建窗口

上面我们只是定义的蓝图,蓝图中包含了视窗里的所有组件,但是没有 Window,这是因为 Window 是一个特殊的组件,其他组件要在 Windows 中显示。

sg.Window 第一个参数指定窗口左上角的标题,第二个参数是一个二维 list,按行指定所有的组件。我们将创建的视窗保存在 window 变量中。

import PySimpleGUI as sg
layout = [ [sg.Text("Name"), sg.Input()], [sg.Button("OK")] ]

window = sg.Window("Hello App", layout)

显示窗口

变量 window 中保存了视窗对象,就是蓝图中最外面,包含关闭按钮、标题的窗口。如果你运行上面的代码,右上侧窗口看不到任何视窗出现,这是因为我们只是创建了 Window 类的一个实例 window。

Tips: 注意 Python 是大小写敏感的,这里 Window 和 window 表示的是不同的事物: Window 是在 PySimpleGUI 中定义的视窗类, window 是 Window 类的实例,表示具体的某个窗口。

如果要显示 window,需要调用 window 的 read 方法,不需要传入任何参数,函数调用不要忘记输入小括号!

import PySimpleGUI as sg
layout = [ [sg.Text("Name"), sg.Input()], [sg.Button("OK")] ]

window = sg.Window("Hello App", layout)

window.read()

再次点击 run,你会看到我们需要的窗口。

f3563e47402634da65d78488eb8c5b91.png

前面提过,

PySimpleGUI 将视窗划分为行,在每个行里,从左往右填充组件。

可以看到所有的组件都是靠左的,这个问题我们暂时搁置,起码已经大体看到蓝图变为现实了!

总结

清楚每个变量的类型,哪些是类,哪些是它的实例,哪些是字符串,对编写正确的代码非常重要。

我们已经实现了窗口,但是现在点击窗口会退出,没有任何有意义的功能,我们会在明天继续完善它,直到实现项目目标

关注我,了解程序员的烧脑日常,还有开源的视频教程。

5493266e0799d42f818115642d4847c9.png

我是你忘不了的智慧

1. 导入第三方库的方法。 Python 中用下面的方法导入第三方库:

import PySimpleGUI as sg

除了 Python 内置基本类型外,Python 拥有大量的第三方库可用。这些库是由一些技能高超,充满热情、无私的开发者贡献的。通常都是开源的,并且允许使用到商业软件中。如果你有特别喜欢的第三方库,可以去它的官网,也许会看到类似 “Buy me a cup of coffee” 的捐赠连接,支持作者。 绝大多数第三方库,都可以用 pip(python 2)或者 pip3(python 3)安装。如果你的计算机安装了 python,你可以打开命令行这样安装:

pip3 install PySimpleGUI

import 指令中 “as sg”,可以对库的名称指定别名。好比我们会简称一个人 “小高”。上面我们为 PySimpleGUI 指定了别名 sg,所有用到 PySimpleGUI 的地方,可以直接用 sg,省点事儿。

2. 通过 库名.xx 可以访问库里的对象或者函数。

3. 调用函数:

func()            # 无参数函数
func(arg1)        # 一个位置参数的函数
func(arg1, arg2)    # 多个位置参数的函数
func(arg1, arg2, key1 = arg3, key2 = arg4) # 位置参数、键参数混合的情况

4. 字符串的拼接

# 以下方法效果相同
result = str1 + str2
result = "{}{}".format(str1, str2)
result = "".join([str1, str2])
result = "%s%s" % (str1, str2)

然而,字符串拼接时,并不是真的在 str1 后追加 str2。Python 中 String 是不可变对象。那字符串是怎么修改的呢?很简单——Python 重新创建字符串,内容是新的字符串值。

假设 str1 = "hello" :

1a564071532e59a04e83e69492ba689a.png

随后 str1 = "hello1",原来的 "hello" 会直接被抛弃,Python 会创建新的 String 对象,值是 “hello1”,与原来的 “hello” 毫无关系!随后的某个时候,“hello” 所占有的内存会被垃圾回收机制(GC)释放。

1163e53b80367f7fec5defac30deaa79.png

同样的,执行完 str1 和 str2 的拼接后,result 保存的是全新创建的 String 对象 “helloworld”,str1 和 str2 的值则不会受影响。

ea73b899188ee612653369376699c124.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值