使用global语句
如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。
你可以使用定义在函数外的变量的值(假设在函数内没有同名的变量)。然而,我并不鼓励你这样做,并且你应该尽量避免这样做,因为这使得程序的读者会不清楚这个变量是在哪里定义的。使用global语句可以清楚地表明变量是在外面的块定义的。
————————————————
版权声明:本文为CSDN博主「遇到我的Bug你要裂了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/budong282712018/article/details/80236191
Python字典包含了以下内置方法:
序号 函数及描述 1 dict.clear()
删除字典内所有元素2 dict.copy()
返回一个字典的浅复制3 dict.fromkeys(seq[, val])
创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值4 dict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值5 dict.has_key(key)
如果键在字典dict里返回true,否则返回false6 dict.items()
以列表返回可遍历的(键, 值) 元组数组7 dict.keys()
以列表返回一个字典所有的键8 dict.setdefault(key, default=None)
和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default9 dict.update(dict2)
把字典dict2的键/值对更新到dict里10 dict.values()
以列表返回字典中的所有值11 pop(key[,default])
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。12 popitem()
返回并删除字典中的最后一对键和值。
Python字典包含了以下内置函数:
序号 函数及描述 1 cmp(dict1, dict2)
比较两个字典元素。2 len(dict)
计算字典元素个数,即键的总数。3 str(dict)
输出字典可打印的字符串表示。4 type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
返回值
返回分割后的字符串列表。
Python 列表(List)
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。
list.append('Google') ## 使用 append() 添加元素
可以使用 del 语句来删除列表的元素
Python列表脚本操作符
列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
如下所示:
Python 表达式 结果 描述 len([1, 2, 3]) 3 长度 [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合 ['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复 3 in [1, 2, 3] True 元素是否存在于列表中 for x in [1, 2, 3]: print x, 1 2 3 迭代
Python列表函数&方法
Python包含以下函数:
序号 函数 1 cmp(list1, list2)
比较两个列表的元素2 len(list)
列表元素个数3 max(list)
返回列表元素最大值4 min(list)
返回列表元素最小值5 list(seq)
将元组转换为列表
Python包含以下方法:
序号 方法 1 list.append(obj)
在列表末尾添加新的对象2 list.count(obj)
统计某个元素在列表中出现的次数3 list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)4 list.index(obj)
从列表中找出某个值第一个匹配项的索引位置5 list.insert(index, obj)
将对象插入列表6 list.pop([index=-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值7 list.remove(obj)
移除列表中某个值的第一个匹配项8 list.reverse()
反向列表中元素9 list.sort(cmp=None, key=None, reverse=False)
对原列表进行排序
Python Tkinter 标签控件(Label)
Python Tkinter 标签控件(Label)指定的窗口中显示的文本和图像。
标签控件(Label)指定的窗口中显示的文本和图像。
你如果需要显示一行或多行文本且不允许用户修改,你可以使用 Label 组件。
语法
语法格式如下:
w = Label ( master, option, ... )
master: 框架的父容器。
options: 可选项,即该标签的可设置的属性。这些选项可以用键-值的形式设置,并以逗号分隔。
root = tk.Tk()
w = tk.Label(root, text="Hello RUNOOB!")
w.pack()
root.mainloop()
序号 可选项 & 描述 1 anchor
文本或图像在背景内容区的位置,默认为 center,可选值为(n,s,w,e,ne,nw,sw,se,center)eswn 是东南西北英文的首字母,表示:上北下南左西右东。
2 bg
标签背景颜色
4 bd
标签的大小,默认为 2 个像素
4 bitmap
指定标签上的位图,如果指定了图片,则该选项忽略
5 cursor
鼠标移动到标签时,光标的形状,可以设置为 arrow, circle, cross, plus 等。
6 font
设置字体。
7 fg
设置前景色。
8 height
标签的高度,默认值是 0。
9 image
设置标签图像。
10 justify
定义对齐方式,可选值有:LEFT,RIGHT,CENTER,默认为 CENTER。
11 padx
x 轴间距,以像素计,默认 1。
12 pady
y 轴间距,以像素计,默认 1。
13 relief
边框样式,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。
14 text
设置文本,可以包含换行符(\n)。
15 textvariable
标签显示 Tkinter 变量,StringVar。如果变量被修改,标签文本将自动更新。
16 underline
设置下划线,默认 -1,如果设置 1,则是从第二个字符开始画下划线。
17 width
设置标签宽度,默认值是 0,自动计算,单位以像素计。
10 wraplength
设置标签文本为多少行显示,默认为 0。
python 字典中取值的两种方法小结
如下所示:
1
a
=
{
'name'
:
'tony'
,
'sex'
:
'male'
}
获得name的值的方式有两种
1
2
a[
'name'
],
type
(a[
'name'
])
a.get(
'name'
),
type
(a.get(
'name'
))
发现这两个结果完全一致,并没有任何的差异。
怎么选择这两个不同的字典取值方式呢?
如果字典已知,我们可以任选一个,而当我们不确定字典中是否存在某个键时,我之前的做法如下
1
2
if
'age'
in
a.keys():
a[
'age'
]
因为不先判断的话,直接使用a[‘age']会导致报错keyerror,提示没有该key的值。
字典名后接着方括号[]是取值的意思,括号的内容是字典的某一个键key,这样可以获取该键的值value。
Python strip()方法:去除首尾指定的字符
描述
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
语法
strip()方法语法:
str.strip([chars]);
参数
- chars -- 移除字符串头尾指定的字符序列。
overrideredirect方法
在Windows平台下,这个函数的作用,视觉上窗体整个边框消失(没有最小化最大化关闭这几个按钮,也无法拖动这个窗体),程序的窗体在Windows系统任务栏上也消失(看不到有这么一个程序在运行),但是Alt+F4关闭窗体的功能还存在。
Menu 类
menu = tk.Menu(frame, tearoff=0)
将tearoff设置为1以后,就是表明这个菜单是可以独立出来的,能跳出一个悬浮菜单
mbox
mbox 窗口提示
import tkinter.messagebox as mbox
if mbox.askyesno(message='输入你想显示的内容'):
pass
mbox.showwarning(message='输入你想显示的内容')
Tkinter 组件
Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。
目前有15种Tkinter的部件。我们提出这些部件以及一个简短的介绍,在下面的表:
控件 描述 Button 按钮控件;在程序中显示按钮。 Canvas 画布控件;显示图形元素如线条或文本 Checkbutton 多选框控件;用于在程序中提供多项选择框 Entry 输入控件;用于显示简单的文本内容 Frame 框架控件;在屏幕上显示一个矩形区域,多用来作为容器 Label 标签控件;可以显示文本和位图 Listbox 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户 Menubutton 菜单按钮控件,用于显示菜单项。 Menu 菜单控件;显示菜单栏,下拉菜单和弹出菜单 Message 消息控件;用来显示多行文本,与label比较类似 Radiobutton 单选按钮控件;显示一个单选的按钮状态 Scale 范围控件;显示一个数值刻度,为输出限定范围的数字区间 Scrollbar 滚动条控件,当内容超过可视化区域时使用,如列表框。. Text 文本控件;用于显示多行文本 Toplevel 容器控件;用来提供一个单独的对话框,和Frame比较类似 Spinbox 输入控件;与Entry类似,但是可以指定输入范围值 PanedWindow PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。 LabelFrame labelframe 是一个简单的容器控件。常用与复杂的窗口布局。 tkMessageBox 用于显示你应用程序的消息框。
标准属性
标准属性也就是所有控件的共同属性,如大小,字体和颜色等等。
属性 描述 Dimension 控件大小; Color 控件颜色; Font 控件字体; Anchor 锚点; Relief 控件样式; Bitmap 位图; Cursor 光标;
几何管理
Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,以下是Tkinter公开的几何管理类:包、网格、位置
几何方法 描述 pack() 包装; grid() 网格; place() 位置;
# 为菜单添加命令标签
menu.add_command(label="delete", command=lambda: saveWords.pop(preWord))
menu.add_command(label="exit", command=exit)
获取鼠标点击位置
https://blog.csdn.net/weixin_39624094/article/details/111422857
使用event作为函数参数
相对于应用程序左上角的位置,左键点击的位置是 event.x, event.y
相对于屏幕左上角的位置,左键点击的位置是 event.x_root, event.y_root
python的tkinter窗口位置\坐标\大小等知识(自用笔记)_#姚大姚 的博客-CSDN博客
https://blog.csdn.net/qq_42402648/article/details/109822589窗口标题:
window.title("title_a")
添加窗口图标:
window.iconbitmap(icon_file) #icon_file就是一个.ico的图标文件,使用绝对或相对路径
设置窗口大小:
window.geometry("x_WIDTH x x_HEIGHT") #其中将_WIDTH替换为窗口宽度,将_HEIGHT替换为窗口高度 设置窗口在屏幕上的位置: window.geometry("+X+Y") #X/Y表示以屏幕左上角为顶点的窗口的坐标 #或者是 window.geometry("x_WIDTH x x_HEIGHT+X+Y")
(2)常用的事件处理函数:
刷新窗口状态: window.update()销毁窗口: window.destroy()
自动触发事件: window.after(sec,command) #表示多少秒以后自动执行command
置顶窗口: window.wm_attributes('-topmost',1)
隐藏窗口外部: window.overrideredirect(True)
设置最大的窗口: window.maxsize(600, 400)
设置最小的窗口: window.minsize(300, 240)
设置窗口是否可以缩放(两种方法):
window.resizable(width=False, height=False)#禁止改变窗口大小
window.resizable(0, 0) # 设置窗口大小不可变
获取窗口属性的方法
winfo_x() 方法获得窗口的x坐标,
winfo_y() 方法获得窗口的y坐标
winfo_width() 方法获得窗口的宽度
winfo_height() 方法获得窗口的高度
以上四个方法都是无参方法,通过返回值我们可以获得窗口的宽高。
弹出式菜单,通过post方法显示显示。
menu.post(event.x_root, event.y_root)
Python多线程编程(一):threading 模块 Thread 类的用法详解
https://blog.csdn.net/briblue/article/details/85101144
我们进行程序开发的时候,肯定避免不了要处理并发的情况。
一般并发的手段有采用多进程和多线程。
但线程比进程更轻量化,系统开销一般也更低,所以大家更倾向于用多线程的方式处理并发的情况。
Python 实现多线程编程需要借助于 threading 模块。
所以,我们要在代码中引用它。
import threading
threading 模块中最核心的内容是 Thread 这个类。
我们要创建 Thread 对象,然后让它们运行,每个 Thread 对象代表一个线程,在每个线程中我们可以让程序处理不同的任务,这就是多线程编程。
创建 Thread 对象有 2 种手段。
直接创建 Thread ,将一个 callable 对象从类的构造器传递进去,这个 callable 就是回调函数,用来处理任务。
编写一个自定义类继承 Thread,然后复写 run() 方法,在 run() 方法中编写任务处理代码,然后创建这个 Thread 的子类。
Thread 对象的类及其参数class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
Thread 的构造方法中,最重要的参数是 target,所以我们需要将一个 callable 对象赋值给它,线程才能正常运行。
如果要让一个 Thread 对象启动,调用它的 start() 方法就好了。
例子
import threading import time def test(): for i in range(5): print('test ',i) time.sleep(1) thread = threading.Thread(target=test) thread.start() for i in range(5): print('main ', i) time.sleep(1)
运行结果:
test 0 main 0 main 1 test 1 main 2 test 2 main 3 test 3 main 4 test 4
随机抢时间片,概率相等
Thread 的生命周期
- 创建对象时,代表 Thread 内部被初始化。
- 调用 start() 方法后,thread 会开始运行。
- thread 代码正常运行结束或者是遇到异常,线程会终止。
自定义类继承 Thread(暂不使用)
略
mainloop
进入到事件(消息)循环。一旦检测到事件,就刷新组件。
▲ if __name__=="__main__":
就相当于是 Python 模拟的程序入口。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个,选中哪个入口程序取决于 __name__ 的值。
事件绑定
Tkinter使用一种称为事件序列的机制来允许用户第一事件,
用户需使用bind()方法将具体的事件序列与自定义的方法相绑定。
事件序列是以字符串的形式表示,可以表示一个或多个相关联的事件
格式 <modifier-type-detail>
<Motion> 获取鼠标当前位置(实时)
<Button-1>鼠标左键
<Keypress-H>点击键盘H键
<Button-4,5>滚轮的向上滚和向下滚
<Control-Shift-KeyPress-H>同时点击CTRL+SHIFT+H
Key键盘的敲击事件
KeyPress键盘按下的过程
KeyRelease松开的过程
组件必须获得焦点,才能响应键盘来的消息
focus_set获得焦点
keysym按键名
keycode按键码
StringVar是Tk库内部定义的字符串变量类型,在这里用于管理部件上面的字符;不过一般用在按钮button上。改变StringVar,按钮上的文字也随之改变。
Python 利用内置set函数对字符串和列表进行去重的方法
如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# coding:utf8
__author__
=
'libingxian'
__date
=
"20170415"
# 由于数据类型set本身具有无序,唯一值的特性,可以用内置函数set对字符串和列表进行去重,挺方便的
str
=
"asdfasdlklfgklgjsdfjkjl"
se
=
set
(
str
)
se
li
=
[
1
,
"2"
,
1
,
"2"
,
"abc"
,
"123"
]
se
=
set
(li)
se
"""
输出结果:
set(['a', 'd', 'g', 'f', 'k', 'j', 'l', 's'])
set([1, '123', '2', 'abc'])
"""
▲ python tkinter 全部组件(widget)及事件类型(event)一览
对于一个简单的GUI程序设计来说,我觉得无非就是三个要素,widget(部件),layout(布局),event(事件的响应)
个人感觉,GUI就和搭积木差不多,widget就好比是各种形状的积木,比如长方形,正方形,三角形等等。layout就 是如何将这些积木搭建成为一个小房子,小木屋。
widget(部件)+event(事件的响应)
tkinter中的widget主要有Button(按钮), Checkbutton(复选按钮),Canvas(画布),Entry(条目), Frame(框架), Label(标签), LabelFrame(标签框架), Listbox(列表框),menu(菜单),Menubutton(菜单按钮),Message (消息),OptionMenu(选项菜单), PanedWindow(中分栏窗口), Radiobutton(单选按钮), Scale(刻度条), Scrollbar(滚动条),Spinbox(整数调节框),Text(文本框), Combobox(下拉列表框), Notebook(笔记本), Progressbar(进度条), Separator(分离器), Sizegrip(尺寸调节器), Treeview(树视图)
https://blog.csdn.net/explorer9607/article/details/82783470
tk.after()方法 睡眠
after(self, ms, func=None, *args)
在给定时间后调用函数一次。
MS以毫秒为单位指定时间。函数给出了
要调用的函数。额外的参数
作为函数调用的参数。返回
使用after_cancel取消调度的标识符。Tk类提供的after方法不是循环的计时器,
它相当于不会堵塞进程的sleep
需要循环计时的话,就再在函数里面再次after
示例:
widget.after(300, marquee, widget)
root.after(1000, __writeText)
4.3 属性的动态修改
在程序的运行中,难免会动态的修改控件的属性。如何修改呢?非常的简单:
label[‘属性名称’]=新的属性比如要修改标签的文字,只需要:
label[‘text’]=‘新的标签文字’
所有的控件的属性都可以通过这个方法来修改。后面就不在赘述了。不过并不是所有的控件属性都可以动态修改的,有些属性只能在初始化的时候设定。在控件的生命周期中,不能修改。
————————————————
版权声明:本文为CSDN博主「风华明远」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42272768/article/details/100575802
消息框 mbox
if条件运算符能简写
label="顺序" if order == 0 else "随机"
在python字典中获取随机值
https://www.imooc.com/wenda/detail/597400
word = random.choice(list(words.items()))